Frida Tutorial 1
Reading time: 4 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Це резюме посту: https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1
APK: https://github.com/t0thkr1s/frida-demo/releases
Джерельний код: 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 - Отримання аргументів та значення повернення
Ви можете підключити функцію та змусити її друкувати значення переданих аргументів та значення значення повернення:
//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. Але якщо є більше ніж один метод з тією ж назвою, вам потрібно буде вказати метод, який ви хочете підключити, вказуючи тип аргументів.
Ви можете побачити це в наступному посібнику.
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.