.. | ||
frida-tutorial-1.md | ||
frida-tutorial-2.md | ||
objection-tutorial.md | ||
owaspuncrackable-1.md | ||
README.md |
Tutorial de Frida
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- ¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿O quieres tener acceso a la última versión de PEASS o descargar HackTricks en PDF? ¡Consulta los PLANES DE SUSCRIPCIÓN!
- Descubre The PEASS Family, nuestra colección exclusiva de NFTs
- Obtén el swag oficial de PEASS y HackTricks
- Únete al 💬 grupo de Discord o al grupo de Telegram o sígueme en Twitter 🐦@carlospolopm.
- Comparte tus trucos de hacking enviando PRs al repositorio de hacktricks y al repositorio de hacktricks-cloud.
Consejo para bug bounty: ¡regístrate en Intigriti, una plataforma premium de bug bounty creada por hackers, para hackers! Únete a nosotros en https://go.intigriti.com/hacktricks hoy mismo y comienza a ganar recompensas de hasta $100,000.
{% embed url="https://go.intigriti.com/hacktricks" %}
Instalación
Instala las herramientas de Frida:
pip install frida-tools
pip install frida
Descarga e instala en el dispositivo Android el servidor de Frida (Descarga la última versión).
Una línea de comando para reiniciar adb en modo root, conectarse a él, cargar frida-server, otorgar permisos de ejecución y ejecutarlo en segundo plano:
{% code overflow="wrap" %}
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 %}
Comprueba si está funcionando:
frida-ps -U #List packages and processes
frida-ps -U | grep -i <part_of_the_package_name> #Get all the package name
Tutoriales
Tutorial 1
Desde: 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
Sigue el enlace para leerlo.
Tutorial 2
Desde: https://11x256.github.io/Frida-hooking-android-part-2/ (Partes 2, 3 y 4)
APKs y código fuente: https://github.com/11x256/frida-android-examples
Sigue el enlace para leerlo.
Tutorial 3
Desde: https://joshspicer.com/android-frida-1
APK: https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk
Sigue el enlace para leerlo.
Puedes encontrar algunos scripts increíbles de Frida aquí: https://codeshare.frida.re/
Ejemplos rápidos
Aquí puedes encontrar las funcionalidades más básicas e interesantes de Frida para crear un script rápido:
Llamando a Frida desde la línea de comandos
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 básico de 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 () {
// Find the target method
var targetMethod = Java.use("com.example.app.TargetClass.targetMethod");
// Hook the target method
targetMethod.implementation = function () {
// Print the arguments passed to the method
console.log("Arguments: " + Array.prototype.slice.call(arguments));
// Call the original method
return this.targetMethod.apply(this, arguments);
};
});
"""
# 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()
Este es un script básico de Python que utiliza la biblioteca Frida para realizar la inyección de código en una aplicación de Android. El script se conecta al proceso de destino, define el código JavaScript a inyectar y crea un script de Frida. Luego, el script se carga en el proceso de destino y finalmente se desconecta del proceso. El código JavaScript inyectado busca un método específico en la clase de destino y lo "engancha" para imprimir los argumentos pasados al método y luego llamar al método original.
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()
Enganchando funciones sin parámetros
Engancha la función a()
de la clase sg.vantagepoint.a.c
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()
Introduction
In this tutorial, we will learn how to hook the exit()
method in a Java application using Frida. By hooking this method, we can intercept the application's exit calls and perform additional actions before the application terminates.
Prerequisites
Before getting started, make sure you have the following:
- A rooted Android device or an emulator
- Frida installed on your machine
- Basic knowledge of JavaScript and Java
Steps
Follow the steps below to hook the exit()
method:
-
Launch the target application on your Android device or emulator.
-
Open a terminal and start the Frida server by running the following command:
frida-server
-
Create a new JavaScript file, for example,
hook.js
, and add the following code:Java.perform(function () { var System = Java.use('java.lang.System'); var Runtime = Java.use('java.lang.Runtime'); // Hook the exit() method System.exit.overload('int').implementation = function (status) { console.log('Exit status:', status); // Perform additional actions here // Call the original exit() method this.exit(status); }; });
-
Save the
hook.js
file. -
In the terminal, navigate to the directory where the
hook.js
file is located. -
Run the following command to start the Frida script:
frida -U -l hook.js -f <package_name>
Replace
<package_name>
with the package name of the target application. -
You should see the output of the
console.log()
statement whenever theexit()
method is called in the target application. -
Customize the code inside the
implementation
function to perform your desired actions before the application exits.
Conclusion
By hooking the exit()
method using Frida, we can intercept and modify the behavior of an application when it tries to exit. This technique can be useful for various purposes, such as analyzing the application's termination process or preventing it from exiting under certain conditions.
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 :)");
};
Tutorial de Frida: Enganchando .onStart()
y .onCreate()
de MainActivity
En este tutorial, aprenderemos cómo utilizar Frida para enganchar los métodos .onStart()
y .onCreate()
de la clase MainActivity en una aplicación de Android. Esto nos permitirá interceptar y modificar el comportamiento de estos métodos en tiempo de ejecución.
Requisitos previos
Antes de comenzar, asegúrate de tener instalado lo siguiente:
- Frida Server en el dispositivo Android objetivo.
- Frida CLI en tu máquina local.
Paso 1: Conectarse al dispositivo
Primero, debemos conectarnos al dispositivo Android objetivo utilizando Frida CLI. Ejecuta el siguiente comando en tu terminal:
frida-ps -U
Esto mostrará una lista de los procesos en ejecución en el dispositivo. Asegúrate de que la aplicación que deseas pentestar esté en la lista.
Paso 2: Crear el script de Frida
A continuación, crearemos un script de Frida para enganchar los métodos .onStart()
y .onCreate()
de la clase MainActivity. Crea un archivo llamado hook.js
y pega el siguiente código:
Java.perform(function() {
var MainActivity = Java.use('com.example.app.MainActivity');
MainActivity.onStart.implementation = function() {
console.log('Método onStart() enganchado');
// Agrega aquí tu código personalizado
this.onStart();
};
MainActivity.onCreate.implementation = function() {
console.log('Método onCreate() enganchado');
// Agrega aquí tu código personalizado
this.onCreate();
};
});
Paso 3: Ejecutar el script de Frida
Ahora, ejecutaremos el script de Frida para enganchar los métodos .onStart()
y .onCreate()
. Ejecuta el siguiente comando en tu terminal:
frida -U -l hook.js -f com.example.app
Esto iniciará la aplicación en el dispositivo y enganchará los métodos especificados. Verás los mensajes de consola indicando que los métodos han sido enganchados con éxito.
Paso 4: Probar el enganche
Finalmente, puedes probar el enganche de los métodos .onStart()
y .onCreate()
en la aplicación. Observa la consola para verificar que los mensajes de los métodos enganchados se impriman correctamente.
¡Felicidades! Ahora sabes cómo utilizar Frida para enganchar los métodos .onStart()
y .onCreate()
de la clase MainActivity en una aplicación de Android. Esto te permitirá interceptar y modificar el comportamiento de estos métodos durante la ejecución de la aplicación.
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()
En este tutorial, aprenderás cómo realizar un hook en el método .onCreate()
de una aplicación Android utilizando Frida.
Requisitos previos
- Dispositivo Android rooteado o emulador con acceso de root.
- Frida Server instalado en el dispositivo objetivo.
- Conocimientos básicos de JavaScript.
Pasos
-
Abre una terminal y ejecuta el siguiente comando para iniciar el servidor Frida en el dispositivo objetivo:
frida-server
-
Asegúrate de que el dispositivo objetivo y tu máquina estén conectados a la misma red.
-
En tu máquina, crea un nuevo archivo JavaScript llamado
hook.js
y ábrelo en un editor de texto. -
Agrega el siguiente código al archivo
hook.js
:Java.perform(function() { var targetClass = Java.use('com.example.app.MainActivity'); targetClass.onCreate.implementation = function() { console.log('Hook exitoso en el método onCreate()'); this.onCreate(); }; });
-
Guarda el archivo
hook.js
. -
Ejecuta el siguiente comando en la terminal para iniciar el script de Frida:
frida -U -l hook.js com.example.app
Asegúrate de reemplazar
com.example.app
con el nombre del paquete de la aplicación que deseas pentestar. -
Abre la aplicación en el dispositivo objetivo y verás que se muestra el mensaje "Hook exitoso en el método onCreate()" en la terminal.
¡Felicidades! Has realizado un hook en el método .onCreate()
de una aplicación Android utilizando Frida. Esto te permitirá interceptar y modificar el comportamiento de la aplicación en este punto específico.
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 funciones con parámetros y recuperando el valor
Enganchando una función de desencriptación. Imprime la entrada, llama a la función original para desencriptar la entrada y finalmente, imprime los datos en texto plano:
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
};
Enganchando funciones y llamándolas con nuestra entrada
Engancha una función que recibe una cadena y llámala con otra cadena (desde aquí)
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;
};
Obteniendo un objeto ya creado de una clase
Si deseas extraer algún atributo de un objeto creado, puedes utilizar esto.
En este ejemplo, verás cómo obtener el objeto de la clase my_activity y cómo llamar a la función .secret() que imprimirá un atributo privado del objeto:
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(){}
});
Otros tutoriales de Frida
Consejo para recompensas por errores: regístrate en Intigriti, una plataforma premium de recompensas por errores creada por hackers, para hackers. ¡Únete a nosotros en https://go.intigriti.com/hacktricks hoy mismo y comienza a ganar recompensas de hasta $100,000!
{% embed url="https://go.intigriti.com/hacktricks" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- ¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿O quieres tener acceso a la última versión de PEASS o descargar HackTricks en PDF? ¡Consulta los PLANES DE SUSCRIPCIÓN!
- Descubre The PEASS Family, nuestra colección exclusiva de NFTs
- Obtén el merchandising oficial de PEASS y HackTricks
- Únete al 💬 grupo de Discord o al grupo de Telegram o sígueme en Twitter 🐦@carlospolopm.
- Comparte tus trucos de hacking enviando PRs al repositorio de hacktricks y al repositorio de hacktricks-cloud.