Frida Tutorial 1
Reading time: 4 minutes
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)
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
Quellcode: https://github.com/t0thkr1s/frida-demo
Python
Frida ermöglicht es Ihnen, JavaScript-Code in Funktionen einer laufenden Anwendung einzufügen. Aber Sie können Python verwenden, um die Hooks zu rufen und sogar mit den Hooks zu interagieren.
Dies ist ein einfaches Python-Skript, das Sie mit allen vorgeschlagenen Beispielen in diesem Tutorial verwenden können:
#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()
Rufen Sie 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önnten Sie Frida auch direkt über die Befehlszeile mit den Frida-Tools aufrufen:
frida -U --no-pause -l hookN.js -f infosecadventures.fridademo
Hook 1 - Boolean Bypass
Hier sehen Sie, wie Sie eine hook-Methode vom Typ boolean (checkPin) aus der Klasse: infosecadventures.fridademo.utils.PinUtil hooken können.
//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: Die Funktion erhält als Parameter einen String, ist eine Überladung nicht erforderlich?
Hook 2 - Funktion Bruteforce
Nicht-statische Funktion
Wenn Sie eine nicht-statische Funktion einer Klasse aufrufen möchten, benötigen Sie zuerst eine Instanz dieser Klasse. Dann können Sie diese Instanz verwenden, um die Funktion aufzurufen.
Um dies zu tun, könnten Sie 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 dies nicht, da es keine Instanz gibt und die Funktion statisch ist.
Statische Funktion
Wenn die Funktion statisch ist, können Sie 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 - Abrufen von Argumenten und Rückgabewert
Sie könnten eine Funktion hooken und sie ausgeben lassen, den Wert der übergebenen Argumente und den Wert des Rückgabewerts:
//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
}
})
Wichtig
In diesem Tutorial haben Sie Methoden mit dem Namen der Methode und .implementation gehookt. Aber wenn es mehr als eine Methode mit dem gleichen Namen gibt, müssen Sie die Methode angeben, die Sie hooken möchten, indem Sie den Typ der Argumente angeben.
Sie können das im nächsten Tutorial sehen.
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)
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.