Frida Tutorial 1
Tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Dies ist eine Zusammenfassung des Beitrags: https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1
APK: https://github.com/t0thkr1s/frida-demo/releases
Source Code: https://github.com/t0thkr1s/frida-demo
Python
Frida ermöglicht es dir, insert JavaScript code in Funktionen einer laufenden Anwendung einzufügen. Du kannst aber python verwenden, um die hooks zu aufrufen und sogar mit den hooks zu interagieren.
Das ist ein einfaches python-Skript, das du mit allen in diesem Tutorial vorgeschlagenen Beispielen verwenden kannst:
#hooking.py
import frida, sys
with open(sys.argv[1], 'r') as f:
jscode = f.read()
process = frida.get_usb_device().attach('infosecadventures.fridademo')
script = process.create_script(jscode)
print('[ * ] Running Frida Demo application')
script.load()
sys.stdin.read()
Rufe das Skript auf:
python hooking.py <hookN.js>
Es ist nützlich zu wissen, wie man python mit frida verwendet, aber für diese Beispiele könntest du Frida auch direkt mit den command line frida tools aufrufen:
frida -U --no-pause -l hookN.js -f infosecadventures.fridademo
Hook 1 - Boolean Bypass
Hier kannst du sehen, wie ein hook auf eine boolean Methode (checkPin) der Klasse infosecadventures.fridademo.utils.PinUtil angewendet wird.
//hook1.js
Java.perform(function () {
console.log("[ * ] Starting implementation override...")
var MainActivity = Java.use("infosecadventures.fridademo.utils.PinUtil")
MainActivity.checkPin.implementation = function (pin) {
console.log("[ + ] PIN check successfully bypassed!")
return true
}
})
python hooking.py hook1.js
Mirar: La funcion recibe como parametro un String, no hace falta overload?
Hook 2 - Function Bruteforce
Non-Static Function
Wenn du eine nicht-statische Funktion einer Klasse aufrufen willst, brauchst du zuerst eine Instanz dieser Klasse. Dann kannst du diese Instanz verwenden, um die Funktion aufzurufen.
Dazu könntest du eine vorhandene Instanz finden und sie verwenden:
Java.perform(function () {
console.log("[ * ] Starting PIN Brute-force, please wait...")
Java.choose("infosecadventures.fridademo.utils.PinUtil", {
onMatch: function (instance) {
console.log("[ * ] Instance found in memory: " + instance)
for (var i = 1000; i < 9999; i++) {
if (instance.checkPin(i + "") == true) {
console.log("[ + ] Found correct PIN: " + i)
break
}
}
},
onComplete: function () {},
})
})
In diesem Fall funktioniert das nicht, da keine Instanz vorhanden ist und die Funktion statisch ist.
Statische Funktion
Wenn die Funktion statisch ist, kannst du sie einfach aufrufen:
//hook2.js
Java.perform(function () {
console.log("[ * ] Starting PIN Brute-force, please wait...")
var PinUtil = Java.use("infosecadventures.fridademo.utils.PinUtil")
for (var i = 1000; i < 9999; i++) {
if (PinUtil.checkPin(i + "") == true) {
console.log("[ + ] Found correct PIN: " + i)
}
}
})
Hook 3 - Argumente und Rückgabewert auslesen
Du kannst eine Funktion hooken und sie dazu bringen, den Wert der übergebenen Argumente und den Wert des Rückgabewerts auszugeben:
//hook3.js
Java.perform(function () {
console.log("[ * ] Starting implementation override...")
var EncryptionUtil = Java.use(
"infosecadventures.fridademo.utils.EncryptionUtil"
)
EncryptionUtil.encrypt.implementation = function (key, value) {
console.log("Key: " + key)
console.log("Value: " + value)
var encrypted_ret = this.encrypt(key, value) //Call the original function
console.log("Encrypted value: " + encrypted_ret)
return encrypted_ret
}
})
Hooking on recent Android versions (14/15/16)
- Seit Frida 17.1.x+ ist Java hooking auf Android 14–16 wieder stabil (ART quick entrypoint offsets wurden behoben). Wenn
Java.chooseauf Android 14+ nichts zurückgibt, aktualisiere frida-server/gadget und die CLI/Python-Pakete auf >=17.1.5. - Apps mit frühen anti-debug checks sterben oft schon vor
attach. Verwende spawn, damit Hooks voronCreategeladen werden:
frida -U -f infosecadventures.fridademo -l hook1.js --no-pause
- Wenn mehrere Overloads vorhanden sind, wähle das Ziel explizit aus:
var Cls = Java.use("com.example.Class")
Cls.doThing.overload('java.lang.String', 'int').implementation = function(s, i) {
return this.doThing(s, i)
}
Unauffälligere injection mit Zygisk Gadget
Einige Apps erkennen ptrace oder frida-server. Magisk/Zygisk-Module können frida-gadget in Zygote laden, sodass kein Prozess ptraced wird:
- Installiere ein Zygisk-Gadget-Modul (z. B.
zygisk-gadget) und starte das Gerät neu. - Konfiguriere das Zielpaket und eine optionale Verzögerung, um Startprüfungen zu umgehen:
adb shell "su -c 'echo infosecadventures.fridademo,5000 > /data/local/tmp/re.zyg.fri/target_packages'"
- Starte die App und verbinde dich mit dem gadget-Namen:
frida -U -n Gadget -l hook3.js
Weil das Gadget von Zygote injiziert wird, bleiben APK-Integritätsprüfungen unberührt und grundlegende ptrace/Frida-String-Checks schlagen normalerweise fehl.
Wichtig
In diesem Tutorial haben Sie hooked methods unter Verwendung des Methodennamens und .implementation. Aber wenn es mehr als eine Methode mit demselben Namen gibt, müssen Sie die Methode angeben, die Sie hooken möchten, und dabei den Typ der Argumente angeben.
Siehe das nächste Tutorial.
Referenzen
- Frida News (Android 14–16 fixes & Frida 17.x releases)
- zygisk-gadget – Zygisk module that loads frida-gadget
Tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.


