Alle unten genannten Schritte gelten für macOS Mojave
frida-tools
mit pip3 installieren
Führen Sie die Befehle $ pip --version
und $ pip3 --version
aus, um zu überprüfen, welcher Pip von Python 3x stammt. Beispielsweise sollten Sie Versionsinformationen wie folgt sehen:
$ pip 19.0.3 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)
Führen Sie dann den richtigen pip -Befehl aus, um frida-tools
zu installieren, z. B. pip3
$ pip3 install frida-tools
Erfolgsergebnisse:
....
Successfully built frida-tools frida
Installing collected packages: colorama, frida, six, wcwidth, prompt-toolkit, pygments, frida-tools
Successfully installed colorama-0.4.1 frida-12.4.7 frida-tools-1.3.2 prompt-toolkit-2.0.9 pygments-2.3.1 six-1.12.0 wcwidth-0.1.7
Testen Sie Ihre Installation
Kopieren Sie die cat
-Binärdatei in einen temporären Ordner, z. B. /tmp/cat
und führen Sie dann cat
aus diesem Verzeichnis aus:
$ mkdir ~ /frida
$ cp /bin/cat /frida/cat
$ /frida/cat
Erstellen Sie in einem anderen Terminal eine Datei example.py
mit folgendem Inhalt:
import frida
def on_message ( message , data ):
print ( "[on_message] message:" , message , "data:" , data )
session = frida . attach ( "cat" )
script = session . create_script ( """'use strict';
rpc.exports.enumerateModules = function () {
return Process.enumerateModulesSync();
};
""" )
script . on ( "message" , on_message )
script . load ()
print ([ m [ "name" ] for m in script . exports . enumerate_modules ()])
Führen Sie dann das Skript example.py
mit dem folgenden Befehl aus
$ python3 example.py
Die Ausgabe sollte in etwa wie folgt aussehen (abhängig von Ihrer Plattform und den Bibliotheksversionen):
[ u'cat' , …, u'ld-2.15.so' ]
Android- adb
Befehl
Stellen Sie sicher, adb
Ihr Gerät sehen kann:
$ adb devices -l
Dadurch wird auch sichergestellt, dass der ADB-Daemon auf Ihrem Desktop ausgeführt wird, sodass Frida Ihr Gerät erkennen und mit ihm kommunizieren kann, unabhängig davon, ob Sie es über USB oder WLAN angeschlossen haben.
frida-server
auf Emulator (oder echtem Gerät) installierenDie folgenden Schritte basieren auf dem Android-Emulator Nexus 6P (x86) API 23 unter macOS Majave.
Laden Sie zunächst den neuesten frida-server
für Android von der Frida-Server-Release-Seite herunter. Für den Android x86
Emulator sollten Sie beispielsweise frida-server-12.4.7-android-x86.xz herunterladen und ihn auf Ihrem Emulator ausführen:
$ adb root # might be required
$ adb push frida-server /data/local/tmp/
$ adb shell " chmod 755 /data/local/tmp/frida-server "
$ adb shell " /data/local/tmp/frida-server & "
Wenn im letzten Schritt der folgende Fehler angezeigt wird:
Unable to load SELinux policy from the kernel: Failed to open file “/sys/fs/selinux/policy”: Permission denied
Dann müssen Sie frida-server
mit der Root-Shell ausführen, z
$ adb shell
angler:/ $ su
angler:/ # /data/local/tmp/frida-server &
[1] 12089
angler:/ #
[1] 12089
ist die Prozess-ID von frida-server
.
Jetzt ist es an der Zeit, auf Ihrem Desktop sicherzustellen, dass die Grundlagen funktionieren. Laufen:
frida-ps -U
Dies sollte Ihnen eine Prozessliste im Sinne von Folgendem liefern:
PID Name
----- ---------------------------------------------------
721 ATFWD-daemon
4450 adbd
730 [email protected]
407 [email protected]
408 [email protected]
409 [email protected]
410 [email protected]
406 [email protected]
Um einen Boolean
Wert innerhalb des Java-Quellcodes zu manipulieren, z. B. den Boolean bTamperingSucces = false;
oder einen anderen Code, der Sie interessiert.
apktool
kann von der Apktool-Website abgerufen werden. Befolgen Sie einfach die Schritte auf dieser Seite, um apktool zu installieren.
adb
wird mit dem Android SDK geliefert und kann im Verzeichnis <your-some-path>/Android/sdk/platform-tools/adb
gefunden werden
apksigner
können Sie Ihre APK mit einer Keystore-Datei signieren. Dieses Tool befindet sich im Verzeichnis <ANDROID_HOME>/Android/sdk/build-tools/28.0.3/apksigner
und die Verwendung ist im Befehlszeilen-Apksigner dokumentiert.
Klonen Sie das Beispielprojekt von DecompileApk.
Suchen Sie die bereits kompilierte APK-Datei DecompileApk/app/release/app-release.apk
.
Dekompilieren Sie es mit apktool .
$ cd < your-path > /DecompileApk/app/release/
$ apktool d --no-res -f app-release.apk
Nachfolgend sehen Sie die Ausgaben
I: Using Apktool 2.4.0 on app-release.apk
I: Copying raw resources...
I: Baksmaling classes.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...
Suchen Sie im Smali-Codeverzeichnis nach DecompileApk/app/release/app-release/smali/com/arophix/decompileapk/MainActivity.smali
und finden Sie den folgenden Code
const / 4 p1 , 0x0
Ändern Sie einfach 0x0
(was false
bedeutet) in 0x1
(was true
bedeutet) und speichern Sie die Datei.
Mit apktool die manipulierte APK erstellen.
apktool b app - release
Sie sollten die folgenden Ausgaben sehen
I: Using Apktool 2.4.0
I: Checking whether sources has changed...
I: Smaling smali folder into classes.dex...
I: Checking whether resources has changed...
I: Copying raw resources...
I: Copying libs... (/lib)
I: Building apk file...
I: Copying unknown files/dir...
I: Built apk...
Suchen Sie die neu erstellte APK im dist
-Verzeichnis DecompileApk/app/release/app-release/dist/app-release.apk
Signieren Sie die APK mit apksigner und keystore unter DecompileApk/app/decompileapk.jks
(bitte ändern Sie die Pfade für keystore und apk entsprechend Ihrem Fall).
$ < ANDROID_HOME > /sdk/build-tools/28.0.3/apksigner sign --ks ../decompileapk.jks app-release.apk
Sie sollten die folgenden Ausgaben sehen und das Passwort 123456
eingeben
Keystore password for signer # 1:
Installieren Sie die signierte APK mit dem Befehl adb.
$ adb install < path-to-the-tampered-apk > /app-release.apk
Anstatt "Hello from C++"
auf dem Bildschirm zu sehen, sollte jetzt "Hello, Android reverse engineer!"
angezeigt werden. .
Einbinden des Android-Java-Quellcodes mit Frida.
Suchen Sie das Skript unter „hook_java_methods.py“, führen Sie es mit dem folgenden Befehl aus und klicken Sie dann auf die Schaltfläche Ihrer gestarteten Android-App.
$ python3 hook_java_methods.py
[ * ] Running CTF
[ * ] onClick
[ * ] Called - isPhoneRooted ()
[ * ] onClick
[ * ] Called - isPhoneRooted ()
Wenn Sie einen Fehler wie den folgenden sehen:
$ frida.ServerNotRunningError: unable to connect to remote frida-server: closed
Denken Sie daran, dass Sie frida-server
auf Ihrem Emulator gestartet haben.
In der Zwischenzeit sollten Sie auf dem Bildschirm Ihres Emulators sehen, dass sich die Toastmeldung bei Erfolg in Device not rooted
geändert hat.
Einbinden des Android-C-Quellcodes mit Frida.
APK dekompilieren
Dekompilieren Sie zunächst die APK mit apktool, um die gemeinsam genutzte Bibliothek, also libnative-lib.so
, zu extrahieren.
$ cd DecompileApk/app/release
$ apktool d --no-res app-release.apk
Suchen Sie die Ziel-JNI-Methode
Zweitens verwenden Sie den folgenden Befehl, um die JNI-Funktion zum Einbinden zu finden.
$ nm --demangle --dynamic app-release/lib/x86/libnative-lib.so
Sie sollten die folgenden Ausgaben sehen:
00004d80 T Java_com_arophix_decompileapk_MainActivity_stringFromJNI
000090b0 T std::bad_typeid::what () const
00005cf0 T std::bad_exception::what () const
00005e70 T std::bad_array_length::what () const
00005df0 T std::bad_array_new_length::what () const
00008ff0 T std::bad_cast::what () const
...
Haken Sie die C-Funktion nach Namen ein
Suchen Sie das Skript unter „hooknative-by-function-name.py“, führen Sie es mit dem folgenden Befehl aus und klicken Sie dann auf die Schaltfläche Ihrer gestarteten Android-App.
$ python3 hooknative-by-function-name.py
[ * ] Running Arophix Hook Test ...
Java_com_arophix_decompileapk_MainActivity_stringFromJNI called with:
ret: 0x200019
Wenn Sie einen Fehler wie den folgenden sehen:
$ frida.ServerNotRunningError: unable to connect to remote frida-server: closed
Denken Sie daran, dass Sie frida-server
auf Ihrem Emulator gestartet haben.
In der Zwischenzeit sollten Sie auf dem Bildschirm Ihres Emulators den geänderten Text sehen Frida is hooking this displayed text from Native layer by function name.
wenn Erfolg.
Hook-C-Funktion nach Adresse
Suchen Sie das Skript unter „hooknative-by-function-address.py“, führen Sie es mit dem folgenden Befehl aus und klicken Sie dann auf die Schaltfläche Ihrer gestarteten Android-App.
$ python3 hooknative-by-function-address.py
[ * ] Running Arophix Hook Test ...
[+] membase: 0xb2acd000
[+] addressOfStringFromJni: 0xb2ad1d80
[++] addressOfStringFromJni: 0xb2ad1d80
ret: 0x19
Wenn Sie einen Fehler wie den folgenden sehen:
$ frida.ServerNotRunningError: unable to connect to remote frida-server: closed
Denken Sie daran, dass Sie frida-server
auf Ihrem Emulator gestartet haben.
In der Zwischenzeit sollten Sie auf dem Bildschirm Ihres Emulators sehen, dass der Text so geändert wurde, Frida is hooking this displayed text from Native layer by function address.
wenn Erfolg.