
مزيل تعتيم دالفيك قائم على الأنماط يستخدم تنفيذًا محدودًا لتحسين التحليل الدلالي.
مزيل تشويش (Deobfuscator) لـ Dalvik يعتمد على الأنماط ويستخدم تنفيذًا محدودًا لتحسين التحليل الدلالي. كما أنه مصدر إلهام لمزيل تشويش Android آخر: Simplify.
قبل

بعد

sha1: a68d5d2da7550d35f7dbefc21b7deebe3f4005f3
md5: 2dd2eeeda08ac8c15be8a9f2d01adbe8
بما أنك مهندس عكسي محترف لنظام Android، فأنا متأكد من أنك تمتلك بالفعل Smali و Baksmali في مسارك. إذا لم يتم تثبيتهما لسبب غريب، فيجب أن يساعدك هذا في البدء، لكن يرجى فحصه بعناية قبل التشغيل:
mkdir ~/bin || cd ~/bin
curl --location -O https://bitbucket.org/JesusFreke/smali/downloads/smali-2.2.5.jar && mv smali-*.jar smali.jar
curl --location -O https://bitbucket.org/JesusFreke/smali/downloads/baksmali-2.2.5.jar && mv baksmali-*.jar baksmali.jar
curl --location -O https://bitbucket.org/JesusFreke/smali/downloads/smali
curl --location -O https://bitbucket.org/JesusFreke/smali/downloads/baksmali
chmod +x ./smali ./baksmali
export PATH=$PATH:$PWD
تأكد من أن adb موجود في مسارك.
gem install dex-oracle
أو إذا كنت تفضل البناء من المصدر:
git clone https://github.com/CalebFenton/dex-oracle.git
cd dex-oracle
gem install bundler
bundle install
يجب أن يكون لديك إما محاكي قيد التشغيل أو جهاز متصل لكي يعمل Oracle. الحد الأدنى المطلوب لإصدار Android هو 5.0!
يحتاج Oracle إلى تنفيذ الطرق (methods) على نظام Android حي. يمكن أن يكون ذلك على جهاز أو محاكي (مفضل). إذا كان جهازًا، تأكد من أنك لا تمانع في تشغيل كود قد يكون ضارًا عليه.
إذا كنت ترغب في استخدام محاكي، ولديك بالفعل Android SDK مثبتًا، يمكنك إنشاء وبدء صور المحاكي باستخدام:
android avd
Usage: dex-oracle [opts] <APK / DEX / Smali Directory>
-h, --help عرض هذه الشاشة
-s ANDROID_SERIAL, معرف الجهاز لتنفيذ السائق، الافتراضي=""
--specific-device
-t, --timeout N مهلة تنفيذ أمر ADB بالثواني، الافتراضي="120"
-i, --include PATTERN تحسين الطرق (methods) والفئات (classes) المطابقة للنمط فقط، مثلاً Ldune;->melange\(\)V
-e, --exclude PATTERN استبعاد هذه الأنواع من التحسين؛ بما في ذلك التجاوزات (overrides)
--disable-plugins STRING[,STRING]*
تعطيل الإضافات، مثلاً stringdecryptor,unreflector
--list-plugins عرض الإضافات المتاحة
-v, --verbose كن مفصلاً
-V, --vverbose كن مفصلاً جداً
على سبيل المثال، لإزالة التشويش عن الطرق فقط في فئة تسمى Lcom/android/system/admin/CCOIoll; داخل ملف APK يسمى obad.apk:
dex-oracle -i com/android/system/admin/CCOIoll obad.apk
يقبل Oracle تطبيقات Android (APK) وملفات Dalvik القابلة للتنفيذ (DEX) وملفات Smali كمدخلات. أولاً، إذا كان الإدخال هو APK أو DEX، يتم تفكيكه إلى ملفات Smali. ثم يتم تمرير ملفات Smali إلى إضافات مختلفة تقوم بالتحليل والتعديلات. تبحث الإضافات عن أنماط يمكن تحويلها إلى شيء أسهل للقراءة. من أجل فهم ما يفعله الكود، يتم تنفيذ بعض طرق Dalvik فعليًا ويتم جمع المخرجات. بهذه الطريقة، يمكن استبدال بعض استدعاءات الطرق بثوابت. بعد ذلك، يتم تحديث جميع ملفات Smali. أخيرًا، إذا كان الإدخال هو ملف APK أو DEX، يتم إعادة تجميع ملفات Smali المعدلة ويتم إنشاء APK أو DEX محدث.
يتم تنفيذ الطريقة بواسطة Driver. يتم دمج إدخال APK أو DEX أو Smali مع Driver في DEX واحد باستخدام dexmerge ويتم دفعه إلى جهاز أو محاكي. يمكن للإضافات بعد ذلك استخدام Driver الذي يستخدم انعكاس Java (reflection) لتنفيذ طرق من DEX المدخل. يمكن استخدام القيم المعادة لتحسين التحليل الدلالي إلى ما هو أبعد من مجرد التعرف على الأنماط. هذا مفيد بشكل خاص للعديد من طرق فك تشفير السلاسل النصية، والتي تأخذ عادةً سلسلة مشفرة أو مصفوفة بايت. أحد القيود هو أن التنفيذ يقتصر على الطرق الثابتة (static methods).
هناك ثلاث إضافات تأتي مع Oracle:
إذا واجهت نوعًا جديدًا من التشويش، فقد يكون من الممكن إزالة التشويش باستخدام Oracle. افحص Smali واكتشف ما إذا كان يمكن للكود إما:
إذا كان أي من هذين الأمرين صحيحًا، فيجب عليك محاولة كتابة إضافتك الخاصة. هناك أربع خطوات لبناء إضافتك الخاصة:
يجب أن تكون الإضافات المضمنة دليلاً جيدًا لفهم الخطوتين #3 و #4. تم تصميم Driver للمساعدة في الخطوة #2.
بالطبع، نرحب دائمًا بمشاركة أي تشويش تصادفه وقد يتعامل معه شخص ما في النهاية.
أولاً، تأكد من أن dx موجود في مسارك. هذا جزء من Android SDK، لكنه ربما ليس في مسارك إلا إذا كنت محترفًا.
مجلد driver هو مشروع Java يُدار بواسطة Gradle. قم باستيراده إلى Eclipse أو IntelliJ وما إلى ذلك وقم بإجراء أي تغييرات تريدها. لإنهاء تحديث driver، قم بتشغيل ./update_driver. سيعيد هذا بناء driver وتحويل ملف JAR الناتج إلى DEX.
إذا كانت هناك مشكلة في تنفيذ كود driver على المحاكي أو الجهاز، فتأكد من فتح monitor (جزء من Android SDK) وتحقق من وجود أي أدلة هناك. حتى إذا كان الخطأ غير مفهوم لك، فسيساعد إذا قمت بنشره مع المشكلة التي ستنشئها.
ليست جميع منصات Android تعمل بشكل جيد مع dex-oracle. بعضها يتعطل عند محاولة تنفيذ ملفات DEX عشوائية. إذا كنت تواجه مشكلة مع Segfaults أو أعطال driver، جرب استخدام Android 4.4.2 API level 19 مع ARM.
من الممكن أن ترى إضافة نمطًا تعتقد أنه تشويش ولكنه في الواقع كود لا يجب تنفيذه. يبدو هذا غير محتمل لأن أنماط التشويش غير عادية حقًا، لكنه ممكن. إذا وجدت أن إضافة معينة تسبب مشاكل وأنت متأكد من أن التطبيق ليس محميًا بواسطة تلك المُشوشة (obfuscator) المعينة، أي أن التطبيق ليس محميًا بـ DexGuard ولكن إضافة DexGuard تحاول تنفيذ أشياء، فما عليك سوى تعطيلها.