Frida Tutorial 1

Support HackTricks

Bug bounty tip: iscriviti a Intigriti, una premium bug bounty platform creata da hacker, per hacker! Unisciti a noi su https://go.intigriti.com/hacktricks oggi, e inizia a guadagnare bounty fino a $100,000!

This is a summary of the post: 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 ti consente di inserire codice JavaScript all'interno delle funzioni di un'applicazione in esecuzione. Ma puoi usare python per chiamare i hook e persino per interagire con i hook.

Questo è un semplice script python che puoi usare con tutti gli esempi proposti in questo tutorial:

#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()

Chiama lo script:

python hooking.py <hookN.js>

È utile sapere come usare python con frida, ma per questi esempi puoi anche chiamare direttamente Frida utilizzando gli strumenti da riga di comando frida:

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

Hook 1 - Boolean Bypass

Qui puoi vedere come hook un metodo booleano (checkPin) dalla classe: infosecadventures.fridademo.utils.PinUtil

//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 funzione riceve come parametro un String, non è necessario l'overload?

Hook 2 - Function Bruteforce

Funzione Non Statica

Se vuoi chiamare una funzione non statica di una classe, prima hai bisogno di un'istanza di quella classe. Poi, puoi usare quell'istanza per chiamare la funzione. Per farlo, potresti trovare un'istanza esistente e usarla:

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 questo caso non funziona poiché non c'è alcuna istanza e la funzione è statica

Funzione Statica

Se la funzione è statica, puoi semplicemente chiamarla:

//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 - Recupero degli argomenti e del valore di ritorno

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;
}
});

Importante

In questo tutorial hai agganciato metodi utilizzando il nome del metodo e .implementation. Ma se ci fossero più di un metodo con lo stesso nome, dovrai specificare il metodo che desideri agganciare indicando il tipo degli argomenti.

Puoi vedere questo nel tutorial successivo.

Suggerimento per bug bounty: iscriviti a Intigriti, una premium bug bounty platform creata da hacker, per hacker! Unisciti a noi su https://go.intigriti.com/hacktricks oggi, e inizia a guadagnare ricompense fino a $100,000!

Supporta HackTricks

Last updated