hacktricks/mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-1.md

7.9 KiB

Tutorial de Frida 1

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

Si estás interesado en una carrera en hacking y hackear lo inhackeable - ¡estamos contratando! (se requiere polaco fluido escrito y hablado).

{% 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 Fuente: https://github.com/t0thkr1s/frida-demo

Python

Frida te permite insertar código JavaScript dentro de funciones de una aplicación en ejecución. Pero puedes usar python para llamar a los hooks y hasta para interactuar con los hooks.

Este es un script de python fácil de usar que puedes utilizar con todos los ejemplos propuestos en este 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()

Llama al script:

python hooking.py <hookN.js>

Es útil saber cómo usar python con frida, pero para estos ejemplos también podrías llamar directamente a Frida usando herramientas de línea de comandos de frida:

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

Gancho 1 - Omisión de Booleano

Aquí puedes ver cómo enganchar un método booleano (checkPin) de la clase: 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

Mirar: La función recibe como parámetro un String, ¿no hace falta overload?

Hook 2 - Function Bruteforce

Función No Estática

Si quieres llamar a una función no estática de una clase, primero necesitas una instancia de esa clase. Luego, puedes usar esa instancia para llamar a la función.
Para hacerlo, podrías encontrar una instancia existente y usarla:

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

En este caso no funciona porque no hay ninguna instancia y la función es estática

Función Estática

Si la función es estática, podrías llamarla simplemente:

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

Gancho 3 - Recuperación de argumentos y valor de retorno

Podrías enganchar una función y hacer que imprima el valor de los argumentos pasados y el valor del valor de 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

En este tutorial has enganchado métodos utilizando el nombre del método y .implementation. Pero si hubiera más de un método con el mismo nombre, necesitarás especificar el método que quieres enganchar indicando el tipo de los argumentos.

Puedes ver eso en el siguiente tutorial.

Si estás interesado en una carrera en hacking y hackear lo inhackeable - ¡estamos contratando! (se requiere polaco fluido escrito y hablado).

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

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