
أداة تحليل أولي آلي لتطبيقات Android تقوم بفك تجميع العينات، واستخراج الخصائص عبر مطابقة الأنماط القابلة للتكوين، وتنظيم المخرجات لتسريع عمليات الهندسة العكسية وتحليل البرامج الضارة.
DroidLysis هي أداة تحليل مسبق لتطبيقات أندرويد: تقوم بتنفيذ المهام المتكررة والمملة التي نقوم بها عادةً في بداية أي هندسة عكسية. تقوم بتفكيك عينة الأندرويد، وتنظيم المخرجات في أدلة، والبحث عن نقاط مشبوهة في الكود للنظر إليها. يساعد المخرجات مهندس الهندسة العكسية على تسريع الخطوات الأولى للتحليل.
يمكن استخدام DroidLysis مع حزم أندرويد (apk)، وملفات Dalvik التنفيذية (dex)، وملفات Zip (zip)، وملفات Rar (rar)، أو أدلة من الملفات.
sudo apt-get install default-jre git python3 python3-pip unzip wget libmagic-dev libxml2-dev libxslt-dev
$ mkdir -p ~/softs
$ cd ~/softs
$ wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.9.3.jar
$ wget https://bitbucket.org/JesusFreke/smali/downloads/baksmali-2.5.2.jar
$ wget https://github.com/pxb1988/dex2jar/releases/download/v2.4/dex-tools-v2.4.zip
$ unzip dex-tools-v2.4.zip
$ rm -f dex-tools-v2.4.zip
قم بالتثبيت من Git في بيئة افتراضية من Python (python3 -m venv، أو بيئات pyenv الافتراضية إلخ).
$ python3 -m venv venv
$ source ./venv/bin/activate
(venv) $ pip3 install git+https://github.com/cryptax/droidlysis
بدلاً من ذلك، يمكنك تثبيت DroidLysis مباشرةً من PyPi (pip3 install droidlysis).
conf/general.conf. تأكد بشكل خاص من تغيير /home/axelle بأدلةك المناسبة.[tools]
apktool = /home/axelle/softs/apktool_2.9.3.jar
baksmali = /home/axelle/softs/baksmali-2.5.2.jar
dex2jar = /home/axelle/softs/dex-tools-v2.4/d2j-dex2jar.sh
keytool = /usr/bin/keytool
...
python3 ./droidlysis3.py --help
ملف التكوين هو ./conf/general.conf (يمكنك التبديل إلى ملف آخر باستخدام الخيار --config).
هنا تقوم بتكوين موقع الأدوات الخارجية المختلفة (مثل Apktool)، واسم ملفات الأنماط
(افتراضياً ./conf/smali.conf، ./conf/wide.conf، ./conf/arm.conf، ./conf/kit.conf) واسم
ملف قاعدة البيانات (يُستخدم فقط إذا قمت بتحديد --enable-sql)
تأكد من تحديد المسارات الصحيحة لأدوات فك التجميع، وإلا لن تجدها DroidLysis.
يستخدم DroidLysis Python 3. لتشغيله والحصول على الخيارات:
droidlysis --help
على سبيل المثال، اختبره على APK Signal:
droidlysis --input Signal-website-universal-release-6.26.3.apk --output /tmp --config /PATH/TO/DROIDLYSIS/conf/general.conf

مخرجات DroidLysis:
--output /tmp، فسيتم كتابة التحليل إلى /tmp/Signalwebsiteuniversalrelease4.52.4.apk-f3c7d5e38df23925dd0b2fe1f44bfa12bac935a6bc8fe3a485a4436d4487a290.droidlysis.db) تحتوي على الخصائص التي لاحظتها.احصل على الاستخدام مع droidlysis --help
يمكن أن يكون الإدخال ملفاً أو دليلاً من الملفات للبحث فيه بشكل متكرر. يعرف DroidLysis كيفية معالجة حزم أندرويد، وملفات DEX و ODEX و ARM التنفيذية، و ZIP، و RAR. لن يفشل DroidLysis في أنواع الملفات الأخرى (إلا في حالة وجود خطأ...) لكنه لن يتمكن من فهم المحتوى.
عند معالجة أدلة الملفات، من المفيد عادةً نقل العينات المعالجة إلى موقع آخر لمعرفة ما تمت معالجته. يتم التعامل مع هذا بواسطة الخيار --movein. أيضًا، إذا كنت مهتمًا فقط بالإحصائيات، فيجب عليك على الأرجح مسح دليل المخرجات الذي يحتوي على معلومات مفصلة لكل عينة: هذا هو الخيار --clearoutput. إذا كنت تريد تخزين جميع الإحصائيات في قاعدة بيانات SQL، فاستخدم --enable-sql (انظر هنا)
لا يقوم تحليل DroidLysis بفحص SDK الطرف الثالث المعروف افتراضيًا، أي أنه على سبيل المثال لن يبلغ عن أي نشاط مشبوه منها. إذا كنت تريد فحصها، فاستخدم الخيار --no-kit-exception. يؤدي هذا عادةً إلى إنشاء العديد من الخصائص المكتشفة للعينة، حيث أن SDK (مثل الإعلانات) تستخدم العديد من واجهات برمجة التطبيقات المميزة (احصل على موقع GPS، احصل على IMEI، احصل على IMSI، HTTP POST...).
--output DIR)يحتوي هذا الدليل على (عند الاقتضاء):
AndroidManifest.xml قابل للقراءةreslib، الأصول assetssmali (وغيرها)META-INF./unzippedclasses.dex (وغيرها)، وتحويله إلى jar: classes-dex2jar.jar، وفك ضغطه في ./unjarredيتم إنشاء الملفات التالية بواسطة DroidLysis:
autoanalysis.md: يسرد كل نمط اكتشفه DroidLysis وأين.report.md: نفس ما طُبع على وحدة التحكمإذا كنت لا تحتاج إلى إنشاء دليل مخرجات العينة، فاستخدم الخيار --clearoutput.
--import-exodus)$ python3 ./droidlysis3.py --import-exodus --verbose
Processing file: ./droidurl.pyc ...
DEBUG:droidconfig.py:Reading configuration file: './conf/./smali.conf'
DEBUG:droidconfig.py:Reading configuration file: './conf/./wide.conf'
DEBUG:droidconfig.py:Reading configuration file: './conf/./arm.conf'
DEBUG:droidconfig.py:Reading configuration file: '/home/axelle/.cache/droidlysis/./kit.conf'
DEBUG:droidproperties.py:Importing ETIP Exodus trackers from https://etip.exodus-privacy.eu.org/api/trackers/?format=json
DEBUG:connectionpool.py:Starting new HTTPS connection (1): etip.exodus-privacy.eu.org:443
DEBUG:connectionpool.py:https://etip.exodus-privacy.eu.org:443 "GET /api/trackers/?format=json HTTP/1.1" 200 None
DEBUG:droidproperties.py:Appending imported trackers to /home/axelle/.cache/droidlysis/./kit.conf
يتم إلحاق المتتبعات من Exodus غير الموجودة في kit.conf الأولي الخاص بك إلى ~/.cache/droidlysis/kit.conf. قارن بين الملفين وتحقق من المتتبعات التي ترغب في إضافتها.
إذا كنت تريد معالجة دليل من العينات، فربما تود تخزين الخصائص التي وجدها DroidLysis في قاعدة بيانات، لتحليل النتائج والاستعلام عنها بسهولة. في هذه الحالة، استخدم الخيار --enable-sql. سيؤدي هذا تلقائيًا إلى تفريغ جميع النتائج في قاعدة بيانات باسم droidlysis.db، في جدول باسم samples. كل إدخال في الجدول يتعلق بعينة معينة. كل عمود هو خصائص يتتبعها DroidLysis.
على سبيل المثال، لاسترداد جميع أسماء الملفات ومجموع SHA256 وخصائص smali لقاعدة البيانات:
sqlite> select sha256, sanitized_basename, smali_properties from samples;
f3c7d5e38df23925dd0b2fe1f44bfa12bac935a6bc8fe3a485a4436d4487a290|Signalwebsiteuniversalrelease4.52.4.apk|{"send_sms": true, "receive_sms": true, "abort_broadcast": true, "call": false, "email": false, "answer_call": false, "end_call": true, "phone_number": false, "intent_chooser": true, "get_accounts": true, "contacts": false, "get_imei": true, "get_external_storage_stage": false, "get_imsi": false, "get_network_operator": false, "get_active_network_info": false, "get_line_number": true, "get_sim_country_iso": true,
...
يمكن تكوين وتوسيع ما يكتشفه DroidLysis في ملفات دليل ./conf.
يتكون النمط من:
send_sms. هذا لتسمية الخاصية. يجب أن يكون فريدًا عبر ملف .conf.;->sendTextMessage|;->sendMultipartTextMessage|SmsManager;->sendDataMessage. في ملف smali.conf، تتم مطابقة هذا التعبير العادي على كود Smali. في هذه الحالة بالذات، هناك 3 طرق مختلفة لإرسال رسائل SMS من الكود: sendTextMessage و sendMultipartTextMessage و sendDataMessage.[send_sms]
pattern=;->sendTextMessage|;->sendMultipartTextMessage|SmsManager;->sendDataMessage
description=إرسال رسائل SMS
تحتفظ Exodus Privacy بقائمة من SDKs المختلفة التي من المثير استبعادها من تحليلنا عبر conf/kit.conf.
أضف الخيار --import_exodus إلى سطر أوامر droidlysis: هذا سيحلل المتتبعات الموجودة التي تعرفها Exodus Privacy والتي ليست موجودة بعد في kit.conf الخاص بك. أخيرًا، سيقوم بإلحاق جميع المتتبعات الجديدة إلى ~/.cache/droidlysis/kit.conf.
بعد ذلك، قد ترغب في ترتيب ملف kit.conf الخاص بك:
import configparser
import collections
import os
config = configparser.ConfigParser({}, collections.OrderedDict)
config.read(os.path.expanduser('~/.cache/droidlysis/kit.conf'))
# ترتيب جميع الأقسام أبجديًا
config._sections = collections.OrderedDict(sorted(config._sections.items(), key=lambda t: t[0] ))
with open('sorted.conf','w') as f:
config.write(f)
يساعدك هذا النص في البحث عن الطرق على واجهة JEB التي تحتوي على كود يطابق نمط smali والتنقل بسهولة إلى تلك الوظائف. عند تحميل النص وتحديد ملف details.md بين ملفات تحليل droidlysis، سيظهر مربع بحث. بمجرد نقله، يمكنك بسهولة إظهار نافذة البحث مرة أخرى باستخدام اختصار تنفيذ النص الأخير.
script/DroidlysisSearch.py