Smali - Decompiling/[Modifying]/Compiling
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Manchmal ist es interessant, den Anwendungscode zu modifizieren, um versteckte Informationen für dich zugänglich zu machen (vielleicht gut obfuskierte Passwörter oder Flags). Dann könnte es interessant sein, die apk zu dekompilieren, den Code zu modifizieren und ihn neu zu kompilieren.
Opcodes reference: http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html
Mit Visual Studio Code und der APKLab Erweiterung kannst du die Anwendung automatisch dekompilieren, modifizieren, neu kompilieren, signieren und installieren, ohne einen Befehl auszuführen.
Ein weiteres Skript, das diese Aufgabe erheblich erleichtert, ist https://github.com/ax/apk.sh
Mit APKTool kannst du auf den smali-Code und Ressourcen zugreifen:
Wenn apktool einen Fehler anzeigt, versuchen Sie, die neueste Version zu installieren.
Einige interessante Dateien, die Sie sich ansehen sollten, sind:
res/values/strings.xml (und alle xmls in res/values/*)
AndroidManifest.xml
Jede Datei mit der Erweiterung .sqlite oder .db
Wenn apktool
Probleme beim Dekodieren der Anwendung hat, schauen Sie sich https://ibotpeaches.github.io/Apktool/documentation/#framework-files an oder versuchen Sie, das Argument -r
zu verwenden (Ressourcen nicht dekodieren). Wenn das Problem in einer Ressource und nicht im Quellcode lag, haben Sie das Problem nicht (Sie dekodieren auch nicht die Ressourcen).
Sie können Anweisungen ändern, den Wert einiger Variablen ändern oder neue Anweisungen hinzufügen. Ich ändere den Smali-Code mit VS Code, installieren Sie dann die smalise-Erweiterung und der Editor wird Ihnen sagen, ob eine Anweisung falsch ist. Einige Beispiele finden Sie hier:
Oder Sie können unten einige Smali-Änderungen erklärt überprüfen.
Nachdem Sie den Code geändert haben, können Sie den Code mit recompilen:
Es wird die neue APK im dist Ordner kompilieren.
Wenn apktool einen Fehler ausgibt, versuche die neueste Version zu installieren.
Dann musst du einen Schlüssel generieren (du wirst nach einem Passwort und einigen Informationen gefragt, die du zufällig ausfüllen kannst):
Schließlich signiere die neue APK:
zipalign ist ein Archiv-Ausrichtungswerkzeug, das wichtige Optimierungen für Android-Anwendungsdateien (APK) bietet. Weitere Informationen hier.
Wenn du bevorzugst, apksigner anstelle von jarsigner zu verwenden, solltest du die apk signieren, nachdem du die Optimierung mit zipalign angewendet hast. ABER BEACHTE, DASS DU DIE ANWENDUNG NUR EINMAL SIGNIEREN MUSST MIT jarsigner (vor zipalign) ODER MIT apksigner (nach zipalign).
Für den folgenden Hello World Java-Code:
Der Smali-Code wäre:
Der Smali-Befehlssatz ist hier verfügbar.
Einige Variablen werden zu Beginn der Funktion mit dem Opcode const definiert. Sie können deren Werte ändern oder neue definieren:
Empfehlungen:
Wenn Sie deklarierte Variablen innerhalb der Funktion verwenden möchten (deklarierte v0,v1,v2...), setzen Sie diese Zeilen zwischen die .local <number> und die Deklarationen der Variablen (const v0, 0x1)
Wenn Sie den Logging-Code in die Mitte des Codes einer Funktion einfügen möchten:
Fügen Sie 2 zur Anzahl der deklarierten Variablen hinzu: z.B. von .locals 10 zu .locals 12
Die neuen Variablen sollten die nächsten Zahlen der bereits deklarierten Variablen sein (in diesem Beispiel sollten es v10 und v11 sein, denken Sie daran, dass es bei v0 beginnt).
Ändern Sie den Code der Logging-Funktion und verwenden Sie v10 und v11 anstelle von v5 und v1.
Denken Sie daran, 3 zur Anzahl der .locals zu Beginn der Funktion hinzuzufügen.
Dieser Code ist vorbereitet, um in die Mitte einer Funktion eingefügt zu werden (ändern Sie die Anzahl der Variablen nach Bedarf). Er wird den Wert von this.o nehmen, ihn in String transformieren und dann einen Toast mit seinem Wert machen.
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)