Frida Tutorial 3
Reading time: 5 minutes
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Bu yazının özeti: https://joshspicer.com/android-frida-1
APK: https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk
Çözüm 1
https://joshspicer.com/android-frida-1 temel alınarak
_exit()_ fonksiyonunu ve şifre çözme fonksiyonunu yakalayın, böylece doğrula butonuna bastığınızda frida konsolunda bayrağı yazdırır:
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.")
})
Çözüm 2
Based in https://joshspicer.com/android-frida-1
Hook rootchecks ve şifre çözme fonksiyonunu, verify butonuna bastığınızda frida konsolunda flag'i yazdıracak şekilde ayarlayın:
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.")
})
Çözüm 3 – frida-trace
(Frida ≥ 16)
Eğer hook'ları elle yazmak istemiyorsanız, Frida'nın sizin için Java stub'larını oluşturmasına izin verebilir ve ardından bunları düzenleyebilirsiniz:
# 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
Frida 16+ ile oluşturulan stub, modern ES6 şablon sözdizimini zaten kullanır ve yerleşik QuickJS çalışma zamanı ile derlenir – artık frida-compile
'a ihtiyacınız yok.
Çözüm 4 – Objection ile Tek Satırlık (2024)
Eğer Objection >1.12 yüklüyse, bayrağı tek bir komutla dökebilirsiniz (Objection, Frida'yı dahili olarak sarar):
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
AES rutininin döndürdüğü düz metni yazdırırset return_value false
her root / debugger kontrolünün false bildirmesini zorlarinvoke
yöntemi doğrudan Verify butonuna basmadan çağırmanıza olanak tanır.
NOT: Android 14 (API 34) üzerinde Objection/Frida'yı spawn modunda (
-f
) çalıştırmalısınız çünkü attach Ekim 2024'te tanıtılan seccomp-bpf kısıtlamaları tarafından engellenmiştir.
Modern Android notları (2023 - 2025)
- libsu 5.x ve Zygisk su'yu oldukça iyi gizler; ancak Seviye 1'deki Java tabanlı kontroller,
/system/bin/su
dosyası mevcutsa hala başarısız olur. denylist'i etkinleştirdiğinizden emin olun veya basitçejava.io.File.exists()
'i Frida ile hooklayın. - Frida 16.1, Google’ın Scudo allocator'ından kaynaklanan Android 12/13 üzerindeki bir çöküşü düzeltti.
Abort message: 'missing SHADOW_OFFSET'
görüyorsanız, Frida'yı güncelleyin (veya önceden derlenmiş 17.0 gece sürümünü kullanın). - Play Integrity, 2023'te SafetyNet'in yerini aldığından, bazı yeni uygulamalar com.google.android.gms.tasks.Task API'sini çağırır. Seviye 1 bunu yapmaz, ancak burada gösterilen aynı hooklama stratejisi çalışır –
com.google.android.gms.safetynet.SafetyNetClient
'i hooklayın ve sahte bir EvaluationType döndürün.
Referanslar
- Frida sürüm duyurusu – "Frida 16.0 (2023-04-02): Android 12/13 güvenilirlik düzeltmeleri & spawn API revizyonu"
- Objection 1.12 – "Android 14 için yalnızca spawn modu" (BlackHat USA 2024 konuşma slaytları)
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.