Frida Tutorial 1

Support HackTricks

Bug-Bounty-Tipp: Melde dich an bei Intigriti, einer Premium-Bug-Bounty-Plattform, die von Hackern für Hacker erstellt wurde! Schließe dich uns heute an unter https://go.intigriti.com/hacktricks und beginne, Prämien von bis zu $100.000 zu verdienen!

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 dir, JavaScript-Code in Funktionen einer laufenden Anwendung einzufügen. Aber du kannst Python verwenden, um die Hooks zu rufen und sogar mit den Hooks zu interagieren.

Dies ist ein einfaches Python-Skript, das du mit allen vorgeschlagenen Beispielen in diesem Tutorial 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()

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önntest du auch direkt Frida mit den Befehlszeilen-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 notwendig?

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

You could hook a function and make it print the value of the passed arguments and the value of the return value:

//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 hast du Methoden mit dem Namen der Methode und .implementation gehookt. Aber wenn es mehr als eine Methode mit dem gleichen Namen gibt, musst du die Methode angeben, die du hooken möchtest, indem du den Typ der Argumente angibst.

Das kannst du in dem nächsten Tutorial sehen.

Bug-Bounty-Tipp: Melde dich an bei Intigriti, einer premium Bug-Bounty-Plattform, die von Hackern für Hacker erstellt wurde! Schließe dich uns an unter https://go.intigriti.com/hacktricks heute und beginne, Prämien von bis zu $100.000 zu verdienen!

Support HackTricks

Last updated