Frida Tutorial 1

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Bug bounty tip: regístrate en Intigriti, una plataforma de recompensas por errores premium creada por hackers, para hackers! Únete a nosotros en https://go.intigriti.com/hacktricks hoy, y comienza a ganar recompensas de hasta $100,000!

Este es un resumen de la publicación: 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 e incluso para interactuar con los hooks.

Este es un script de python fácil que puedes usar 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 utilizando las herramientas de línea de comandos frida:

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

Hook 1 - Bypass Boolean

Aquí puedes ver cómo hookear 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 sobrecargar?

Hook 2 - Fuerza Bruta de Función

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, esto no está funcionando ya que no hay ninguna instancia y la función es estática.

Función Estática

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

//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 y valor de retorno

You could hook a function and make it print the value of the passed arguments and the value of the return value:

//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 usando el nombre del método y .implementation. Pero si hay más de un método con el mismo nombre, necesitarás especificar el método que deseas enganchar indicando el tipo de los argumentos.

Puedes ver eso en el siguiente tutorial.

Consejo de bug bounty: regístrate en Intigriti, una plataforma de bug bounty premium creada por hackers, para hackers! Únete a nosotros en https://go.intigriti.com/hacktricks hoy, y comienza a ganar recompensas de hasta $100,000!

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)

Apoya a HackTricks

Last updated