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

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.choose niks 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 voordat onCreate:
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:

  1. Installeer ’n Zygisk gadget-module (bv. zygisk-gadget) en herbegin.
  2. 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'"
  1. 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

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