# Tutorial do Frida
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com) * **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
**Dica de bug bounty**: **inscreva-se** no **Intigriti**, uma plataforma premium de **bug bounty criada por hackers, para hackers**! Junte-se a nós em [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoje mesmo e comece a ganhar recompensas de até **$100.000**! {% embed url="https://go.intigriti.com/hacktricks" %} ## Instalação Instale as **ferramentas do frida**: ```bash pip install frida-tools pip install frida ``` **Baixe e instale** no Android o **servidor frida** ([Baixe a versão mais recente](https://github.com/frida/frida/releases)).\ Um comando para reiniciar o adb no modo root, conectar-se a ele, fazer upload do frida-server, dar permissões de execução e executá-lo em segundo plano: {% code overflow="wrap" %} ```bash adb root; adb connect localhost:6000; sleep 1; adb push frida-server /data/local/tmp/; adb shell "chmod 755 /data/local/tmp/frida-server"; adb shell "/data/local/tmp/frida-server &" ``` {% endcode %} **Verifique** se está **funcionando**: ```bash frida-ps -U #List packages and processes frida-ps -U | grep -i #Get all the package name ``` ## Tutoriais ### [Tutorial 1](frida-tutorial-1.md) **De**: [https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1](https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1)\ **APK**: [https://github.com/t0thkr1s/frida-demo/releases](https://github.com/t0thkr1s/frida-demo/releases)\ **Código-fonte**: [https://github.com/t0thkr1s/frida-demo](https://github.com/t0thkr1s/frida-demo) Siga o [link para ler](frida-tutorial-1.md). ### [Tutorial 2](frida-tutorial-2.md) **De**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (Partes 2, 3 e 4)\ **APKs e Código-fonte**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples) Siga o [link para ler](frida-tutorial-2.md). ### [Tutorial 3](owaspuncrackable-1.md) **De**: [https://joshspicer.com/android-frida-1](https://joshspicer.com/android-frida-1)\ **APK**: [https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level\_01/UnCrackable-Level1.apk](https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level\_01/UnCrackable-Level1.apk) Siga o [link para ler](owaspuncrackable-1.md).\ **Você pode encontrar alguns scripts incríveis do Frida aqui:** [**https://codeshare.frida.re/**](https://codeshare.frida.re) ## Exemplos Rápidos Aqui você pode encontrar as funcionalidades mais básicas e interessantes do Frida para criar um script rápido: ### Chamando o Frida a partir da linha de comando ```bash frida-ps -U #Basic frida hooking frida -l disableRoot.js -f owasp.mstg.uncrackable1 #Hooking before starting the app frida -U --no-pause -l disableRoot.js -f owasp.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. ``` ### Script Python Básico ```python import frida # Attach to the target process session = frida.attach("com.example.app") # Define the JavaScript code to be injected js_code = """ Java.perform(function () { // Intercept the target method var targetClass = Java.use("com.example.app.TargetClass"); targetClass.targetMethod.implementation = function () { // Modify the behavior of the method console.log("Method intercepted!"); return this.targetMethod(); }; }); """ # Create the script script = session.create_script(js_code) # Load the script into the target process script.load() # Detach from the target process session.detach() ``` ### Script Python Básico ```python import frida # Anexar ao processo alvo session = frida.attach("com.example.app") # Definir o código JavaScript a ser injetado js_code = """ Java.perform(function () { // Interceptar o método alvo var targetClass = Java.use("com.example.app.TargetClass"); targetClass.targetMethod.implementation = function () { // Modificar o comportamento do método console.log("Método interceptado!"); return this.targetMethod(); }; }); """ # Criar o script script = session.create_script(js_code) # Carregar o script no processo alvo script.load() # Desanexar do processo alvo session.detach() ``` ```python import frida, sys jscode = open(sys.argv[0]).read() process = frida.get_usb_device().attach('infosecadventures.fridademo') script = process.create_script(jscode) print('[ * ] Running Frida Demo application') script.load() sys.stdin.read() ``` ### Hooking de funções sem parâmetros Faça o hook da função `a()` da classe `sg.vantagepoint.a.c` ```javascript Java.perform(function () { ; rootcheck1.a.overload().implementation = function() { rootcheck1.a.overload().implementation = function() { send("sg.vantagepoint.a.c.a()Z Root check 1 HIT! su.exists()"); return false; }; }); ``` # Hook java `exit()` Neste tutorial, vamos aprender como fazer um hook no método `exit()` em um aplicativo Android usando o Frida. ## Introdução O Frida é uma poderosa ferramenta de instrumentação e manipulação de código que permite realizar hooks em aplicativos Android. Com o Frida, podemos interceptar chamadas de métodos e modificar seu comportamento. ## Pré-requisitos Antes de começar, certifique-se de ter o seguinte: - Um dispositivo Android com acesso root ou um emulador Android configurado. - O Frida Server instalado no dispositivo ou no emulador. - O ambiente de desenvolvimento configurado para executar comandos Frida. ## Passo a passo Siga as etapas abaixo para fazer um hook no método `exit()`: 1. Abra o aplicativo Android no qual você deseja fazer o hook. 2. Inicie o servidor Frida no dispositivo ou no emulador. 3. Abra um terminal e execute o seguinte comando para se conectar ao dispositivo ou emulador: ``` frida -U nome_do_pacote ``` Substitua `nome_do_pacote` pelo nome do pacote do aplicativo Android. 4. No prompt do Frida, execute o seguinte comando para listar as classes disponíveis no aplicativo: ```javascript Java.enumerateLoadedClasses({ onMatch: function(className) { console.log(className); }, onComplete: function() { console.log("Done"); } }); ``` Anote o nome da classe que contém o método `exit()`. 5. Agora, vamos fazer o hook no método `exit()`. No prompt do Frida, execute o seguinte comando: ```javascript Java.use('nome_da_classe').exit.implementation = function() { console.log("Hooked exit()"); // Faça as modificações desejadas aqui // ... // Chame o método original this.exit(); } ``` Substitua `nome_da_classe` pelo nome da classe que contém o método `exit()`. 6. Execute o método no aplicativo Android que chama o método `exit()`. Você verá a mensagem "Hooked exit()" no prompt do Frida, indicando que o hook foi bem-sucedido. ## Conclusão Neste tutorial, aprendemos como fazer um hook no método `exit()` em um aplicativo Android usando o Frida. O Frida é uma ferramenta poderosa que nos permite interceptar chamadas de métodos e modificar seu comportamento. Com essa técnica, podemos explorar e modificar o fluxo de execução de um aplicativo Android para fins de teste de segurança ou depuração. ```javascript 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()` To hook the `.onStart()` and `.onCreate()` methods of the MainActivity class in an Android app, we can use the Frida framework. Frida allows us to dynamically inject JavaScript code into the app's runtime and intercept method calls. Here's an example of how to hook these methods using Frida: ```javascript Java.perform(function () { var MainActivity = Java.use('com.example.MainActivity'); MainActivity.onStart.implementation = function () { console.log('Hooked MainActivity.onStart()'); // Your custom code here // Call the original method this.onStart(); }; MainActivity.onCreate.implementation = function () { console.log('Hooked MainActivity.onCreate()'); // Your custom code here // Call the original method this.onCreate(); }; }); ``` In the above code, we first use `Java.use()` to obtain a reference to the MainActivity class. Then, we override the `.onStart()` and `.onCreate()` methods using `.implementation`. Inside the overridden methods, you can add your custom code to be executed when these methods are called. Finally, we call the original methods using `this.onStart()` and `this.onCreate()`. Remember to replace `'com.example.MainActivity'` with the actual package and class name of the MainActivity in the app you are testing. By hooking these methods, you can intercept their execution and perform various actions, such as logging sensitive information, modifying method parameters, or even bypassing certain checks. Happy hacking! ```javascript 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()` Neste tutorial, vamos aprender como fazer hook no método `.onCreate()` de um aplicativo Android usando o Frida. ## Requisitos - Dispositivo Android com acesso root ou emulador Android com Frida Server instalado. - Frida CLI instalado no seu computador. ## Passo a passo 1. Primeiro, certifique-se de que o aplicativo Android alvo esteja instalado no dispositivo ou no emulador. 2. Conecte o dispositivo Android ao seu computador ou inicie o emulador. 3. Abra o terminal e execute o seguinte comando para iniciar o servidor Frida: ``` frida-server ``` 4. No terminal, navegue até o diretório onde o arquivo APK do aplicativo alvo está localizado. 5. Execute o seguinte comando para iniciar o aplicativo alvo com o Frida: ``` frida -U -l script.js --no-pause com.example.app ``` Certifique-se de substituir `script.js` pelo nome do seu script Frida e `com.example.app` pelo nome do pacote do aplicativo alvo. 6. Agora, o Frida está anexado ao processo do aplicativo alvo. Você pode começar a escrever seu script Frida para fazer o hook no método `.onCreate()`. ```javascript Java.perform(function () { var targetClass = Java.use('com.example.app.MainActivity'); targetClass.onCreate.implementation = function () { console.log('Hooked .onCreate()'); // Seu código personalizado aqui this.onCreate(); }; }); ``` Este script substituirá a implementação original do método `.onCreate()` pela sua própria implementação personalizada. Certifique-se de adicionar seu código personalizado dentro da função `implementation`. 7. Salve o script Frida e volte para o terminal. 8. Pressione `Enter` no terminal para executar o script Frida. 9. Agora, quando o aplicativo alvo for iniciado, o método `.onCreate()` será hookado e sua implementação personalizada será executada. Você pode verificar a saída do console no terminal para confirmar que o hook foi bem-sucedido. ## Conclusão Frida é uma ferramenta poderosa para fazer hook em aplicativos Android e modificar seu comportamento. Neste tutorial, aprendemos como fazer o hook no método `.onCreate()` de um aplicativo Android usando o Frida. Agora você pode explorar ainda mais as capacidades do Frida para realizar testes de segurança e análise de aplicativos Android. ```javascript 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); }; ``` ### Hooking de funções com parâmetros e recuperando o valor Hooking de uma função de descriptografia. Imprimir a entrada, chamar a função original para descriptografar a entrada e, por fim, imprimir os dados em texto simples: ```javascript function getString(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 }; ``` ### Hooking de funções e chamando-as com nossa entrada Faça o hook de uma função que recebe uma string e chame-a com outra string (de [aqui](https://11x256.github.io/Frida-hooking-android-part-2/)) ```javascript var string_class = Java.use("java.lang.String"); // get a JS wrapper for java's String class my_class.fun.overload("java.lang.String").implementation = function(x){ //hooking the new function var my_string = string_class.$new("My TeSt String#####"); //creating a new String by using `new` operator console.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; }; ``` ### Obtendo um objeto já criado de uma classe Se você deseja extrair algum atributo de um objeto criado, você pode usar isso. 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: ```javascript Java.choose("com.example.a11x256.frida_test.my_activity" , { onMatch : function(instance){ //This function will be called for every instance found by frida console.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 **recompensa por bugs criada por hackers, para hackers**! Junte-se a nós em [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoje mesmo e comece a ganhar recompensas de até **$100.000**! {% embed url="https://go.intigriti.com/hacktricks" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * Você trabalha em uma **empresa de cibersegurança**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com) * **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).