
Ninja Reverse Engineering auf Android APK-Paketen
NinjaDroid ist ein einfaches Tool zum Reverse Engineering von Android APK-Paketen.
Veröffentlicht unter: 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)

## Übersicht
NinjaDroid verwendet [AXMLParser](https://github.com/appknox/pyaxmlparser) zusammen mit einer Reihe von Python-Skripten, die auf `aapt`, `keytool`, `string` und ähnlichen basieren, um eine Reihe von Informationen aus einem gegebenen APK-Paket zu extrahieren, wie zum Beispiel:
- Liste der Dateien des APK: Dateiname, Größe, MD5, SHA-1, SHA-256 und SHA-512
- `AndroidManifest.xml`-Info: App-Name, Paketname, Version, SDKs, Berechtigungen, Aktivitäten, Dienste, Broadcast-Empfänger, ...
- `CERT.RSA/DSA`-digitale Zertifikatsinformationen: Seriennummer, Gültigkeit, Fingerabdruck, Aussteller und Inhaber
- Liste von URLs, Shell-Befehlen und anderen generischen Zeichenfolgen, die in die `classes.dex`-Dateien hartcodiert sind
Darüber hinaus verwendet NinjaDroid [apktool](https://github.com/iBotPeaches/Apktool) und [dex2jar](https://github.com/pxb1988/dex2jar) um folgendes zu extrahieren und zu speichern:
- JSON-Reportdatei, die alle extrahierten APK-Informationen enthält
- `AndroidManifest.xml`-Datei (dank `apktool`)
- `CERT.RSA/DSA`-digitale Zertifikatsdatei
- `classes.dex`-Dateien
- übersetzte _.jar_-Datei (dank `dex2jar`)
- disassemblierte smali-Dateien (dank `apktool`)
- `assets/`- und `res/`-Ordner zusammen mit ihrem Inhalt (dank `apktool`)
## Erstellung
Der erste Schritt ist das Klonen des NinjaDroid-Repositorys oder das Herunterladen seines Quellcodes.```shell
$ git clone https://github.com/rovellipaolo/NinjaDroid
$ cd NinjaDroid
NinjaDroid kann auf verschiedene Arten ausgeführt werden: nativ in Ihrer lokalen Umgebung, in Docker, als Flatpak (experimentell) und als Snap (experimentell).
Um NinjaDroid auf Ihrem lokalen Rechner auszuführen, müssen Sie Python 3.5 oder höher, Java 8 oder höher und binutils installieren.
Optional können Sie, wenn das Android SDK lokal installiert ist, die SDK-Version von aapt anstelle der mitgelieferten verwenden. Dazu müssen Sie den aapt-Pfad in ninjadroid/aapt/Aapt.py ändern (d.h. __AAPT_EXEC_PATH = "ninjadroid/aapt/aapt").
Führen Sie einfach die folgenden Befehle aus, die alle Python-Abhängigkeiten installieren (wobei sichergestellt wird, dass aapt, apktool und dex2jar ausführbare Berechtigungen haben) und einen ninjadroid-Symlink zu /usr/local/bin/ hinzufügen.```shell
$ make build-linux
$ make install
$ ninjadroid --help
#### MacOS
Führen Sie einfach die folgenden Befehle aus, die alle benötigten Python-Abhängigkeiten installieren (stellen Sie sicher, dass `aapt`, `apktool` und `dex2jar` ausführbare Berechtigungen haben) und einen `ninjadroid`-Symlink zu `/usr/local/bin/` hinzufügen.```shell
$ make build-macos
$ make install
$ ninjadroid --help
Um NinjaDroid in Docker auszuführen, benötigst du Docker installiert.
Zum Erstellen des Docker-Images führe die folgenden Befehle aus:```shell
$ make build-docker
$ docker run --name ninjadroid ninjadroid:latest ninjadroid --help
Beachten Sie, dass Sie das Verzeichnis mit dem Ziel-APK-Paket an das Docker-Image binden müssen:```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
Und dasselbe gilt auch für das Ausgabeverzeichnis bei Verwendung der Option -e/--extract, für das Sie ebenfalls Berechtigungen erteilen müssen:```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 (experimentell)
Um NinjaDroid als Flatpak auszuführen, müssen `Flatpak` und `flatpak-builder` installiert sein.
Führen Sie einfach die folgenden Befehle aus, die alle benötigten Flatpak-Abhängigkeiten installieren:```shell
$ make build-flatpak
$ flatpak-builder --run flatpak/build flatpak/com.github.rovellipaolo.NinjaDroid.yaml ninjadroid --help
HINWEIS: Die Option -e/--extract funktioniert derzeit nicht korrekt (siehe: https://github.com/rovellipaolo/NinjaDroid/issues/21).
Um NinjaDroid als Snap auszuführen, müssen Snap und snapcraft installiert sein.
Führen Sie einfach die folgenden Befehle aus, die alle benötigten Snap-Abhängigkeiten installieren:```shell
$ make build-snap
$ make install-snap
$ ninjadroid --help
**HINWEIS:** Die Option `-e`/`--extract` funktioniert nicht korrekt, wenn der Snap ohne die Option `--devmode` installiert wird (siehe: https://github.com/rovellipaolo/NinjaDroid/issues/20).
## Test
Sobald Sie es konfiguriert haben (siehe Abschnitt „Installation“), können Sie auch die Tests und das Checkstyle wie folgt ausführen.
### Native
Um sie auf Ihrem lokalen Rechner auszuführen, führen Sie die folgenden Befehle aus:```shell
$ make test
$ make regression
$ make checkstyle
Sie können die Tests auch mit Codeabdeckung ausführen, indem Sie den folgenden Befehl starten:```shell $ make test-coverage
Und/oder konfigurieren Sie den Checkstyle so, dass er bei jedem git commit automatisch ausgeführt wird, indem Sie den folgenden Befehl ausführen:```
$ make install-githooks
Um sie in Docker auszuführen, führen Sie die folgenden Befehle aus:```shell $ make test-docker $ make regression-docker $ make checkstyle-docker
### Flatpak
Um die Regressionstests in Flatpak auszuführen, führen Sie den folgenden Befehl aus:```shell
$ make regression-flatpak
Um die Regressionstests in Snap auszuführen, führen Sie den folgenden Befehl aus:```shell $ make regression-snap
## Verwendung
Im Folgenden finden Sie Beispiele für die Ausführung von NinjaDroid gegen das Beispiel-APK-Paket.