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

Це резюме посту: 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 скрипт, який ви можете використовувати з усіма запропонованими прикладами в цьому навчальному посібнику:

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

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

bash
python hooking.py <hookN.js>

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

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

Hook 1 - Boolean Bypass

Тут ви можете побачити, як hook метод boolean (checkPin) з класу: infosecadventures.fridademo.utils.PinUtil

javascript
//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 - Брутфорс функції

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

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

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

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

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

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

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

Ви можете підключити функцію та змусити її друкувати значення переданих аргументів та значення значення повернення:

javascript
//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