Czy pracujesz w firmie zajmującej się cyberbezpieczeństwem? Chcesz zobaczyć, jak Twoja firma jest reklamowana na HackTricks? lub chcesz mieć dostęp do najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF? Sprawdź PLANY SUBSKRYPCYJNE!
Wskazówka dotycząca nagród za błędy: zarejestruj się na platformie Intigriti, premium platformie do nagród za błędy stworzonej przez hakerów, dla hakerów! Dołącz do nas na https://go.intigriti.com/hacktricks już dziś i zacznij zarabiać nagrody aż do 100 000 dolarów!
Niektóre części oryginalnego kodu nie działają i zostały zmodyfikowane tutaj.
Część 2
Tutaj znajdziesz przykład, jak hakować 2 funkcje o tej samej nazwie, ale z różnymi parametrami.
Ponadto dowiesz się, jak wywołać funkcję z własnymi parametrami.
I wreszcie, jest przykład, jak znaleźć instancję klasy i sprawić, aby wywołała funkcję.
//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 () { }});});
Możesz zauważyć, że aby utworzyć ciąg znaków, najpierw odwołano się do klasy java.lang.String, a następnie utworzono obiekt $new tej klasy z ciągiem znaków jako zawartością. To jest poprawny sposób tworzenia nowego obiektu klasy. Jednak w tym przypadku można było po prostu przekazać do this.fun() dowolny ciąg znaków, na przykład: this.fun("hej tam!")
Python
//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
Część 3
Python
Teraz zobaczysz, jak wysyłać polecenia do podłączonej aplikacji za pomocą Pythona, aby wywołać funkcję:
Komenda "1" zakończy działanie, komenda "2" znajdzie i wywoła instancję klasy oraz wywoła funkcję prywatną secret(), a komenda "3" podczepi funkcję **secret() tak, aby zwracała inne znaczenie.
Następnie, jeśli wywołasz "2", otrzymasz prawdziwy sekret, ale jeśli wywołasz "3" a następnie "2", otrzymasz fałszywy sekret.
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};
Część 4
Tutaj zobaczysz, jak sprawić, aby Python i JS współdziałały za pomocą obiektów JSON. JS używa funkcji send() do wysyłania danych do klienta Pythona, a Python używa funkcji post() do wysyłania danych do skryptu JS. JS zablokuje wykonanie do momentu otrzymania odpowiedzi od Pythona.
Wskazówka dotycząca nagrody za błąd: Zarejestruj się na platformie Intigriti, premium platformie do nagród za błędy stworzonej przez hakerów, dla hakerów! Dołącz do nas już dziś na https://go.intigriti.com/hacktricks i zacznij zarabiać nagrody do $100,000!
Czy pracujesz w firmie zajmującej się cyberbezpieczeństwem? Chcesz zobaczyć, jak Twoja firma jest reklamowana w HackTricks? lub chcesz mieć dostęp do najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF? Sprawdź PLANY SUBSKRYPCYJNE!