Frida Tutorial 1

Support HackTricks

Bug bounty tip: зареєструйтесь на Intigriti, преміум платформі для баг-баунті, створеній хакерами для хакерів! Приєднуйтесь до нас на https://go.intigriti.com/hacktricks сьогодні та почніть заробляти винагороди до $100,000!

Це резюме посту: 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 дозволяє вам вставляти JavaScript код всередину функцій працюючого додатку. Але ви можете використовувати python для виклику хуків і навіть для взаємодії з хуками.

Це простий python скрипт, який ви можете використовувати з усіма запропонованими прикладами в цьому навчальному посібнику:

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

Викличте скрипт:

python hooking.py <hookN.js>

Корисно знати, як використовувати python з frida, але для цих прикладів ви також можете безпосередньо викликати Frida, використовуючи інструменти командного рядка frida:

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

Hook 1 - Boolean Bypass

Тут ви можете побачити, як hook метод boolean (checkPin) з класу: 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

Дивитися: Функція приймає як параметр рядок, чи потрібно перевантаження?

Hook 2 - Функція Брутфорс

Нестатична Функція

Якщо ви хочете викликати нестатичну функцію класу, вам спочатку потрібен екземпляр цього класу. Потім ви можете використовувати цей екземпляр для виклику функції. Для цього ви можете знайти існуючий екземпляр і використовувати його:

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

У цьому випадку це не працює, оскільки немає жодного екземпляра, а функція є статичною

Статична функція

Якщо функція є статичною, ви можете просто викликати її:

//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 - Отримання аргументів та значення повернення

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

Важливо

У цьому навчальному посібнику ви підключили методи, використовуючи назву методу та .implementation. Але якщо є більше одного методу з такою ж назвою, вам потрібно буде вказати метод, який ви хочете підключити, вказуючи тип аргументів.

Ви можете побачити це в наступному навчальному посібнику.

Порада для баг-баунті: зареєструйтесь на Intigriti, преміум платформі для баг-баунті, створеній хакерами для хакерів! Приєднуйтесь до нас на https://go.intigriti.com/hacktricks сьогодні та почніть заробляти винагороди до $100,000!

Підтримайте HackTricks

Last updated