hacktricks/mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-1.md
2023-06-06 18:56:34 +00:00

7.9 KiB

Tutorial do Frida 1

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Se você está interessado em carreira de hacking e hackear o impossível - estamos contratando! (fluência em polonês escrito e falado é necessária).

{% embed url="https://www.stmcyber.com/careers" %}

De: https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1
APK: https://github.com/t0thkr1s/frida-demo/releases
Código-fonte: https://github.com/t0thkr1s/frida-demo

Python

Frida permite que você insira código JavaScript dentro de funções de um aplicativo em execução. Mas você pode usar python para chamar os hooks e até mesmo interagir com os hooks.

Este é um script python fácil que você pode usar com todos os exemplos propostos neste tutorial:

#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()

Chame o script:

python hooking.py <hookN.js>

É útil saber como usar o Python com o Frida, mas para esses exemplos, você também pode chamar diretamente as ferramentas do Frida usando a linha de comando.

frida -U --no-pause -l hookN.js -f infosecadventures.fridademo

Hook 1 - Bypass de Booleanos

Aqui você pode ver como hookar um método booleano (checkPin) da classe: infosecadventures.fridademo.utils.PinUtil

//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

Hook 2 - Força Bruta de Função

Função Não Estática

Se você deseja chamar uma função não estática de uma classe, você primeiro precisa de uma instância dessa classe. Em seguida, você pode usar essa instância para chamar a função.
Para fazer isso, você pode encontrar uma instância existente e usá-la:

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() { }
 });
});

Neste caso, isso não funciona, pois não há nenhuma instância e a função é estática.

Função Estática

Se a função for estática, você pode simplesmente chamá-la:

//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 - Recuperando argumentos e valor de retorno

Você pode fazer um hook em uma função e fazê-la imprimir o valor dos argumentos passados e o valor do retorno:

//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;
 }
});

Importante

Neste tutorial, você conectou métodos usando o nome do método e .implementation. Mas se houver mais de um método com o mesmo nome, você precisará especificar o método que deseja conectar indicando o tipo dos argumentos.

Você pode ver isso no próximo tutorial.

Se você está interessado em uma carreira de hacking e hackear o inquebrável - estamos contratando! (fluência em polonês escrita e falada é necessária).

{% embed url="https://www.stmcyber.com/careers" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥