Frida Eğitimi 1
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://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1
APK: https://github.com/t0thkr1s/frida-demo/releases
Kaynak Kod: https://github.com/t0thkr1s/frida-demo
Python
Frida, çalışan bir uygulamanın fonksiyonlarının içine insert JavaScript code yerleştirmenize olanak tanır. Ancak python’u hooks’ları call etmek ve hatta hooks ile interact etmek için kullanabilirsiniz.
Bu tutorial’de önerilen tüm örneklerle kullanabileceğiniz basit bir python scripti:
#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()
Script’i çağır:
python hooking.py <hookN.js>
python ile frida kullanmayı bilmek faydalıdır, ancak bu örneklerde komut satırından doğrudan frida araçlarını çağırabilirsiniz:
frida -U --no-pause -l hookN.js -f infosecadventures.fridademo
Hook 1 - Boolean Bypass
Burada infosecadventures.fridademo.utils.PinUtil sınıfından boolean bir metodu (checkPin) nasıl hooklayacağınızı görebilirsiniz.
//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
Statik Olmayan Fonksiyon
Bir sınıfın statik olmayan fonksiyonunu çağırmak istiyorsanız, önce o sınıfın bir örneğine ihtiyacınız vardır. Ardından, bu örneği fonksiyonu çağırmak için kullanabilirsiniz.
Bunu yapmak için, varolan bir örneği bulup kullanabilirsiniz:
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 () {},
})
})
Bu durumda bu çalışmıyor çünkü herhangi bir instance yok ve function Static
Static Function
Eğer function static ise, doğrudan çağırabilirsiniz:
//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
Bir fonksiyonu hook’layabilir ve print ile passed arguments ve return value değerlerini yazdırmasını sağlayabilirsiniz:
//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
}
})
Güncel Android sürümlerinde Hooking (14/15/16)
- Frida 17.1.x+ ile Android 14–16’da Java hooking tekrar stabil oldu (ART quick entrypoint offset’ları düzeltildi). Eğer
Java.chooseAndroid 14+’da hiçbir şey döndürmüyorsa, frida-server/gadget ve CLI/Python paketlerini >=17.1.5’e yükseltin. - Erken anti-debug kontrolleri olan uygulamalar genellikle
attach’tan önce kapanır. Hooks’ınonCreate’den önce yüklenmesi için spawn kullanın:
frida -U -f infosecadventures.fridademo -l hook1.js --no-pause
- Birden fazla overload (aşırı yükleme) varsa, hedefi açıkça seçin:
var Cls = Java.use("com.example.Class")
Cls.doThing.overload('java.lang.String', 'int').implementation = function(s, i) {
return this.doThing(s, i)
}
Zygisk Gadget ile daha gizli enjeksiyon
Bazı uygulamalar ptrace veya frida-server’ı algılar. Magisk/Zygisk modülleri Zygote içinde frida-gadget yükleyebilir, böylece hiçbir süreç ptrace edilmez:
- Bir Zygisk gadget modülü (ör.
zygisk-gadget) yükleyin ve cihazı yeniden başlatın. - Hedef paketi ve başlatma kontrollerini atlamak için isteğe bağlı bir gecikmeyi yapılandırın:
adb shell "su -c 'echo infosecadventures.fridademo,5000 > /data/local/tmp/re.zyg.fri/target_packages'"
- Uygulamayı başlatın ve gadget name’e bağlanın:
frida -U -n Gadget -l hook3.js
Because the gadget is injected by Zygote, APK integrity checks stay untouched and basic ptrace/Frida string checks usually fail.
Önemli
Bu tutorial’da methodları method adını ve .implementation kullanarak hooked yaptınız. Ancak aynı ada sahip birden fazla method varsa, hooklamak istediğiniz method’u argüman tiplerini belirterek açıkça belirtmeniz gerekir.
You can see that in the next tutorial.
Referanslar
- Frida News (Android 14–16 fixes & Frida 17.x releases)
- zygisk-gadget – Zygisk module that loads frida-gadget
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.


