🟠
Mobile Application Penetration Testing
  • Inicio
  • General
    • Metodologías y estándares
    • Recursos de aprendizaje
  • Android
    • Aplicaciones vulnerables
    • Emuladores
    • Root
    • Android Debug Bridge (adb)
    • Drozer
    • Obtención de app (APK)
    • Análisis estático
      • AndroidManifest.xml
      • Network security config
      • Directorios y archivos
      • Patrones y palabras claves en el código
      • Reversing
        • Aplicaciones nativas
          • Java / Kotlin
        • Aplicaciones híbridas
          • Flutter
          • React Native
          • Xamarin
        • Código nativo / bibliotecas compartidas
      • Ofuscación / Desofuscación
      • Automatizado
    • Análisis dinámico
      • Activities
      • Deep links
      • Content providers
      • Services
      • Anti-root
      • Captura de tráfico de red
        • Burp Suite
        • SSL Pinning
      • Almacenamiento de datos
        • SD card
        • SharedPreferences
        • Bases de datos
      • Logs
      • WebViews
      • Hooking
        • Frida
        • Objection
      • Memory dump
      • Automatizado
    • Firma de app
    • Herramientas
  • iOS
    • Aplicaciones vulnerables
    • Emuladores
    • Jailbreak
    • SSH (Secure SHell)
    • Transferencia de archivos
    • Análisis estático
      • Archivo IPA
      • Info.plist
      • Automatizado
    • Análisis dinámico
      • Anti-jailbreak
      • Biometría
      • Captura de tráfico de red
        • Burp Suite
        • SSL Pinning
      • Almacenamiento de datos
        • Archivos Property List (PList)
        • NSUserDefaults
        • Cache.db
        • Keychain
        • Screenshots
      • Frida
      • Logs
      • Hooking
    • Herramientas
  • Herramientas transversales
    • Frida
    • Frida Gadget
    • Objection
  • Checklist
    • Android application penetration testing
    • iOS application penetration testing
Con tecnología de GitBook
En esta página
  • Java
  • Native libraries

¿Te fue útil?

  1. Android
  2. Análisis dinámico
  3. Hooking

Frida

Java

Hooking de función.

Java.perform(function() {
    var classRef = Java.use("<package-name>.<class-name>");
    classRef.<function-name>.implementation = function() {
        return this.<function-name>();
    }
});

Cambiar el valor de retorno de una función.

Java.perform(function() {
    var classRef = Java.use("<package-name>.<class-name>");
    classRef.<function-name>.implementation = function() {
        let ret_val = this.<function-name>();
        console.log("[*] Original return value", ret_val);
        let new_ret_val = <new-value>;
        console.log("[*] New return value", new_ret_val);
        return new_ret_val;
    }
});

Cambiar el valor booleano de retorno de una función a false.

Java.perform(function() {
    var classRef = Java.use("<package-name>.<class-name>");
    classRef.<function-name>.implementation = function() {
        let ret_val = this.<function-name>();
        console.log("[*] Original return value " + ret_val);        
        // Alternative 1
        let new_ret_val = false;
        // Alternative 2        
        let new_ret_val = Java.use("java.lang.Boolean").$new(false);
        console.log("[*] New return value " + new_ret_val);
        return new_ret_val;
    }
});

Ejecutar método estático (static method).

Java.perform(function() {
    var classRef = Java.use("<package-name>.<class-name>");
    classRef.<method-name>();
});

Cambiar el valor de una variable.

Java.perform(function (){
    var classRef = Java.use("<package-name>.<class-name>");
    classRef.<variable-name>.value = <new-value>;
});

Ejecutar método de una clase no estática.

Java.perform(function() {
    var classRef = Java.use("<package-name>.<class-name>");
    var classInstance = classRef.$new();
    classInstance.<method-name>();
});

Hooking de constructor.

Java.perform(function() {
    var classRef = Java.use("<package-name>.<class-name>");
    classRef.$init.implementation = function() {
        this.$init();
    }
});

Ejecutar método en una instancia existente.

Java.performNow(function() {
    Java.choose("<package-name>.<class-name>", {
        onMatch: function(instance) {
        instance.<method-name>();
    },
    onComplete: function() {}
    });
});

Proporcionar un objeto como argumento a un método y ejecutarlo en una instancia existente.

Java.performNow(function() {
    Java.choose("<package-name>.<class-name>", {
        onMatch: function(instance) {
            var classRef = Java.use("<package-name>.<class-name>");
            var obj = classRef.$new();
            obj.<variable-name>.value = <value>;
            instance.<method-name>(obj);
        },
        onComplete: function() {}
    });
});

Native libraries

AnteriorHookingSiguienteObjection

Última actualización hace 5 meses

¿Te fue útil?