Frida Handleiding 1
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Dit is ’n samevatting van die pos: [https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1]
APK: [https://github.com/t0thkr1s/frida-demo/releases]
Bronkode: [https://github.com/t0thkr1s/frida-demo]
Python
Frida laat jou toe om insert JavaScript code binne funksies van ’n lopende toepassing. Maar jy kan python gebruik om die hooks te aanroep en selfs met die hooks te interageer.
Hier is ’n eenvoudige python-skrip wat jy met al die voorgestelde voorbeelde in hierdie handleiding kan gebruik:
#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()
Roep die skrip aan:
python hooking.py <hookN.js>
Dit is nuttig om te weet hoe om python met frida te gebruik, maar vir hierdie voorbeelde kan jy ook Frida direk aanroep met die command line frida tools:
frida -U --no-pause -l hookN.js -f infosecadventures.fridademo
Hook 1 - Boolean Bypass
Hier kan jy sien hoe om ’n boolean metode (checkPin) van die klas: infosecadventures.fridademo.utils.PinUtil te hook.
//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 funcion recibe como parametro un String, no hace falta overload?
Hook 2 - Function Bruteforce
Nie-statiese funksie
Indien jy ’n nie-statiese funksie van ’n klas wil aanroep, het jy eers ’n instansie van daardie klas nodig. Dan kan jy daardie instansie gebruik om die funksie aan te roep.
Om dit te doen, kan jy ’n bestaande instansie vind en dit gebruik:
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 hierdie geval werk dit nie omdat daar geen instansie is en die funksie staties is
Statiese Funksie
As die funksie staties is, kan jy dit net aanroep:
//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 - Retrieving arguments and return value
Jy kan ’n funksie hook en laat dit print die waarde van die passed arguments en die waarde van die 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
}
})
Hooking op onlangse Android-weergawes (14/15/16)
- Vanaf Frida 17.1.x+ is Java hooking op Android 14–16 weer stabiel (ART quick entrypoint offsets were fixed). As
Java.chooseniks teruggee op Android 14+ nie, werk frida-server/gadget en die CLI/Python pakkette op na >=17.1.5. - Apps met vroeë anti-debug kontroles word dikwels beëindig voordat
attach. Gebruik spawn sodat hooks gelaai word voordatonCreate:
frida -U -f infosecadventures.fridademo -l hook1.js --no-pause
- Wanneer verskeie overloads bestaan, kies die teiken uitdruklik:
var Cls = Java.use("com.example.Class")
Cls.doThing.overload('java.lang.String', 'int').implementation = function(s, i) {
return this.doThing(s, i)
}
Meer onopvallende inspuiting met Zygisk Gadget
Sommige toepassings spoor ptrace of frida-server op. Magisk/Zygisk modules kan frida-gadget binne Zygote laai sodat geen proses ptraced is:
- Installeer ’n Zygisk gadget-module (bv.
zygisk-gadget) en herbegin. - Konfigureer die teikenpakket en ’n opsionele vertraging om startup checks te bypass:
adb shell "su -c 'echo infosecadventures.fridademo,5000 > /data/local/tmp/re.zyg.fri/target_packages'"
- Begin die app en koppel aan die gadget-naam:
frida -U -n Gadget -l hook3.js
Omdat die gadget deur Zygote ingespuit word, bly APK-integriteitskontroles onaangeraak en basiese ptrace/Frida string checks gewoonlik misluk.
Belangrik
In hierdie tutorial het jy metodes ge-hook deur die naam van die metode en .implementation te gebruik. Maar as daar meer as een metode met dieselfde naam was, sal jy die metode moet spesifiseer wat jy wil hook deur die tipe van die argumente aan te dui.
You can see that in the next tutorial.
Verwysings
- Frida News (Android 14–16 fixes & Frida 17.x releases)
- zygisk-gadget – Zygisk module that loads frida-gadget
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.


