
Android APK पैकेजों पर Ninja रिवर्स इंजीनियरिंग
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) के साथ-साथ `aapt`, `keytool`, `string` आदि पर आधारित Python स्क्रिप्ट्स की एक श्रृंखला का उपयोग करके किसी दिए गए APK पैकेज से कई प्रकार की जानकारी निकालता है, जैसे:
- APK की फ़ाइलों की सूची: फ़ाइल का नाम, आकार, MD5, SHA-1, SHA-256 और SHA-512
- `AndroidManifest.xml` जानकारी: ऐप का नाम, पैकेज का नाम, संस्करण, sdks, अनुमतियाँ, गतिविधियाँ, सेवाएँ, broadcast-receivers, ...
- `CERT.RSA/DSA` डिजिटल प्रमाणपत्र जानकारी: सीरियल नंबर, वैधता, फ़िंगरप्रिंट, जारीकर्ता और स्वामी
- `classes.dex` फ़ाइलों में हार्ड-कोडित URLs, शेल कमांड और अन्य सामान्य स्ट्रिंग्स की सूची
इसके अलावा, 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 स्थानीय रूप से स्थापित है, तो आप शामिल किए गए aapt के बजाय SDK संस्करण का उपयोग कर सकते हैं। ऐसा करने के लिए, आपको ninjadroid/aapt/Aapt.py में aapt स्थान बदलना होगा (अर्थात __AAPT_EXEC_PATH = "ninjadroid/aapt/aapt")।
बस निम्नलिखित कमांड चलाएँ, जो सभी Python निर्भरताओं को स्थापित करेंगे (यह सुनिश्चित करते हुए कि aapt, apktool और dex2jar में निष्पादन योग्य अनुमतियाँ हैं) और /usr/local/bin/ में एक ninjadroid सिमलिंक जोड़ेंगे।```shell
$ make build-linux
$ make install
$ ninjadroid --help
#### MacOS
बस निम्नलिखित कमांड चलाएँ, जो सभी आवश्यक Python निर्भरताओं को स्थापित करेंगे (यह सुनिश्चित करते हुए कि `aapt`, `apktool` और `dex2jar` के पास निष्पादन योग्य अनुमतियाँ हैं) और `/usr/local/bin/` में एक `ninjadroid` सिमलिंक जोड़ेंगे।```shell
$ make build-macos
$ make install
$ ninjadroid --help
Docker में NinjaDroid को निष्पादित करने के लिए, आपको 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
### Flatpak (प्रायोगिक)
Flatpak के रूप में NinjaDroid को चलाने के लिए, आपको `Flatpak` और `flatpak-builder` स्थापित होना चाहिए।
बस निम्नलिखित कमांड चलाएँ, जो सभी आवश्यक Flatpak निर्भरताओं को स्थापित करेंगे:```shell
$ make build-flatpak
$ flatpak-builder --run flatpak/build flatpak/com.github.rovellipaolo.NinjaDroid.yaml ninjadroid --help
नोट: The -e/--extract option does not work correctly at present (देखें: https://github.com/rovellipaolo/NinjaDroid/issues/21).
NinjaDroid को Snap के रूप में चलाने के लिए, आपको Snap और snapcraft इंस्टॉल होना चाहिए।
बस निम्नलिखित कमांड चलाएँ, जो सभी आवश्यक Snap निर्भरताएँ स्थापित करेंगे:```shell
$ make build-snap
$ make install-snap
$ ninjadroid --help
**नोट:** `-e`/`--extract` विकल्प तब सही ढंग से काम नहीं करता जब स्नैप को `--devmode` विकल्प के बिना स्थापित किया जाता है (देखें: https://github.com/rovellipaolo/NinjaDroid/issues/20)।
## परीक्षण
एक बार जब आप इसे कॉन्फ़िगर कर लेते हैं (देखें _"स्थापना"_ अनुभाग), तो आप परीक्षण और चेकस्टाइल भी निम्नानुसार चला सकते हैं।
### मूल
उन्हें अपनी स्थानीय मशीन पर चलाने के लिए, निम्नलिखित कमांड चलाएँ:```shell
$ make test
$ make regression
$ make checkstyle
आप निम्नलिखित कमांड चलाकर कवरेज के साथ परीक्षण भी चला सकते हैं:```shell $ make test-coverage
और/या निम्नलिखित कमांड चलाकर प्रत्येक git commit पर स्वचालित रूप से checkstyle चलाने के लिए कॉन्फ़िगर करें:```
$ make install-githooks
इन्हें Docker में चलाने के लिए, निम्नलिखित कमांड चलाएँ:```shell $ make test-docker $ make regression-docker $ make checkstyle-docker
### Flatpak
फ्लैटपैक में प्रतिगमन परीक्षण चलाने के लिए, निम्नलिखित कमांड चलाएँ:```shell
$ make regression-flatpak
Snap में प्रतिगमन परीक्षण चलाने के लिए, निम्नलिखित कमांड चलाएँ:```shell $ make regression-snap
## उपयोग
निम्नलिखित नमूना APK पैकेज के विरुद्ध NinjaDroid चलाने के उदाहरण हैं।