Frida Tutorial 1
Reading time: 3 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)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.
Bu gönderinin özeti: https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1
APK: https://github.com/t0thkr1s/frida-demo/releases
Kaynak Kodu: https://github.com/t0thkr1s/frida-demo
Python
Frida, bir uygulamanın çalışan fonksiyonları içine JavaScript kodu eklemenizi sağlar. Ancak hook'ları çağırmak ve hatta hook'larla etkileşimde bulunmak için python kullanabilirsiniz.
Bu, bu öğreticideki tüm önerilen örneklerle kullanabileceğiniz kolay bir python betiğidir:
#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()
Scripti çağırın:
python hooking.py <hookN.js>
Python'ı Frida ile nasıl kullanacağınızı bilmek faydalıdır, ancak bu örnekler için Frida'yı doğrudan komut satırı frida araçlarını kullanarak da çağırabilirsiniz:
frida -U --no-pause -l hookN.js -f infosecadventures.fridademo
Hook 1 - Boolean Bypass
Burada hook yaparak bir boolean metodunu (checkPin) infosecadventures.fridademo.utils.PinUtil sınıfından nasıl alacağı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
Bak: Fonksiyon bir String parametre alıyor, overload yapmaya gerek var mı?
Hook 2 - Fonksiyon Bruteforce
Statik Olmayan Fonksiyon
Eğer bir sınıfın statik olmayan fonksiyonunu çağırmak istiyorsanız, öncelikle o sınıfın bir örneğine ihtiyacınız var. Sonra, o örneği kullanarak fonksiyonu çağırabilirsiniz.
Bunu yapmak için, mevcut bir örneği bulabilir ve 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, herhangi bir örnek olmadığı için bu çalışmıyor ve fonksiyon Statik.
Statik Fonksiyon
Eğer fonksiyon statikse, onu 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 - Argümanları ve dönüş değerini alma
Bir fonksiyonu hooklayabilir ve geçirilen argümanların değerini ve dönüş değerinin değerini 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
}
})
Önemli
Bu eğitimde, yöntemlerin adını ve .implementation kullanarak bağladınız. Ancak eğer aynı ada sahip birden fazla yöntem varsa, bağlamak istediğiniz yöntemi belirtmeniz gerekecek argümanların türünü belirterek.
Bunu bir sonraki eğitimde görebilirsiniz.