5.0 KiB
Frida Tutorial 1
{{#include ../../../banners/hacktricks-training.md}}

Tip dotyczący bug bounty: zarejestruj się w Intigriti, premium platformie bug bounty stworzonej przez hackerów, dla hackerów! Dołącz do nas na https://go.intigriti.com/hacktricks już dziś i zacznij zarabiać nagrody do 100 000 $!
{% embed url="https://go.intigriti.com/hacktricks" %}
To jest podsumowanie posta: https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1
APK: https://github.com/t0thkr1s/frida-demo/releases
Kod źródłowy: https://github.com/t0thkr1s/frida-demo
Python
Frida pozwala na wstawienie kodu JavaScript wewnątrz funkcji działającej aplikacji. Możesz jednak użyć python do wywoływania hooków, a nawet do interakcji z hookami.
To jest prosty skrypt w pythonie, który możesz użyć we wszystkich proponowanych przykładach w tym tutorialu:
#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()
Wywołaj skrypt:
python hooking.py <hookN.js>
Przydatne jest, aby wiedzieć, jak używać Pythona z Frida, ale w tych przykładach możesz również bezpośrednio wywołać Frida, używając narzędzi wiersza poleceń frida:
frida -U --no-pause -l hookN.js -f infosecadventures.fridademo
Hook 1 - Boolean Bypass
Tutaj możesz zobaczyć, jak hookować metodę boolean (checkPin) z klasy: 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
Patrz: Funkcja przyjmuje jako parametr String, czy nie trzeba przeciążać?
Hook 2 - Bruteforce funkcji
Funkcja niena statyczna
Jeśli chcesz wywołać niena statyczną funkcję klasy, najpierw potrzebujesz instancji tej klasy. Następnie możesz użyć tej instancji, aby wywołać funkcję.
Aby to zrobić, możesz znaleźć istniejącą instancję i użyć jej:
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 () {},
})
})
W tym przypadku to nie działa, ponieważ nie ma żadnej instancji, a funkcja jest statyczna.
Funkcja statyczna
Jeśli funkcja jest statyczna, możesz po prostu ją wywołać:
//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 - Pobieranie argumentów i wartości zwracanej
Możesz podpiąć funkcję i sprawić, aby drukowała wartość przekazanych argumentów oraz wartość wartości zwracanej:
//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
}
})
Ważne
W tym samouczku podłączyłeś metody używając nazwy metody i .implementation. Ale jeśli było więcej niż jedna metoda o tej samej nazwie, będziesz musiał określić metodę, którą chcesz podłączyć, wskazując typ argumentów.
Możesz to zobaczyć w następnym samouczku.

Wskazówka dotycząca bug bounty: zarejestruj się w Intigriti, premium platformie bug bounty stworzonej przez hakerów, dla hakerów! Dołącz do nas na https://go.intigriti.com/hacktricks już dziś i zacznij zarabiać nagrody do 100 000 $!
{% embed url="https://go.intigriti.com/hacktricks" %}
{{#include ../../../banners/hacktricks-training.md}}