
Penetrationstest- und Audit-Toolkit für Android-Apps.
Ein Java-Werkzeug, das hilft, Android-Apps schneller, einfacher und effizienter zu pentesten. AndroTickler bietet viele Funktionen zur Informationssammlung, statischen und dynamischen Überprüfungen, die die meisten Aspekte des Pentestings von Android-Apps abdecken. Es bietet außerdem mehrere Funktionen, die Pentester während ihrer Tests benötigen. AndroTickler integriert sich zudem mit Frida, um Methoden-Tracing und -Manipulation zu ermöglichen. Es wurde zuvor unter dem Namen Tickler veröffentlicht.
AndroTickler benötigt einen Linux-Host und ein gerootetes Android-Gerät, das über USB angeschlossen ist. Das Tool installiert nichts auf dem Android-Gerät, es erstellt lediglich ein Tickler-Verzeichnis auf /sdcard. AndroTickler ist auf das Android SDK angewiesen, um Befehle auf dem Gerät auszuführen und die App-Daten in das TicklerWorkspace-Verzeichnis auf dem Host zur weiteren Analyse zu kopieren. TicklerWorkspace ist das Arbeitsverzeichnis von AndroTickler und jede App hat ein separates Unterverzeichnis in TicklerWorkspace, das Folgendes enthalten kann (je nach Benutzeraktionen):
Das libs-Verzeichnis und die Konfigurationsdatei Tickler.conf befinden sich im selben Verzeichnis wie die Jar-Datei. Die Konfigurationsdatei legt den Speicherort des TicklerDir-Verzeichnisses auf dem Host und Tickler auf /sdcard des Android-Geräts fest. Wenn die Konfigurationsdatei nicht existiert oder diese beiden Verzeichnisse nicht gesetzt sind, werden Standardwerte verwendet (Tickler_workspace im aktuellen Verzeichnis bzw. /sdcard/Tickler). Das Tickler_lib-Verzeichnis enthält einige Java-Bibliotheken und externe Werkzeuge, die von AndroTickler verwendet werden, wie apktool und dex2jar.
AndroTickler ist stark von den folgenden Werkzeugen abhängig, daher sollten sie vor der Verwendung auf Ihrem Rechner vorhanden sein:
Andere Werkzeuge werden für einige Funktionen benötigt, aber AndroTickler kann auch ohne sie ausgeführt werden:
Tool aus dem Code bauen
gradle build
Verschieben Sie AndroTickler.jar in dasselbe Verzeichnis wie das Tickler_lib-Verzeichnis und die Datei Tickler.conf (automatisch in build/libs erstellt).
Setzen Sie dex2jar als ausführbar (libs/notJars//dex2jar-2.1/d2j-dex2jar.sh und libs/notJars//dex2jar-2.1/d2j_invoke.sh)
Schließen Sie Ihr Android-Gerät mit der zu testenden App an.
Hinweis: Wenn das Bauen des Quellcodes fehlschlägt, können Sie die neueste kompilierte Version über den Releases-Tab herunterladen.
Die aktuelle Version bietet Folgendes:
java -jar AndroTickler.jar -h
Installierte Apps auf dem Gerät auflisten:
java -jar AndroTickler.jar -pkgs
Suche nach einer auf dem Gerät installierten App (Paket), deren Paketname den Suchbegriff enthält:
java -jar AndroTickler.jar -findPkg <searchKey>
java -jar AndroTickler.jar -pkg <package> [andere Optionen]
Jeder Befehl mit einer -pkg-Option (unabhängig davon, ob sie mit einer der folgenden Optionen verwendet wird oder nicht) führt die folgenden Aktionen aus, sofern sie nicht bereits durchgeführt wurden:
java -jar AndroTickler.jar -pkg <package> -info
Gibt die folgenden Informationen zurück:
java -jar AndroTickler.jar -pkg <package> -squeeze [short | <codeLocation> ]
Ruft Folgendes aus dem dekompilierten Java-Code der App ab:
Es ist nicht überraschend, dass die Ausgabe normalerweise riesig ist, daher wird empfohlen, die Ausgabe des Befehls in eine Datei umzuleiten.
short Squeezed nur den dekompilierten Code, der zum Entwickler gehört. Wenn eine App beispielsweise den Paketnamen com.notEnaf.myapp hat, dann squeezed squeeze short nur den Code im Verzeichnis com/notEnaf.
Squeezed den Code nur im codeLocation-Verzeichnis. Hilfreich, um die Suche einzuschränken oder den Quellcode zu squeezen, falls verfügbar.
java -jar AndroTickler.jar -pkg <package> -l [-exp] [-v]
Listet alle Komponenten der App auf.
-exp Zeigt nur exportierte Komponenten an.
-v Liefert detailliertere Informationen für jede Komponente:
java -jar AndroTickler.jar -pkg <package> -l [-act | -ser | -rec | -prov ] [-exp] [-v]
java -jar AndroTickler.jar -pkg <package> -db [|e|l|d] [nu]
Standardmäßig aktualisieren alle -db-Befehle das Daten-Speicherverzeichnis der App auf dem Host, bevor die Prüfung ausgeführt wird.
kein Attribut ODER e Prüft, ob die Datenbanken der App verschlüsselt sind. Dies ist die Standardaktion, wenn nach dem -db-Flag keine Option angegeben wird. l Listet alle Datenbanken der App auf. Verschlüsselte Datenbanken werden möglicherweise nicht erkannt. d Erstellt einen sqlite-Dump einer der unverschlüsselten Datenbanken. nu noUpdate: führt eine der obigen Optionen aus, ohne das Datenverzeichnis der App auf dem Host zu aktualisieren.
java -jar AndroTickler.jar -pkg <package> -diff [d|detailed]
Kopiert das Daten-Speicherverzeichnis der App (nach DataDirOld), fordert den Benutzer auf, die gewünschte Aktion durchzuführen und die Eingabetaste zu drücken, wenn er fertig ist. Dann kopiert es das Daten-Speicherverzeichnis erneut (nach DataDir) und führt einen diff zwischen ihnen durch, um zu zeigen, welche Dateien hinzugefügt, gelöscht oder geändert wurden.
d|detailed Macht dasselbe wie der normale -diff-Befehl, zeigt aber auch an, was genau in Textdateien und unverschlüsselten Datenbanken geändert wurde.
java -jar AndroTickler.jar -pkg <package> -sc <key> [<customLocation>]
Sucht nach dem key an folgenden Stellen:
Die Suche ist case-insensitiv.
Ersetzt den Speicherort des dekompilierten Java-Codes durch den benutzerdefinierten Speicherort.
java -jar AndroTickler.jar -pkg <package> -sd <key>
Durchsucht das Daten-Speicherverzeichnis der App nach dem angegebenen Schlüssel.
Löst Komponenten der App aus, und zwar durch alle möglichen Kombinationen von Intents. Wenn eine Aktivität beispielsweise einen Intent-Filter mit 2 möglichen Aktionen und 3 Daten-URI-Schemata hat, dann wird AndroTickler diese Aktivität mit allen möglichen Kombinationen dieses Intents auslösen. Zusätzlich erfasst AndroTickler die im Java-Code der Komponente erwähnten Intent-Extras, weist ihnen Dummy-Werte zu und fügt sie zu den möglichen Intent-Kombinationen hinzu. Es werden nur Extras der Typen boolean, String, int und float unterstützt.
Wenn die Option -exp verwendet wird, werden die Komponenten ohne Root-Rechte oder spezielle Berechtigungen ausgelöst. Wenn nicht, werden die Komponenten mit Root-Rechten ausgelöst. Dies hilft, die App in zwei verschiedenen Szenarien zu testen: gegen Angreifer mit normalen oder hohen Berechtigungen.
Bevor Komponenten ausgelöst werden, gibt AndroTickler alle auszuführenden Befehle aus. Dann löst es für jeden Befehl die Komponente aus, gibt den Befehl aus und wartet auf den Benutzer. Dies gibt dem Benutzer genügend Zeit, um nach der Ausführung des Befehls zusätzliche Prüfungen durchzuführen. Bevor der Benutzer zum nächsten Befehl übergeht, hat er die Möglichkeit, einen Screenshot des Geräts für die PoC-Dokumentation zu machen.
java -jar AndroTickler.jar -pkg <package> -t [-all | -exp] [target] [-log]
target wie beim List-Befehl erklärt, kann sein:
Wenn kein Wert angegeben ist, dann ist das Ziel alles oben Genannte.
[-comp] <component_name> Gibt nur eine Komponente an. Sie können auch <component_name> direkt ohne -comp-Flag verwenden. -exp AndroTickler verwendet normale Berechtigungen, um nur die exportierten Ziele auszulösen. -all Die Standardoption. AndroTickler verwendet Root-Rechte, um die exportierten Ziele auszulösen. -log Erfasst alle während der Auslösungssitzung erzeugten Logcat-Nachrichten. Die Logdatei wird im Unterverzeichnis logs gespeichert.
Frida sollte auf Ihrem Host-Rechner installiert sein. Außerdem sollte der Speicherort des Frida-Servers auf dem Android-Gerät in der Datei Tickler.conf im Eintrag Frida_server_path hinzugefügt werden.
java -jar AndroTickler.jar -pkg <package> -frida vals <ClassName> <MethodName> <NumberOfArgs> [-reuse]
Zeigt Argumente und Rückgabewert dieser Methode an (nur primitive Datentypen und String).
reuse Im Fall von vals und set erstellt/aktualisiert Frida ein Frida-Skript für diese Funktionalität. Sie können das erstellte Skript nach Wunsch ändern. Wenn Sie es dann über AndroTickler ausführen möchten, verwenden Sie die Option -reuse, damit es nicht überschrieben wird.
java -jar AndroTickler.jar -pkg <package> -frida set <ClassName> <MethodName> <NumberOfArgs> <NumberOfArgToModify> <newValue>[-reuse]
Setzt das Argument Nummer NumberOfArgToModify auf newValue (nur primitive Datentypen und String). NumberOfArgToModify beginnt mit 0: Erstes Argument --> NumberOfArgToModify = 0, ... usw. Um den Rückgabewert zu ändern --> setzen Sie NumberOfArgToModify auf ret.
java -jar AndroTickler.jar -pkg <package> -frida script <scriptPath>
Führt ein Frida-JS-Skript aus, das sich unter scriptPath auf Ihrem Host befindet.
Geladene Klassen aufzählen:
java -jar AndroTickler.jar -pkg <package> -frida enum
java -jar AndroTickler.jar -pkg <package> -dbg
Erstellt eine debugbare Version der App, die auf dem Gerät installiert und mit jedem externen Tool debuggt werden kann. AndroTickler wird mit einem Keystore ausgeliefert, um die debugbare APK zu signieren, benötigt aber das jarsigner-Tool auf dem Host.
java -jar AndroTickler.jar -pkg <package> -apk <decompiledDirectory>
Erstellt eine APK-Datei aus einem Verzeichnis, signiert sie und installiert sie.
java -jar AndroTickler.jar [-pkg <package>] [-bg|--bgSnapshots]
Kopiert die vom Gerät gemachten Hintergrund-Snapshots (funktioniert mit und ohne -pkg-Option) in das Unterverzeichnis bgSnapshots.
Daten-Speicherverzeichnis kopieren:
java -jar AndroTickler.jar -pkg <package> -dataDir [dest]
Kopiert das Daten-Speicherverzeichnis nach DataDir. dest Optionaler Name des Zielverzeichnisses, das sich auf jeden Fall im Unterverzeichnis transfers befindet.
Beliebige Datei / Verzeichnis kopieren:
java -jar AndroTickler.jar -pkg <package> -cp2host <source_path> [dest]
Kopiert Dateien / Verzeichnisse vom Android-Gerät.
Wenn die dest-Option nicht angegeben wird, erhält das Verzeichnis den Zeitstempel der Transaktion als Namen.
java -jar AndroTickler.jar [-pkg <package>] -screen
Für Optionen, die keine -pkg-Option erfordern, werden ihre Daten unter Tickler_Dir/NoPackage gespeichert.
java -jar AndroTickler.jar -pkg <package> -t -act -exp
Löst exportierte Aktivitäten aus.
java -jar AndroTickler.jar -pkg <package> -t -prov -log
Fragt alle Content-Provider ab und speichert Logcat-Nachrichten, bis das Tool die Ausführung beendet.
java -jar AndroTickler.jar -pkg <package> -t <component_name>
Löst die Komponente aus; die Art der Auslösung hängt vom Typ der Komponente ab.
java -jar AndroTickler.jar -pkg de.not3naf.myApp -frida set de.not3naf.myApp.myActivity myMethod 2 0 "newValue"
Hooked die Methode "myMethod", die 2 Argumente hat, und ändert den Wert des ersten Arguments (args[0]) auf "newValue".
java -jar AndroTickler.jar -pkg de.not3naf.myApp -frida set de.not3naf.myApp.myActivity myMethod 2 2 false
Hooked die Methode "myMethod", die 2 Argumente hat, und ändert den Rückgabewert auf boolean false.