هل هناك طريقة للحصول على الرمز المصدر من ملف APK؟
-
01-10-2019 - |
سؤال
تحطمت القرص الصلب على جهاز الكمبيوتر المحمول الخاص بي للتو وفقدت كل الكود المصدري لتطبيق كنت أعمل عليه خلال الشهرين الماضيين. كل ما لدي هو ملف APK الذي يتم تخزينه في بريدي الإلكتروني عندما أرسلته إلى صديق.
هل هناك أي طريقة لاستخراج رمز المصدر الخاص بي من ملف APK هذا؟
المحلول
طريقة بسيطة: استخدم أداة عبر الإنترنت http://www.javadecompilers.com/apk, ، تحميل APK والحصول على رمز المصدر.
إجراءات فك التشفير .apk ، طريقة خطوة بخطوة:
الخطوة 1:
قم بعمل مجلد جديد ونسخه عبر ملف .APK الذي تريد فك تشفيره.
الآن أعد تسمية تمديد ملف .APK إلى .zip (على سبيل المثال إعادة تسمية من fileName.apk إلى filename.zip) وحفظه. يمكنك الآن الوصول إلى ملفات الفئات.
الخطوة 2:
الآن استخراج ملف .zip في نفس المجلد (أو مجلد جديد).
تنزيل Dex2Jar واستخراجه إلى نفس المجلد (أو مجلد جديد).
انقل ملف classes.dex إلى مجلد dex2jar.
افتح الآن موجه الأوامر وقم بتغيير الدليل إلى هذا المجلد (أو المجلد الجديد). ثم اكتب
d2j-dex2jar classes.dex
(لنظام التشغيل MAC أو Ubuntu Write./d2j-dex2jar.sh classes.dex
) واضغط على إدخال. لديك الآن ملف classes.dex.dex2jar في نفس المجلد.تنزيل Java Decompiler, ، انقر نقرًا مزدوجًا على JD-Gui ، انقر فوق ملف Open ، وفتح Classes.dex.dex2jar من هذا المجلد: الآن يمكنك الحصول على ملفات الفصل.
احفظ كل ملفات الفئة هذه (في JD -GUI ، انقر فوق ملف -> حفظ جميع المصادر) حسب اسم SRC. في هذه المرحلة ، تحصل على مصدر Java لكن ملفات .xml لا تزال غير قابلة للقراءة ، لذا تابع.
الخطوه 3:
الآن افتح مجلد جديد آخر
ضع في ملف .apk الذي تريد فك تشفيره
قم بتنزيل أحدث إصدار من apktool و Apktool تثبيت نافذة (يمكن تنزيل كلاهما من نفس الرابط) ووضعهما في نفس المجلد
افتح نافذة أمر
الآن قم بتشغيل الأمر مثل
apktool if framework-res.apk
(إذا لم يكن لديك أحضره هنا)التالىapktool d myApp.apk
(حيث يشير myapp.apk إلى اسم الملف الذي تريد فك تشفيره)
يمكنك الآن الحصول على مجلد ملف في هذا المجلد ويمكنك بسهولة قراءة ملفات XML الخاصة بـ APK.
الخطوة 4:
إنها ليست أي خطوة ، فقط نسخ محتويات كلا المجلدين (في هذه الحالة ، كلا المجلدين الجديدين) إلى واحدة
واستمتع برمز المصدر ...
نصائح أخرى
هذا وصف بديل - فقط في حال تعثر شخص ما مع الوصف أعلاه. اتبع الخطوات:
- تحميل
apktool.bat
(أوapktool
للينكس) وapktool_<version>.jar
من http://ibotpeaches.github.io/apktool/install/ - إعادة تسمية ملف الجرة من الأعلى إلى
apktool.jar
ووضع كلا الملفين في نفس المجلد - افتح صندوق DOS (
cmd.exe
) وتغيير إلى هذا المجلد ؛ تحقق من تثبيت بيئة Java (لفحص Linux الملاحظات المتعلقة بالمكتبات المطلوبة أيضًا) - بداية:
apktool decode [apk file]
نتيجة وسيطة: ملفات الموارد ،
AndroidManifest.xml
- قم بفك ضغط ملف APK مع فصل خاطئ من اختيارك
نتيجة وسيطة:
classes.dex
- تنزيل واستخراج
dex2jar-0.0.9.15.zip
من http://code.google.com/p/dex2jar/downloads/detail؟name=dex2jar-0.0.9.15.zip&can=2&q= - سحب وإسقاط
classes.dex
علىdex2jar.bat
(أو أدخل<path_to>\dex2jar.bat classes.dex
في صندوق DOS ؛ لاستخدام Linuxdex2jar.sh
)نتيجة وسيطة:
classes_dex2jar.jar
- أفرغ
classes_dex2jar.jar
(قد يكون اختياريًا اعتمادًا على decompiler المستخدمة) - قم بتدوين ملفات الفصل (على سبيل المثال مع JD-Gui أو DJ Decompiler)
نتيجة: مصدر الرمز
ملاحظة: لا يُسمح له بإزالة حزم الطرف الثالث ؛ يهدف هذا الدليل إلى استرداد رمز المصدر الشخصي من ملف APK فقط ؛ أخيرًا ، من المرجح أن يكون الرمز الناتج محظورًا
بينما قد تكون قادرًا على إلغاء توحيدك APK
ملف ، من المحتمل أن تضغط على مشكلة كبيرة واحدة:
لن يعيد الرمز الذي كتبته. بدلاً من ذلك ، ستعيد أي شيء تم تضمينه للمترجم ، مع متغيرات معطاة أسماء عشوائية ، وكذلك الوظائف المعطاة أسماء عشوائية. قد يستغرق الأمر وقتًا أطول بكثير لمحاولة إلغاء توسيعها واستعادتها إلى الكود الذي كان لديك ، مما سيكون عليه البدء من جديد.
للأسف ، قتلت أشياء مثل هذه العديد من المشاريع.
للمستقبل ، أوصي بشدة بتعلم نظام التحكم في الإصدار ، مثل CVS, SVN و شخص سخيف إلخ.
وكيفية دعمها.
يوجد أيضًا تطبيق جديد على لعب متجر الذي يمكن من خلاله فك تشكيل APK (تطبيقات النظام أيضًا) وعرض الرمز المصدر على هاتفك الذكي مباشرة. يحفظ الملفات إلى بطاقة SD الخاصة بك حتى تتمكن من عرضها على جهاز الكمبيوتر الخاص بك أيضًا. لا يتطلب الجذر أو أي شيء آخر.
فقط تثبيت واستمتع. أعتقد أن هذه هي أسهل طريقة لإزالة توحيد التطبيق.
apktool هو أفضل شيء يمكنك تجربته. لقد أنقذت بعض XML معها ، لكنني بصراحة لا أعرف كيف ستعمل مع رمز .java.
أوصيك أن يكون لديك مستودع رمز حتى لو كنت المبرمج الوحيد. لقد كنت أستخدم خزانة المشروع لمشاريعي الخاصة. يمنحك حرة SVN و GIT Repos.
تصف هاتان المادتان كيفية الجمع بين استخدام apktool
و dex2jar
لأخذ APK
ملف وإنشاء مشروع Eclipse يمكنه إنشاءه وتشغيله.
http://blog.inyourbits.com/2012/11/extending-existing-android-applications.html
http://blog.inyourbits.com/2012/12/extending-existing-android-applications.html
في الأساس أنت:
- يستخدم
apktool
للحصول على ملفات الموارد من APK - يستخدم
dex2jar
للحصول على ملف جرة يحتوي على الفئات بتنسيق سيحبه Eclipse. - إنشاء مشروع Eclipse نقطة في ملفات الموارد وملف JAR الجديد
- افتح ملف الجرة بأداة مضغوطة وحذف الموارد الحالية
- افتح ملف الجرة مع
JDGui
لعرض رمز المصدر - خذ أي رمز مصدر تحتاج منه
JDGui
, ، قم بتمسكه في فصل داخل Eclipse وقم بتعديله - احذف تلك الفئة من ملف JAR (حتى لا يكون لديك نفس الفئة المحددة عدة مرات)
- شغلها.
Apktool ستعمل. لا تحتاج حتى إلى معرفة keystore لاستخراج الكود المصدري (وهو أمر مخيف بعض الشيء). الجانب السلبي الرئيسي هو أن المصدر يتم تقديمه بتنسيق Smali بدلاً من Java. تأتي الملفات الأخرى مثل الأيقونة و Main.xml بشكل جيد تمامًا وقد يكون الأمر يستحق وقتك لاستعادة تلك على الأقل. في النهاية ، ستحتاج على الأرجح إلى إعادة كتابة رمز Java الخاص بك من نقطة الصفر.
يمكنك العثور على apktool هنا. ما عليك سوى تنزيل Apktool و Helper المناسب (لنظام التشغيل Windows أو Linux أو Mac OS). أوصي باستخدام أداة مثل 7-ZIP لتفريغها.
هناك بضعة طرق لفعل هذا:
استخدم ميزة "ملف تعريف أو تصحيح APK" في Android Studio 3.0.
يتيح لك فتح واستكشاف APKS في Android Studio. يتم إلغاء تجميع الفصول إلى Smali. لا يتم استخراج الموارد وأشياء مثل "Go to Definition" و "ابحث عن جميع المراجع" وتصحيح الأخطاء لا تعمل بدون الكود المصدري (Android Studio 3.0 Canary 9). قد تعمل بعض ميزات smali الإضافية معها Smalidea.
يستخدم جادكس.
يقوم JADX بفك تشفير الرمز في ملفات مصدر APK معينة إلى Java.
يستخدم apktool.
APKTOOL هي أداة سطر الأوامر التي تستخرج الموارد وتزيل الكود في SMALI لـ APK معين. يمكنك إعادة ترجمة باستخدام apktool أيضا. إليك مثال على ذلك:
$ apktool d test.apk I: Using Apktool 2.2.4 on test.apk I: Loading resource table... I: Decoding AndroidManifest.xml with resources... I: Loading resource table from file: 1.apk I: Regular manifest package... I: Decoding file-resources... I: Decoding values */* XMLs... I: Baksmaling classes.dex... I: Copying assets and libs... I: Copying unknown files... I: Copying original files... $ apktool b test I: Using Apktool 2.2.4 on test I: Checking whether sources has changed... I: Smaling smali folder into classes.dex... I: Checking whether resources has changed... I: Building resources... I: Building apk file... I: Copying unknown files/dir...
قد يكون من السهل رؤية المصدر:
في Android Studio 2.3 ، Build -> Analyze APK -> Select the apk that you want to decompile
.
سترى أنه رمز المصدر.
رابط للرجوع:
https://medium.com/google-developers/making-the-most-f-the-apk-analyzer-c066cb871ea2
سأريكم طريقة أخرى لإزالة تجميع .apk الملفات.
يمكنك متابعة الخطوتين الأولتين من "برانكول جارج". لذلك لديك فرص أخرى:
الخطوه 3':
تحميل "JD-Gui", ، من السهل العثور على هذا واحد. افتح .إناء ملف في "jd-gui.exe". (ملف> فتح ملف> 'العثور على الخاص بك .إناء ملف'). بعد هذا الإجراء ، يمكنك توفير جميع الموارد في أ .أَزِيز ملف.
لذا،
1st - عليك إعادة تسمية .apk ملف إلى .أَزِيز
الثاني - عليك فك التشفير .DEX ملف (إذا كنت تريد ، فك تشفير .apk ملف إلى Dex2Jar, ، أن من الممكن)
3 - عليك فك التشفير .إناء ملف مع JD-Gui
أقل عبر الانترنت أداة:
http://www.javadecompilers.com/apk
تفعل كل شيء بنقرة واحدة: فك الارتباط . (في ملف .zip واحد) مع decompiler جيد للغاية (رئة Jadx Return Java في الأماكن/الوظائف حيث يجمع آخر تعليقات تعليقات داخل وظيفة مثل "غير قادر على فك" أو بعض رمز Android/الجهاز)
هذا الموقع https://www.apkdecompilers.com/ هل فعلت ذلك تلقائيا.
جربت الموقع المذكور في الإجابة المقبولة أولاً ، لكن هذا لم ينجح بالنسبة لي.
أنا شخصيا يوصي عرض تطبيق Java Android للحصول على رمز المصدر. يمكنك تنزيله من متجر Play أو من هنا
apktool للهندسة العكسية الطرف الثالث ، مغلقة ، تطبيقات Android الثنائية.
يمكن أن فك تشفير الموارد إلى الشكل الأصلي تقريبًا وإعادة بنائها بعد إجراء بعض التعديلات.
يجعل من الممكن تصحيح رمز Smali خطوة بخطوة. كما أنه يجعل العمل مع تطبيق أسهل بسبب بنية الملفات الشبيهة بالمشروع وأتمتة بعض المهام المتكررة مثل بناء APK ، إلخ.
apktool هو الطريق للذهاب. توجد خدمة apktool عبر الإنترنت أيضًا: http://www.javadecompilers.com/apktool
من الواضح أن بعض القيود موجودة بسبب الخدمة "الطبيعة عبر الإنترنت": يمكنك استخراج الأصول والبحث عنها والملف الواضح ، ولكن من المستحيل إعادة ترجمة التطبيق في الوقت الحالي.
ومع ذلك ، فهذه طريقة بدون متطابق لفتح تطبيق Android.
يمكنك المحاولة Dexpatcher. حتى أنه يتكامل مع Android Studio. يستخدم apktool و Dex2Jar داخليا.
يمكنك استخدام هذه الأدوات بشكل مستقل كذلك.apktool يقلل APK ، وملفات .DEX ، والتي يمكن تحويلها إلى JAR باستخدام DEX2JAR. يمكن إلغاء إبطال جرة باستخدام JD-Gui. يمكنك رؤية رمز Java بمساعدة تلك الأداة. على الرغم من أنه لا يمكن ضمان تشابه التعليمات البرمجية المنقولة مع الكود الفعلي. هناك بعض المتقدمة رمز التشويش الأدوات المتاحة في السوق ، والتي تعبث الرمز لجعل من الصعب فك / فهم. على سبيل المثال. بروغ
يقدم لك Android Studio تحليل أي ملف APK.
1 - من قائمة الإنشاء ، اختر تحليل خيار APK وحدد ملف APK. 2 - سيؤدي هذا إلى ملف classes.dex والملفات الأخرى. 3 - انقر على الفئات. 4 - من وإعدادات Android Studio قم بتثبيت مكون إضافي يسمى "Dex to Jar" 5 - انقر على أي ملف نشاط لمشروعك المستخرج واختر DEX إلى JAR من قائمة الإنشاء.
سيؤدي هذا إلى الرمز الفعلي لملف Java الخاص بك.
هتافات.
أبسط طريقة هي استخدام APK Oneclick Decompiler. هذه حزمة أدوات لإلغاء توحيد وتفكيك APKS (حزم Android).
الميزات
- يتم دمج جميع الميزات في قائمة Windows النقر بزر الماوس الأيمن.
- فئات APK Decompile إلى رموز مصدر Java.
- افصل APK إلى رمز Smali وفك تشفير موارده.
- قم بتثبيت APK على الهاتف عن طريق النقر بزر الماوس الأيمن.
- إعادة ترجمة APK بعد تحرير رمز SMALI و/أو الموارد. أثناء إعادة الترجمة:
- تحسين صور PNG
- توقيع APKS
- Zipalign
المتطلبات
يجب تثبيت Java Runtime Environment (JRE).
يمكنك تنزيله من هذا الرابط APK Oneclick Decompiler
استمتع بذلك.
لقد وجدت ما يلي كأبسط طريقة:
- أعد تسمية app.apk to app.zip (قم بتغيير الامتداد من apk إلى zip)
- استخراج ملف الرمز البريدي في مجلد
- يستخدم جادكس أداة لقراءة الكود المصدر ، موجود في ملف classes.dex.
هناك تطبيق لذلك ويستغرق عمومًا بضع نقرات وينتهي.https://github.com/nuvolect/deepdive-droid
- حدد التطبيقات ، ضمن "التطبيقات المثبتة" ، حدد التطبيق الخاص بك. إذا لم يكن هناك ، فيمكنك تحميل APK.
- حدد "استخراج APK"
- حدد "فك APK"
- حدد "Decompile مع Jadx". قد يستغرق هذا بضع ثوان أو بضع دقائق حسب سرعة جهازك
بعد ذلك ، يمكنك تصفح الكود المصدري ، وتنزيله على جهاز كمبيوتر آخر مع Elfinder أو البحث من خلاله باستخدام Lucene.
بالإضافة إلى JADX ، يحتوي على CFR و Fernflower Decompilers.
بناءً على حالتك ، إذا كان جهاز Android APK الخاص بك:
حالة 1: لا تصلب (بواسطة Tencent Legu/Qihoo 360/...)
الاختيار 1: استخدام الخدمة عبر الإنترنت
مثل:
باستخدام www.javadecompilers.com
اذهب إلى:
- http://www.javadecompilers.com/apk
- ملاحظة: داخليًا باستخدام جادكس
لفك التشفير التلقائي من APK إلى Java Sourcecode
خطوات:
upload
ملف APK + انقر فوق Run
+ انتظر بعض الوقت + انقر فوق Download
للحصول على zip + unsip ->
sources/com/{yourCompanyName}/{yourProjectName}
هل رمز مصدر جافا المتوقع
الاختيار 2: فك الارتباط/الكراك بنفسك
استخدم الأداة ذات الصلة لإزالة التجميع/الكراك بنفسك:
استعمال jadx
/jadx-gui
يتحول apk
إلى java sourcecode
تحميل JADX-0.9.0.ZIP ثم فك ضغط bin/jadx
, ، ومن بعد:
- وضع سطر الأوامر:
- في المدى النهائي:
jadx-0.9.0/bin/jadx -o output_folder /path_to_your_apk/your_apk_file.apk
- سيظهر Output_folder فك التشفير
sources
وresources
sources/com/{yourCompanyName}/{yourProjectName}
هو متوقعjava sourcecode
- في المدى النهائي:
- وضع واجهة المستخدم الرسومية
- انقر نقرًا مزدوجًا للتشغيل
jadx-0.9.0/bin/jadx-gui
(لينكسjadx-gui.sh
/ Windowsjadx-gui.bat
) - افتح
apk
ملف - سوف فك تشفير تلقائي -> انظر java sourcecode الخاص بك
save all
أوsave as Gradle project
- انقر نقرًا مزدوجًا للتشغيل
على سبيل المثال:
حالة 2: Harden (بواسطة Tencent Legu/Qihoo 360/...)
الطريقة الرئيسية ل 3 steps
:
apk/app to dex
dex to jar
jar to java src
شرح مفصل:
الخطوة 1: apk/app to dex
أداة استخدام (FDex2
/Dumpdex) تفريغ/خطاف (واحد أو متعدد) dex
ملف من تشغيل التطبيق
خطوات:
إعداد البيئة
- أ
root
إد أندرويد- هاتف حقيقي
- أو المحاكي
- هنا باستخدام صينى مشغل تطبيق Nox 夜 神安卓 模拟器
- هنا باستخدام صينى مشغل تطبيق Nox 夜 神安卓 模拟器
- تثبيت Android APK الخاص بك
- إلى الهاتف أو المحاكي
- المثبتة المثبت Xposed
- تثبيت
FDex2
/Dumpdex في xposed وتمكينه- ملاحظة: الحاجة إعادة بدء Xposed لجعل FDEX2 يعمل
- عنوان تنزيل FDEX2 ، صينى:
- قم بتثبيت Android APK على الهاتف/المحاكي
تفريغ dex
من تشغيل التطبيق
يجري
FDex2
ثم انقر على اسم APK الخاص بك لتمكين لاحقًا لالتقاط/ربط DEX- (في الهاتف/المحاكي) قم بتشغيل تطبيقك
- ابحث عن ونسخ موارد APK بالكامل في
/data/data/com/yourCompanyName/yourProjectName
- في مجلد الجذر بشكل طبيعي سوف تجد عدة
dex
ملف
- في مجلد الجذر بشكل طبيعي سوف تجد عدة
الخطوة 2: dex to jar
أداة استخدام (dex2jar
) تحويل (المنطق المحدد ، الذي يحتوي على تطبيق) dex
ملف إلى jar
ملف
تحميل Dex2Jar حصلت Dex-Tools-2.1-snapshot.zip, ، حصلت Unsip dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh
, ، ومن بعد
sh dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f your_dex_name.dex
على سبيل المثال:
dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f com.xxx.yyy8825612.dex
dex2jar com.xxx.yyy8825612.dex -> ./com.xxx.yyy8825612-dex2jar.jar
الخطوه 3: jar to java src
استخدم إحدى الأدوات:
يتحول jar
إلى java src
من أجل من جرة إلى Java SRC تأثير التحويل:
Jadx
> Procyon
> CRF
>> JD-GUI
لذا أوصي بالاستخدام: Jadx
/jadx-gui
خطوات:
- انقر نقرًا مزدوجًا للتشغيل
jadx-gui
- افتح
dex
ملف File
->save all
على سبيل المثال:
تصدير Java SRC:
يمكن للتفسير التفصيلي رؤية كتابي الإلكتروني على الإنترنت صينى الدورة التعليمية:
- 安卓 应用 的 安全 和
- رمز مصدر البرنامج التعليمي على جيثب: rafan/android_app_security_crack: 安卓 应用 的 安全 和 破解