Frida Tutorial 1

Erfahren Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Bug-Bounty-Tipp: Melden Sie sich an für Intigriti, eine Premium-Bug-Bounty-Plattform, die von Hackern für Hacker erstellt wurde! Treten Sie uns bei https://go.intigriti.com/hacktricks heute bei und beginnen Sie, 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 Ihnen, JavaScript-Code in Funktionen einer laufenden Anwendung einzufügen. Aber Sie können Python verwenden, um die Hooks zu aufrufen 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()

Benennen Sie das Skript:

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 auch direkt Frida über die Befehlszeile mit Frida-Tools aufrufen:

frida -U --no-pause -l hookN.js -f infosecadventures.fridademo

Hook 1 - Boolean Bypass

Hier sehen Sie, wie Sie eine 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

Schau mal: Die Funktion erhält einen String als Parameter, ist kein Überladen erforderlich?

Hook 2 - Funktion Bruteforce

Nicht-statische Funktion

Wenn Sie eine nicht-statische Funktion einer Klasse aufrufen möchten, benötigen Sie zunächst eine Instanz dieser Klasse. Anschließend 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 keine Instanz vorhanden ist 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 hacken 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;
}
});

Wichtig

In diesem Tutorial haben Sie Methoden mit dem Namen der Methode und .implementation gehooked. Wenn es jedoch mehr als eine Methode mit demselben Namen gibt, müssen Sie die Methode spezifizieren, die Sie hooken möchten, indem Sie den Typ der Argumente angeben.

Sie können das in dem nächsten Tutorial sehen.

Bug-Bounty-Tipp: Registrieren Sie sich bei Intigriti, einer Premium-Bug-Bounty-Plattform, die von Hackern für Hacker erstellt wurde! Treten Sie uns noch heute bei https://go.intigriti.com/hacktricks bei und beginnen Sie, Prämien von bis zu 100.000 $ zu verdienen!

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated