سؤال

تحطمت القرص الصلب على جهاز الكمبيوتر المحمول الخاص بي للتو وفقدت كل الكود المصدري لتطبيق كنت أعمل عليه خلال الشهرين الماضيين. كل ما لدي هو ملف APK الذي يتم تخزينه في بريدي الإلكتروني عندما أرسلته إلى صديق.

هل هناك أي طريقة لاستخراج رمز المصدر الخاص بي من ملف APK هذا؟

هل كانت مفيدة؟

المحلول

طريقة بسيطة: استخدم أداة عبر الإنترنت http://www.javadecompilers.com/apk, ، تحميل APK والحصول على رمز المصدر.


إجراءات فك التشفير .apk ، طريقة خطوة بخطوة:

الخطوة 1:

  1. قم بعمل مجلد جديد ونسخه عبر ملف .APK الذي تريد فك تشفيره.

  2. الآن أعد تسمية تمديد ملف .APK إلى .zip (على سبيل المثال إعادة تسمية من fileName.apk إلى filename.zip) وحفظه. يمكنك الآن الوصول إلى ملفات الفئات.

الخطوة 2:

  1. الآن استخراج ملف .zip في نفس المجلد (أو مجلد جديد).

  2. تنزيل Dex2Jar واستخراجه إلى نفس المجلد (أو مجلد جديد).

  3. انقل ملف classes.dex إلى مجلد dex2jar.

  4. افتح الآن موجه الأوامر وقم بتغيير الدليل إلى هذا المجلد (أو المجلد الجديد). ثم اكتب d2j-dex2jar classes.dex (لنظام التشغيل MAC أو Ubuntu Write ./d2j-dex2jar.sh classes.dex) واضغط على إدخال. لديك الآن ملف classes.dex.dex2jar في نفس المجلد.

  5. تنزيل Java Decompiler, ، انقر نقرًا مزدوجًا على JD-Gui ، انقر فوق ملف Open ، وفتح Classes.dex.dex2jar من هذا المجلد: الآن يمكنك الحصول على ملفات الفصل.

  6. احفظ كل ملفات الفئة هذه (في JD -GUI ، انقر فوق ملف -> حفظ جميع المصادر) حسب اسم SRC. في هذه المرحلة ، تحصل على مصدر Java لكن ملفات .xml لا تزال غير قابلة للقراءة ، لذا تابع.

الخطوه 3:

الآن افتح مجلد جديد آخر

  1. ضع في ملف .apk الذي تريد فك تشفيره

  2. قم بتنزيل أحدث إصدار من apktool و Apktool تثبيت نافذة (يمكن تنزيل كلاهما من نفس الرابط) ووضعهما في نفس المجلد

  3. افتح نافذة أمر

  4. الآن قم بتشغيل الأمر مثل apktool if framework-res.apk (إذا لم يكن لديك أحضره هنا)التالى

  5. apktool d myApp.apk (حيث يشير myapp.apk إلى اسم الملف الذي تريد فك تشفيره)

يمكنك الآن الحصول على مجلد ملف في هذا المجلد ويمكنك بسهولة قراءة ملفات XML الخاصة بـ APK.

الخطوة 4:

إنها ليست أي خطوة ، فقط نسخ محتويات كلا المجلدين (في هذه الحالة ، كلا المجلدين الجديدين) إلى واحدة

واستمتع برمز المصدر ...

نصائح أخرى

هذا وصف بديل - فقط في حال تعثر شخص ما مع الوصف أعلاه. اتبع الخطوات:

  1. تحميل apktool.bat (أو apktool للينكس) و apktool_<version>.jar من http://ibotpeaches.github.io/apktool/install/
  2. إعادة تسمية ملف الجرة من الأعلى إلى apktool.jar ووضع كلا الملفين في نفس المجلد

  3. افتح صندوق DOS (cmd.exe) وتغيير إلى هذا المجلد ؛ تحقق من تثبيت بيئة Java (لفحص Linux الملاحظات المتعلقة بالمكتبات المطلوبة أيضًا)
  4. بداية: apktool decode [apk file]

    نتيجة وسيطة: ملفات الموارد ، AndroidManifest.xml

  5. قم بفك ضغط ملف APK مع فصل خاطئ من اختيارك

    نتيجة وسيطة: classes.dex

  6. تنزيل واستخراج dex2jar-0.0.9.15.zip من http://code.google.com/p/dex2jar/downloads/detail؟name=dex2jar-0.0.9.15.zip&can=2&q=
  7. سحب وإسقاط classes.dex على dex2jar.bat (أو أدخل <path_to>\dex2jar.bat classes.dex في صندوق DOS ؛ لاستخدام Linux dex2jar.sh)

    نتيجة وسيطة: classes_dex2jar.jar

  8. أفرغ classes_dex2jar.jar (قد يكون اختياريًا اعتمادًا على decompiler المستخدمة)
  9. قم بتدوين ملفات الفصل (على سبيل المثال مع 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

في الأساس أنت:

  1. يستخدم apktool للحصول على ملفات الموارد من APK
  2. يستخدم dex2jar للحصول على ملف جرة يحتوي على الفئات بتنسيق سيحبه Eclipse.
  3. إنشاء مشروع Eclipse نقطة في ملفات الموارد وملف JAR الجديد
  4. افتح ملف الجرة بأداة مضغوطة وحذف الموارد الحالية
  5. افتح ملف الجرة مع JDGui لعرض رمز المصدر
  6. خذ أي رمز مصدر تحتاج منه JDGui, ، قم بتمسكه في فصل داخل Eclipse وقم بتعديله
  7. احذف تلك الفئة من ملف JAR (حتى لا يكون لديك نفس الفئة المحددة عدة مرات)
  8. شغلها.

Apktool ستعمل. لا تحتاج حتى إلى معرفة keystore لاستخراج الكود المصدري (وهو أمر مخيف بعض الشيء). الجانب السلبي الرئيسي هو أن المصدر يتم تقديمه بتنسيق Smali بدلاً من Java. تأتي الملفات الأخرى مثل الأيقونة و Main.xml بشكل جيد تمامًا وقد يكون الأمر يستحق وقتك لاستعادة تلك على الأقل. في النهاية ، ستحتاج على الأرجح إلى إعادة كتابة رمز Java الخاص بك من نقطة الصفر.

يمكنك العثور على apktool هنا. ما عليك سوى تنزيل Apktool و Helper المناسب (لنظام التشغيل Windows أو Linux أو Mac OS). أوصي باستخدام أداة مثل 7-ZIP لتفريغها.

هناك بضعة طرق لفعل هذا:

  1. استخدم ميزة "ملف تعريف أو تصحيح APK" في Android Studio 3.0.

    يتيح لك فتح واستكشاف APKS في Android Studio. يتم إلغاء تجميع الفصول إلى Smali. لا يتم استخراج الموارد وأشياء مثل "Go to Definition" و "ابحث عن جميع المراجع" وتصحيح الأخطاء لا تعمل بدون الكود المصدري (Android Studio 3.0 Canary 9). قد تعمل بعض ميزات smali الإضافية معها Smalidea.

    android-studio

    select-file

    code

  2. يستخدم جادكس.

    يقوم JADX بفك تشفير الرمز في ملفات مصدر APK معينة إلى Java.

    jdax-img

  3. يستخدم 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 ، إلخ.

http://ibotpeaches.github.io/apktool/

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

استمتع بذلك.

لقد وجدت ما يلي كأبسط طريقة:

  1. أعد تسمية app.apk to app.zip (قم بتغيير الامتداد من apk إلى zip)
  2. استخراج ملف الرمز البريدي في مجلد
  3. يستخدم جادكس أداة لقراءة الكود المصدر ، موجود في ملف classes.dex.

هناك تطبيق لذلك ويستغرق عمومًا بضع نقرات وينتهي.https://github.com/nuvolect/deepdive-droid

  1. حدد التطبيقات ، ضمن "التطبيقات المثبتة" ، حدد التطبيق الخاص بك. إذا لم يكن هناك ، فيمكنك تحميل APK.
  2. حدد "استخراج APK"
  3. حدد "فك APK"
  4. حدد "Decompile مع Jadx". قد يستغرق هذا بضع ثوان أو بضع دقائق حسب سرعة جهازك

بعد ذلك ، يمكنك تصفح الكود المصدري ، وتنزيله على جهاز كمبيوتر آخر مع Elfinder أو البحث من خلاله باستخدام Lucene.

بالإضافة إلى JADX ، يحتوي على CFR و Fernflower Decompilers.

بناءً على حالتك ، إذا كان جهاز Android APK الخاص بك:

حالة 1: لا تصلب (بواسطة Tencent Legu/Qihoo 360/...)

الاختيار 1: استخدام الخدمة عبر الإنترنت

مثل:

باستخدام www.javadecompilers.com

اذهب إلى:

لفك التشفير التلقائي من 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 / Windows jadx-gui.bat)
    • افتح apk ملف
    • سوف فك تشفير تلقائي -> انظر java sourcecode الخاص بك
    • save all أو save as Gradle project

على سبيل المثال:

حالة 2: Harden (بواسطة Tencent Legu/Qihoo 360/...)

الطريقة الرئيسية ل 3 steps:

  1. apk/app to dex
  2. dex to jar
  3. jar to java src

شرح مفصل:

الخطوة 1: apk/app to dex

أداة استخدام (FDex2/Dumpdex) تفريغ/خطاف (واحد أو متعدد) dex ملف من تشغيل التطبيق

خطوات:

إعداد البيئة

تفريغ 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:


يمكن للتفسير التفصيلي رؤية كتابي الإلكتروني على الإنترنت صينى الدورة التعليمية:

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top