Frida Tutorial 3

Reading time: 6 minutes

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 opsomming van die pos: https://joshspicer.com/android-frida-1
APK: https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk

Oplossing 1

Gebaseer op https://joshspicer.com/android-frida-1

Hook die _exit()_ funksie en dekripteer funksie sodat dit die vlag in die frida-konsol druk wanneer jy verifieer druk:

javascript
Java.perform(function () {
send("Starting hooks OWASP uncrackable1...")

function getString(data) {
var ret = ""
for (var i = 0; i < data.length; i++) {
ret += "#" + data[i].toString()
}
return ret
}

var aes_decrypt = Java.use("sg.vantagepoint.a.a")
aes_decrypt.a.overload("[B", "[B").implementation = function (var_0, var_1) {
send(
"sg.vantagepoint.a.a.a([B[B)[B   doFinal(enc)  // AES/ECB/PKCS7Padding"
)
send("Key       : " + getString(var_0))
send("Encrypted : " + getString(var_1))
var ret = this.a.overload("[B", "[B").call(this, var_0, var_1)
send("Decrypted : " + getString(ret))

var flag = ""
for (var i = 0; i < ret.length; i++) {
flag += String.fromCharCode(ret[i])
}
send("Decrypted flag: " + flag)
return ret //[B
}

var sysexit = Java.use("java.lang.System")
sysexit.exit.overload("int").implementation = function (var_0) {
send("java.lang.System.exit(I)V  // We avoid exiting the application  :)")
}

send("Hooks installed.")
})

Oplossing 2

Gebaseer op https://joshspicer.com/android-frida-1

Haal rootchecks en dekripteer funksie sodat dit die vlag in die frida-konsol druk wanneer jy verifieer druk:

javascript
Java.perform(function () {
send("Starting hooks OWASP uncrackable1...")

function getString(data) {
var ret = ""
for (var i = 0; i < data.length; i++) {
ret += "#" + data[i].toString()
}
return ret
}

var aes_decrypt = Java.use("sg.vantagepoint.a.a")
aes_decrypt.a.overload("[B", "[B").implementation = function (var_0, var_1) {
send(
"sg.vantagepoint.a.a.a([B[B)[B   doFinal(enc)  // AES/ECB/PKCS7Padding"
)
send("Key       : " + getString(var_0))
send("Encrypted : " + getString(var_1))
var ret = this.a.overload("[B", "[B").call(this, var_0, var_1)
send("Decrypted : " + getString(ret))

var flag = ""
for (var i = 0; i < ret.length; i++) {
flag += String.fromCharCode(ret[i])
}
send("Decrypted flag: " + flag)
return ret //[B
}

var rootcheck1 = Java.use("sg.vantagepoint.a.c")
rootcheck1.a.overload().implementation = function () {
send("sg.vantagepoint.a.c.a()Z   Root check 1 HIT!  su.exists()")
return false
}

var rootcheck2 = Java.use("sg.vantagepoint.a.c")
rootcheck2.b.overload().implementation = function () {
send("sg.vantagepoint.a.c.b()Z  Root check 2 HIT!  test-keys")
return false
}

var rootcheck3 = Java.use("sg.vantagepoint.a.c")
rootcheck3.c.overload().implementation = function () {
send("sg.vantagepoint.a.c.c()Z  Root check 3 HIT!  Root packages")
return false
}

var debugcheck = Java.use("sg.vantagepoint.a.b")
debugcheck.a.overload("android.content.Context").implementation = function (
var_0
) {
send("sg.vantagepoint.a.b.a(Landroid/content/Context;)Z  Debug check HIT! ")
return false
}

send("Hooks installed.")
})

Oplossing 3 – frida-trace (Frida ≥ 16)

As jy nie handmatig hooks wil skryf nie, kan jy Frida laat die Java stubs vir jou genereer en dit dan wysig:

bash
# Spawn the application and automatically trace the Java method we care about
aadb shell "am force-stop owasp.mstg.uncrackable1"
frida-trace -U -f owasp.mstg.uncrackable1 \
-j 'sg.vantagepoint.a.a.a("[B","[B")[B' \
-j 'sg.vantagepoint.a.c!*' \
--output ./trace

# The first run will create ./trace/scripts/sg/vantagepoint/a/a/a__B_B_B.js
# Edit that file and add the logic that prints the decrypted flag or
# returns a constant for the root-checks, then:
frida -U -f owasp.mstg.uncrackable1 -l ./trace/_loader.js --no-pause

Met Frida 16+ gebruik die gegenereerde stub reeds die moderne ES6 sjabloon sintaksis en sal saamgekompileer word met die ingeboude QuickJS runtime – jy het nie meer frida-compile nodig nie.


Oplossing 4 – Een-liner met Objection (2024)

As jy Objection >1.12 geïnstalleer het, kan jy die vlag met 'n enkele opdrag dump (Objection verpak Frida intern):

bash
objection -g owasp.mstg.uncrackable1 explore \
--startup-command "android hooking watch class sg.vantagepoint.a.a method a \n  && android hooking set return_value false sg.vantagepoint.a.c * \n  && android hooking invoke sg.vantagepoint.a.a a '[B' '[B'"
  • watch class druk die teks terug wat deur die AES roetine teruggestuur word
  • set return_value false dwing elke root / debugger kontrole om false te rapporteer
  • invoke laat jou toe om die metode direk aan te roep sonder om Verify te druk.

LET WEL: Op Android 14 (API 34) moet jy Objection/Frida in spawn modus (-f) uitvoer omdat attach geblokkeer word deur seccomp-bpf beperkings wat in Oktober 2024 bekendgestel is.


Moderne Android notas (2023 - 2025)

  • libsu 5.x en Zygisk verberg su redelik goed; egter die Java-gebaseerde kontroles in Vlak 1 faal steeds as die lêer /system/bin/su bestaan. Maak seker om denylist in te skakel of haak eenvoudig java.io.File.exists() met Frida.
  • Frida 16.1 het 'n ineenstorting op Android 12/13 reggestel wat veroorsaak is deur Google se Scudo allokator. As jy Abort message: 'missing SHADOW_OFFSET' sien, werk Frida op (of gebruik die voorafgeboude 17.0 nagtelike weergawe).
  • Omdat Play Integrity SafetyNet in 2023 vervang het, roep sommige nuwer toepassings die com.google.android.gms.tasks.Task API aan. Vlak 1 doen NIE, maar dieselfde haakstrategie wat hier getoon word werk – haak com.google.android.gms.safetynet.SafetyNetClient en retourneer 'n vervalste EvaluationType.

Verwysings

  • Frida vrylating aankondiging – "Frida 16.0 (2023-04-02): Android 12/13 betroubaarheid regstellings & spawn API oorsig"
  • Objection 1.12 – "Spawn-slegs modus vir Android 14" (BlackHat USA 2024 praat skyfies)

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