
يُحوِّل الشيفرة البايتية لـ Dalvik (DEX/APK) إلى شيفرة بايتية مكافئة لـ Java، مما يتيح لأدوات تحليل Java معالجة تطبيقات Android بدقة عالية للحالات الحدية.
ملاحظة: قد لا يكون هذا المستودع محدثًا. سيتم التطوير المستقبلي على https://github.com/Storyyeller/enjarify.
إن Enjarify هي أداة لترجمة كود بايت Dalvik إلى كود بايت Java مكافئ. يتيح ذلك لأدوات تحليل Java تحليل تطبيقات Android.
Enjarify هو تطبيق Python 3 نقي، لذا يمكنك فقط استنساخ المستودع وتشغيله. لتشغيله مباشرة، بافتراض أنك في الدليل العلوي للمستودع، يمكنك فقط تنفيذ
python3 -O -m enjarify.main yourapp.apk
للاستخدام العادي، ربما ترغب في استخدام نصوص التغليف وإعداده في مسارك.
للراحة، يتم توفير نص شل تغليفي، enjarify.sh. سيحاول استخدام PyPy إذا كان متاحًا، لأنه أسرع من CPython. إذا كنت تريد أن تكون قادرًا على استدعاء Enjarify من أي مكان، يمكنك إنشاء رابط رمزي من مكان في PATH الخاص بك، مثل ~/bin. للقيام بذلك، بافتراض أنك داخل المستوى العلوي للمستودع،
ln -s "$PWD/enjarify.sh" ~/bin/enjarify
يتم توفير نص دفعي تغليفي، enjarify.bat. لتتمكن من استدعائه من أي مكان، ما عليك سوى إضافة الدليل الجذر للمستودع إلى PATH الخاص بك. سيقوم النص الدفعي دائمًا باستدعاء python3 كمفسر. إذا كنت تريد استخدام PyPy، فما عليك سوى تعديل النص.
بافتراض أنك قمت بإعداد النص في مسارك بشكل صحيح، يمكنك استدعاؤه من أي مكان بمجرد كتابة enjarify، على سبيل المثال
enjarify yourapp.apk
أبسط شكل من أشكال الاستخدام هو مجرد تحديد ملف apk أو ملف dex كمدخل. إذا قمت بتحديد apk متعدد dex، فسيقوم Enjarify تلقائيًا بترجمة جميع ملفات dex وإخراج النتائج في jar واحد مدمج. إذا قمت بتحديد ملف dex، فسيتم ترجمة ملف dex ذلك فقط. على سبيل المثال بافتراض أنك استخرجت ملفات dex يدويًا، يمكنك تنفيذ
enjarify classes2.dex
ملف الإخراج الافتراضي هو [inputname]-enjarify.jar في الدليل الحالي. لتحديد اسم ملف الإخراج بشكل صريح، مرر الخيار -o أو --output.
enjarify yourapp.apk -o yourapp.jar
افتراضيًا، سيرفض Enjarify استبدال ملف الإخراج إذا كان موجودًا بالفعل. لاستبدال الإخراج، مرر الخيار -f أو --force.
Dex2jar هي أداة أقدم تحاول أيضًا ترجمة Dalvik إلى كود بايت Java. تعمل بشكل معقول معظم الوقت، لكن الكثير من الميزات غير الواضحة أو الحالات الحافة ستتسبب في فشلها أو حتى إنتاج نتائج غير صحيحة بصمت. على النقيض من ذلك، تم تصميم Enjarify للعمل في أكبر عدد ممكن من الحالات، حتى بالنسبة للكود الذي سيفشل فيه Dex2jar. من بين أمور أخرى، يتعامل Enjarify بشكل صحيح مع أسماء الفئات Unicode، والثوابت المستخدمة كأنواع متعددة، والتحويلات الضمنية، ومعالجات الاستثناءات التي تقفز إلى التدفق الطبيعي للتحكم، والفئات التي تشير إلى عدد كبير جدًا من الثوابت، والطرق الطويلة جدًا، ومعالجات الاستثناءات بعد معالج catchall، والقيم الأولية الثابتة من النوع الخاطئ.
لا يقوم Enjarify حاليًا بترجمة البيانات الوصفية الاختيارية مثل سمات ملف المصدر وأرقام الأسطر والتعليقات التوضيحية.
يبذل Enjarify قصارى جهده لترجمة أكبر عدد ممكن من الفئات بنجاح، ولكن هناك بعض الحالات المحتملة حيث لا يكون ذلك ممكنًا ببساطة بسبب القيود في Android أو Java أو كليهما. لحسن الحظ، يحدث هذا فقط في ظروف مصطنعة، لذا لا ينبغي أن يكون مشكلة في الممارسة.
PyPy أسرع بكثير من CPython. لتثبيت PyPy، انظر http://pypy.org/. تأكد من الحصول على PyPy3 بدلاً من PyPy العادي. سيستخدم نص التغليف Linux تلقائيًا الأمر pypy3 إذا كان متاحًا. على Windows، ستحتاج إلى تعديل نص التغليف بنفسك.
افتراضيًا، يقوم Enjarify بتشغيل تحسينات على كود البايت تجعله أكثر قابلية للقراءة للبشر (نشر النسخ، إزالة القيم غير المستخدمة، إلخ). إذا لم تكن بحاجة إلى ذلك، يمكنك تسريع الأمور عن طريق تعطيل التحسينات باستخدام الخيار --fast. لاحظ أنه في الحالة النادرة جدًا حيث تكون الفئة كبيرة جدًا بحيث لا تتناسب مع ملف فئة بدون تحسين، سيقوم Enjarify تلقائيًا بإعادة المحاولة مع تمكين جميع التحسينات، لذا فإن هذا الخيار لا يؤثر على عدد الفئات التي تمت ترجمتها بنجاح.
هذا ليس منتجًا رسميًا من Google (تجريبيًا أو غيره)، إنه مجرد كود يمتلكه Google بالصدفة.