Bir siber güvenlik şirketinde mi çalışıyorsunuz?Şirketinizi HackTricks'te reklamını görmek ister misiniz? ya da PEASS'ın en son sürümüne erişmek veya HackTricks'i PDF olarak indirmek ister misiniz?ABONELİK PLANLARI'na göz atın!
Hata ödülü ipucu: Intigriti'ye kaydolun, hackerlar tarafından oluşturulan bir premium hata ödülü platformu! Bugün bize katılın https://go.intigriti.com/hacktricks ve $100,000'e kadar ödüller kazanmaya başlayın!
Orijinal kodun bazı bölümleri çalışmaz ve burada değiştirilmiştir.
Bölüm 2
Burada, aynı isme sahip 2 fonksiyonu nasıl hook'layacağınızı görebilirsiniz, ancak parametreleri farklıdır.
Ayrıca, kendi parametrelerinizle bir fonksiyonu nasıl çağıracağınızı öğreneceksiniz.
Ve son olarak, bir sınıfın bir örneğini bulup onu bir fonksiyonu çağırmak için nasıl kullanacağınızın bir örneği bulunmaktadır.
//s2.jsconsole.log("Script loaded successfully ");Java.perform(functionx() {console.log("Inside java perform function");var my_class =Java.use("com.example.a11x256.frida_test.my_activity");//Hook "fun" with parameters (int, int)my_class.fun.overload("int","int").implementation=function (x, y) { //hooking the old functionconsole.log("original call: fun("+ x +", "+ y +")");var ret_value =this.fun(2,5);return ret_value;};//Hook "fun" with paramater(String)var string_class =Java.use("java.lang.String");my_class.fun.overload("java.lang.String").implementation=function (x) { //hooking the new functionconsole.log("*")//Create a new String and call the function with your input.var my_string =string_class.$new("My TeSt String#####");console.log("Original arg: "+ x);var ret =this.fun(my_string);console.log("Return value: "+ ret);console.log("*")return ret;};//Find an instance of the class and call "secret" function.Java.choose("com.example.a11x256.frida_test.my_activity", {onMatch:function (instance) {console.log(tring, and the it has"Found instance: "+ instance);console.log("Result of secret func: "+instance.secret());},onComplete:function () { }});});
Python
Yeni bir nesne oluşturmanın doğru yolu, öncelikle java.lang.String sınıfına referans verilmesidir ve ardından bu sınıfın bir String içeriğine sahip $new nesnesi oluşturulur. Ancak, bu durumda, this.fun()'a "hey there!" gibi herhangi bir String geçebilirsiniz.
//loader.pyimport fridaimport timedevice = frida.get_usb_device()pid = device.spawn(["com.example.a11x256.frida_test"])device.resume(pid)time.sleep(1)#Without it Java.perform silently failssession = device.attach(pid)script = session.create_script(open("s2.js").read())script.load()#prevent the python script from terminatingraw_input()
python loader.py
Bölüm 3
Python
Şimdi, Python aracılığıyla bağlanmış uygulamaya komut gönderme ve işlevi çağırma işlemini nasıl yapacağınızı göreceksiniz:
Komut "1" çıkış yapacak, komut "2" sınıfın bir örneğini bulacak ve secret() adlı özel fonksiyonu çağıracak ve komut "3" fonksiyonu secret() kancalandığı için farklı bir dize döndürecek.
Daha sonra "2"yi çağırırsanız gerçek sırrı alırsınız, ancak "3" ve ardından "2"yi çağırırsanız sahte sırrı alırsınız.
JS
console.log("Script loaded successfully ");var instances_array = [];functioncallSecretFun() {Java.perform(function () {if (instances_array.length==0) { // if array is emptyJava.choose("com.example.a11x256.frida_test.my_activity", {onMatch:function (instance) {console.log("Found instance: "+ instance);instances_array.push(instance)console.log("Result of secret func: "+instance.secret());},onComplete:function () { }});}else {//else if the array has some valuesconsole.log("Result of secret func: "+ instances_array[0].secret());}});}functionhookSecret() {Java.perform(function () {var my_class =Java.use("com.example.a11x256.frida_test.my_activity");var string_class =Java.use("java.lang.String");my_class.secret.overload().implementation=function(){var my_string =string_class.$new("TE ENGANNNNEEE");return my_string;}});}rpc.exports = {callsecretfunction: callSecretFun,hooksecretfunction: hookSecret};
Bölüm 4
Burada, Python ve JS arasındaki etkileşimi JSON nesnelerini kullanarak nasıl yapılacağını göreceksiniz. JS, verileri Python istemcisine göndermek için send() işlevini kullanır ve Python, verileri JS betiğine göndermek için post() işlevlerini kullanır. JS, Python'dan bir yanıt alana kadar yürütme işlemini engelleyecektir.
console.log("Script loaded successfully ");Java.perform(function () {var tv_class =Java.use("android.widget.TextView");tv_class.setText.overload('java.lang.CharSequence').implementation=function (x) {var string_to_send =x.toString();var string_to_recv ="";send(string_to_send); // send data to python coderecv(function (received_json_object) {string_to_recv =received_json_object.my_data;}).wait(); //block execution till the message is receivedconsole.log("Final string_to_recv: "+ string_to_recv)returnthis.setText(string_to_recv);}});
Hata ödülü ipucu: Intigriti'ye kaydolun, hackerlar tarafından oluşturulan bir premium hata ödülü platformu! Bugün bize katılın https://go.intigriti.com/hacktricks ve 100.000 $'a kadar ödüller kazanmaya başlayın!
Bir siber güvenlik şirketinde mi çalışıyorsunuz?Şirketinizi HackTricks'te reklamını görmek ister misiniz? veya PEASS'ın en son sürümüne erişmek veya HackTricks'i PDF olarak indirmek ister misiniz?ABONELİK PLANLARI'na göz atın!