Compartilhe seus truques de hacking enviando PRs para osHackTricks e HackTricks Cloud repositórios do github.
Dica de recompensa por bugs: inscreva-se no Intigriti, uma plataforma de bug bounty premium criada por hackers, para hackers! Junte-se a nós em https://go.intigriti.com/hacktricks hoje e comece a ganhar recompensas de até $100,000!
Instalação
Instale as ferramentas do frida:
pipinstallfrida-toolspipinstallfrida
Baixe e instale no Android o servidor frida (Baixe a última versão).
Um comando para reiniciar o adb em modo root, conectar a ele, fazer upload do frida-server, dar permissões de execução e executá-lo em segundo plano:
frida-ps-U#Basic frida hookingfrida-ldisableRoot.js-fowasp.mstg.uncrackable1#Hooking before starting the appfrida-U--no-pause-ldisableRoot.js-fowasp.mstg.uncrackable1#The --no-pause and -f options allow the app to be spawned automatically,#frozen so that the instrumentation can occur, and the automatically#continue execution with our modified code.
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 :)");};
Hook MainActivity .onStart() & .onCreate()
Para interceptar os métodos .onStart() e .onCreate() da MainActivity, você pode usar o seguinte script Frida:
Java.perform(function() {var MainActivity =Java.use('com.example.MainActivity');MainActivity.onStart.implementation=function() {console.log('onStart() foi chamado');this.onStart(); };MainActivity.onCreate.implementation=function() {console.log('onCreate() foi chamado');this.onCreate(); };});
var mainactivity =Java.use("sg.vantagepoint.uncrackable1.MainActivity");mainactivity.onStart.overload().implementation=function() {send("MainActivity.onStart() HIT!!!");var ret =this.onStart.overload().call(this);};mainactivity.onCreate.overload("android.os.Bundle").implementation=function(var_0) {send("MainActivity.onCreate() HIT!!!");var ret =this.onCreate.overload("android.os.Bundle").call(this,var_0);};
Hook android .onCreate()
Para interceptar a chamada do método .onCreate() em um aplicativo Android, você pode usar o Frida. Abaixo está um exemplo de script Frida que pode ser usado para realizar esse tipo de intercepção:
Java.perform(function() {var Activity =Java.use('android.app.Activity');Activity.onCreate.implementation=function() {console.log('onCreate() foi chamado');this.onCreate(); };});
var activity =Java.use("android.app.Activity");activity.onCreate.overload("android.os.Bundle").implementation=function(var_0) {send("Activity HIT!!!");var ret =this.onCreate.overload("android.os.Bundle").call(this,var_0);};
Enganchando funções com parâmetros e recuperando o valor
Enganchando uma função de descriptografia. Imprimir a entrada, chamar a função original para descriptografar a entrada e, finalmente, imprimir os dados em texto simples:
functiongetString(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 : "+ ret);var flag ="";for (var i=0; i <ret.length; i++){flag +=String.fromCharCode(ret[i]);}send("Decrypted flag: "+ flag);return ret; //[B};
Enganando funções e chamando-as com nossa entrada
Engane uma função que recebe uma string e a chame com outra string (de aqui)
var string_class =Java.use("java.lang.String"); // get a JS wrapper for java's String classmy_class.fun.overload("java.lang.String").implementation=function(x){ //hooking the new functionvar my_string =string_class.$new("My TeSt String#####"); //creating a new String by using `new` operatorconsole.log("Original arg: "+x );var ret = this.fun(my_string); // calling the original function with the new String, and putting its return value in ret variable
console.log("Return value: "+ret);return ret;};
Obter um objeto de uma classe já criado
Se deseja extrair algum atributo de um objeto criado, pode usar este método.
Neste exemplo, você verá como obter o objeto da classe my_activity e como chamar a função .secret() que imprimirá um atributo privado do objeto:
Java.choose("com.example.a11x256.frida_test.my_activity", {onMatch:function(instance){ //This function will be called for every instance found by fridaconsole.log("Found instance: "+instance);console.log("Result of secret func: "+instance.secret());},onComplete:function(){}});
Dica de recompensa por bugs: inscreva-se no Intigriti, uma plataforma premium de recompensas por bugs criada por hackers, para hackers! Junte-se a nós em https://go.intigriti.com/hacktricks hoje e comece a ganhar recompensas de até $100,000!