
هندسة عكسية نينجا لحزم APK على أندرويد
نينجا درويد (NinjaDroid) هي أداة بسيطة لهندسة عكسية لحزم تطبيقات أندرويد (APK).
منشور على: https://snapcraft.io/ninjadroid```shell $ snap install ninjadroid --channel=beta
[](https://github.com/rovellipaolo/NinjaDroid/actions)
[](https://coveralls.io/github/rovellipaolo/NinjaDroid)
[](https://www.gnu.org/licenses/gpl-3.0)
[](https://snapcraft.io/ninjadroid)

## نظرة عامة
يستخدم NinjaDroid مكتبة [AXMLParser](https://github.com/appknox/pyaxmlparser) مع سلسلة من نصوص Python المبنية على أدوات `aapt` و`keytool` و`string` وغيرها لاستخراج مجموعة من المعلومات من حزمة APK معينة، مثل:
- قائمة ملفات APK: اسم الملف، الحجم، MD5، SHA-1، SHA-256 وSHA-512
- معلومات `AndroidManifest.xml`: اسم التطبيق، اسم الحزمة، الإصدار، SDKs، الأذونات، الأنشطة، الخدمات، مستقبلات البث، ...
- معلومات الشهادة الرقمية `CERT.RSA/DSA`: الرقم التسلسلي، الصلاحية، البصمة، المُصدر والمالك
- قائمة عناوين URL وأوامر shell وسلاسل نصية عامة أخرى مشفرة بشكل ثابت داخل ملفات `classes.dex`
علاوة على ذلك، يستخدم NinjaDroid أدوات [apktool](https://github.com/iBotPeaches/Apktool) و[dex2jar](https://github.com/pxb1988/dex2jar) لاستخراج وتخزين:
- ملف تقرير JSON، الذي يحتوي على جميع معلومات APK المستخرجة
- ملف `AndroidManifest.xml` (بفضل `apktool`)
- ملف الشهادة الرقمية `CERT.RSA/DSA`
- ملفات `classes.dex`
- ملف _.jar_ المُترجم (بفضل `dex2jar`)
- ملفات smali المفككة (بفضل `apktool`)
- مجلدات `assets/` و`res/` مع محتواها (بفضل `apktool`)
## بناء
الخطوة الأولى هي استنساخ مستودع NinjaDroid، أو تنزيل شيفرته المصدرية.```shell
$ git clone https://github.com/rovellipaolo/NinjaDroid
$ cd NinjaDroid
لدى NinjaDroid عدة طرق للتشغيل: أصليًا في بيئتك المحلية، عبر Docker، أو كـ Flatpak (تجريبي)، أو كـ Snap (تجريبي).
لتشغيل NinjaDroid على جهازك المحلي، تحتاج إلى تثبيت Python 3.5 أو أحدث، و Java 8 أو أحدث، و binutils.
اختياريًا، إذا كان لديك Android SDK مثبتًا محليًا، يمكنك استخدام إصدار SDK من aapt بدلاً من الإصدار المضمن. للقيام بذلك، تحتاج إلى تغيير موقع aapt في ملف ninjadroid/aapt/Aapt.py (أي __AAPT_EXEC_PATH = "ninjadroid/aapt/aapt").
ما عليك سوى تشغيل الأوامر التالية، والتي ستقوم بتثبيت جميع تبعيات Python (مع التأكد من أن aapt و apktool و dex2jar لها أذونات تنفيذ) وإضافة رابط رمزي ninjadroid إلى /usr/local/bin/.
git clone https://github.com/evilpan/ninjadroid
cd ninjadroid
pip install -r requirements.txt
chmod +x ninjadroid/aapt/aapt ninjadroid/apktool/apktool.jar ninjadroid/dex2jar/d2j-dex2jar.sh
ln -s $(pwd)/ninjadroid.py /usr/local/bin/ninjadroid
``````shell
$ make build-linux
$ make install
$ ninjadroid --help
ما عليك سوى تشغيل الأوامر التالية، والتي ستقوم بتثبيت جميع تبعيات Python اللازمة (مع التأكد من أن aapt و apktool و dex2jar لها أذونات تنفيذية) وإضافة رابط رمزي ninjadroid إلى /usr/local/bin/.```shell
$ make build-macos
$ make install
$ ninjadroid --help
### Docker
لتنفيذ NinjaDroid في Docker، تحتاج إلى `Docker` مثبت.
لبناء صورة Docker، قم بتشغيل الأوامر التالية:```shell
$ make build-docker
$ docker run --name ninjadroid ninjadroid:latest ninjadroid --help
لاحظ أنك تحتاج إلى ربط الدليل الذي يحتوي على حزمة APK الهدف بصورة Docker:```shell $ mkdir apks $ cp /path/to/your/package.apk apks/package.apk $ docker run --name ninjadroid -it --rm -v $(pwd)/apks:/apks ninjadroid:latest ninjadroid /apks/package.apk -aj
وينطبق الأمر نفسه أيضًا على دليل الإخراج عند استخدام الخيار `-e`/`--extract`، والذي تحتاج أيضًا إلى منحه أذونات:```shell
$ mkdir output
$ chmod 777
$ docker run --name ninjadroid --rm -v $(pwd)/apks:/apks -v $(pwd)/output:/output ninjadroid:latest ninjadroid /apks/package.apk -ae /output
لتشغيل NinjaDroid كـ Flatpak، تحتاج إلى تثبيت Flatpak و flatpak-builder. ما عليك سوى تشغيل الأوامر التالية، والتي ستقوم بتثبيت جميع تبعيات Flatpak المطلوبة:```shell
$ make build-flatpak
$ flatpak-builder --run flatpak/build flatpak/com.github.rovellipaolo.NinjaDroid.yaml ninjadroid --help
**ملاحظة:** خيار `-e`/`--extract` لا يعمل بشكل صحيح حالياً (انظر: https://github.com/rovellipaolo/NinjaDroid/issues/21).
### Snap (تجريبي)
لتشغيل NinjaDroid كـ Snap، تحتاج إلى تثبيت `Snap` و`snapcraft`.
ما عليك سوى تشغيل الأوامر التالية، والتي ستقوم بتثبيت جميع تبعيات Snap المطلوبة:```shell
$ make build-snap
$ make install-snap
$ ninjadroid --help
ملاحظة: لا يعمل الخيار -e/--extract بشكل صحيح عند تثبيت snap دون استخدام الخيار --devmode (انظر: https://github.com/rovellipaolo/NinjaDroid/issues/20).
بعد تكوينه (انظر قسم "التثبيت")، يمكنك أيضًا تشغيل الاختبارات والتحقق من النمط كما يلي.
لتشغيلها على جهازك المحلي، أطلق الأوامر التالية:```shell $ make test $ make regression $ make checkstyle
يمكنك أيضًا تشغيل الاختبارات مع التغطية عن طريق تشغيل الأمر التالي:```shell
$ make test-coverage
و/أو قم بتكوين checkstyle ليعمل تلقائياً عند كل git commit عن طريق إطلاق الأمر التالي:``` $ make install-githooks
### Docker
لتشغيلها في Docker، قم بتشغيل الأوامر التالية:```shell
$ make test-docker
$ make regression-docker
$ make checkstyle-docker
لتشغيل اختبارات الانحدار في Flatpak، قم بتشغيل الأمر التالي:```shell $ make regression-flatpak
### Snap
لتشغيل اختبارات الانحدار في Snap، قم بتشغيل الأمر التالي:```shell
$ make regression-snap