Toutes les étapes mentionnées ci-dessous sont sur macOS Mojave
Installer frida-tools
avec pip3
Exécutez la commande $ pip --version
et $ pip3 --version
pour vérifier de quel pip provient Python 3x . Par exemple, vous devriez voir les informations de version comme ci-dessous :
$ pip 19.0.3 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)
Ensuite, exécutez la bonne commande pip pour installer frida-tools
, par exemple pip3
$ pip3 install frida-tools
Résultats de réussite :
....
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
Tester votre installation
Copiez le binaire cat
dans un dossier temporaire, par exemple /tmp/cat
puis exécutez cat
depuis ce répertoire :
$ mkdir ~ /frida
$ cp /bin/cat /frida/cat
$ /frida/cat
Dans un autre terminal, créez un fichier example.py
avec le contenu suivant :
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 ()])
Exécutez ensuite le script example.py
avec la commande ci-dessous
$ python3 example.py
Le résultat devrait ressembler à ceci (en fonction de votre plate-forme et des versions de votre bibliothèque) :
[ u'cat' , …, u'ld-2.15.so' ]
Commande adb
Android
Assurez-vous adb
peut voir votre appareil :
$ adb devices -l
Cela garantira également que le démon adb s'exécute sur votre bureau, ce qui permettra à Frida de découvrir et de communiquer avec votre appareil, que vous l'ayez connecté via USB ou WiFi.
frida-server
sur l'émulateur (ou un appareil réel)Les étapes ci-dessous sont basées sur l'API 23 de l'émulateur Android Nexus 6P (x86) sur macOS Majave.
Tout d'abord, téléchargez la dernière version frida-server
pour Android à partir de la page des versions de frida-server, par exemple pour l'émulateur Android x86
, vous devez télécharger frida-server-12.4.7-android-x86.xz et l'exécuter sur votre émulateur :
$ 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 & "
Pour la dernière étape, si vous voyez l'erreur ci-dessous :
Unable to load SELinux policy from the kernel: Failed to open file “/sys/fs/selinux/policy”: Permission denied
Ensuite, vous devez exécuter frida-server
en utilisant le shell racine, par exemple
$ adb shell
angler:/ $ su
angler:/ # /data/local/tmp/frida-server &
[1] 12089
angler:/ #
[1] 12089
est l'identifiant de processus du frida-server
.
Maintenant, sur votre bureau, il est temps de vous assurer que les bases fonctionnent. Courir:
frida-ps -U
Cela devrait vous donner une liste de processus du type :
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]
Pour falsifier une valeur Boolean
dans le code source Java, c'est-à-dire le Boolean bTamperingSucces = false;
, ou un autre code qui vous intéresse.
apktool
peut être récupéré sur le site Web Apktool. Suivez simplement les étapes contenues dans cette page pour installer apktool.
adb
est livré avec le SDK Android, il peut être trouvé dans le répertoire <your-some-path>/Android/sdk/platform-tools/adb
apksigner
consiste à signer votre apk avec un fichier keystore. Cet outil se trouve dans le répertoire <ANDROID_HOME>/Android/sdk/build-tools/28.0.3/apksigner
, et son utilisation est documentée sur la ligne de commande apksigner.
Clonez l'exemple de projet depuis DecompileApk.
Recherchez le fichier apk déjà compilé DecompileApk/app/release/app-release.apk
.
Décompilez-le en utilisant apktool .
$ cd < your-path > /DecompileApk/app/release/
$ apktool d --no-res -f app-release.apk
Vous verrez ci-dessous les sorties
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...
Recherchez DecompileApk/app/release/app-release/smali/com/arophix/decompileapk/MainActivity.smali
dans le répertoire de code smali et trouvez le code ci-dessous
const / 4 p1 , 0x0
Changez simplement 0x0
(ce qui signifie false
) en 0x1
(ce qui signifie true
) et enregistrez le fichier.
Utiliser apktool pour créer l'apk falsifié.
apktool b app - release
Vous devriez voir ci-dessous les sorties
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...
Recherchez l'apk nouvellement construit dans le répertoire dist
DecompileApk/app/release/app-release/dist/app-release.apk
Signez l'apk à l'aide d'apksigner et du keystore situés dans DecompileApk/app/decompileapk.jks
(veuillez modifier les chemins du keystore et de l'apk selon votre propre cas en conséquence),
$ < ANDROID_HOME > /sdk/build-tools/28.0.3/apksigner sign --ks ../decompileapk.jks app-release.apk
Vous devriez voir les sorties ci-dessous et entrer le mot de passe 123456
Keystore password for signer # 1:
Installez l'apk signé à l'aide de la commande adb.
$ adb install < path-to-the-tampered-apk > /app-release.apk
Au lieu de voir "Hello from C++"
sur l'écran, vous devriez maintenant voir "Hello, Android reverse engineer!"
.
Accrochage du code source Android Java à l'aide de Frida.
Recherchez le script sur hook_java_methods.py et exécutez-le à l'aide de la commande ci-dessous, puis cliquez sur le bouton de votre application Android démarrée.
$ python3 hook_java_methods.py
[ * ] Running CTF
[ * ] onClick
[ * ] Called - isPhoneRooted ()
[ * ] onClick
[ * ] Called - isPhoneRooted ()
Si vous voyez une erreur comme ci-dessous :
$ frida.ServerNotRunningError: unable to connect to remote frida-server: closed
N'oubliez pas que vous avez démarré frida-server
sur votre émulateur.
Pendant ce temps, sur l'écran de votre émulateur, vous devriez voir le message toast modifié en Device not rooted
en cas de succès.
Accrocher le code source d'Android C à l'aide de Frida.
Décompiler l'APK
Tout d'abord, décompilez l'apk à l'aide de apktool pour extraire la bibliothèque partagée, c'est-à-dire libnative-lib.so
.
$ cd DecompileApk/app/release
$ apktool d --no-res app-release.apk
Trouver la méthode JNI cible
Deuxièmement, utilisez la commande ci-dessous pour trouver la fonction JNI à accrocher.
$ nm --demangle --dynamic app-release/lib/x86/libnative-lib.so
Vous devriez voir les résultats ci-dessous :
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
...
Fonction Hook C par nom
Recherchez le script sur hooknative-by-function-name.py et exécutez-le à l'aide de la commande ci-dessous, puis cliquez sur le bouton de votre application Android démarrée.
$ python3 hooknative-by-function-name.py
[ * ] Running Arophix Hook Test ...
Java_com_arophix_decompileapk_MainActivity_stringFromJNI called with:
ret: 0x200019
Si vous voyez une erreur comme ci-dessous :
$ frida.ServerNotRunningError: unable to connect to remote frida-server: closed
N'oubliez pas que vous avez démarré frida-server
sur votre émulateur.
Pendant ce temps, sur l'écran de votre émulateur, vous devriez voir le texte modifié en Frida is hooking this displayed text from Native layer by function name.
si succès.
Fonction Hook C par adresse
Recherchez le script sur hooknative-by-function-address.py et exécutez-le à l'aide de la commande ci-dessous, puis cliquez sur le bouton de votre application Android démarrée.
$ python3 hooknative-by-function-address.py
[ * ] Running Arophix Hook Test ...
[+] membase: 0xb2acd000
[+] addressOfStringFromJni: 0xb2ad1d80
[++] addressOfStringFromJni: 0xb2ad1d80
ret: 0x19
Si vous voyez une erreur comme ci-dessous :
$ frida.ServerNotRunningError: unable to connect to remote frida-server: closed
N'oubliez pas que vous avez démarré frida-server
sur votre émulateur.
Pendant ce temps, sur l'écran de votre émulateur, vous devriez voir le texte modifié en Frida is hooking this displayed text from Native layer by function address.
si succès.