apk.sh facilita la ingeniería inversa de aplicaciones android.
Herramienta para facilitar la ingeniería inversa de apps Android.

apk.sh: Facilita la Ingeniería Inversa de Aplicaciones Android

apk.sh es un script de Bash que facilita la ingeniería inversa de aplicaciones Android, automatizando algunas tareas repetitivas como extraer, decodificar, reconstruir y aplicar parches a un APK.

Captura de pantalla de la interfaz de apk.sh mostrando los comandos disponibles.
Interfaz de uso de apk.sh y sus comandos: pull, decode, build, patch, rename.

Características

apk.sh básicamente usa apktool para desensamblar, decodificar y reconstruir recursos, y algunos comandos bash para automatizar el proceso de inyección de frida-gadget. También admite paquetes de aplicaciones/APKs divididos.

  • Aplicar parches a APKs para cargar frida-gadget.so al inicio.
  • Compatibilidad con paquetes de aplicaciones/APKs divididos.
  • Desensamblar recursos a una forma casi original con apktool.
  • Reconstruir recursos decodificados a APK/JAR binario con apktool.
  • Firma digital del apk con apksigner.
  • Soporte para múltiples arquitecturas (arm, arm64, x86, x86_64).
  • No se necesita un dispositivo Android rooteado.

Para empezar

Extraer un APK de un dispositivo es tan simple como ejecutar ./apk.sh pull <nombre_del_paquete>

Decodificar un APK es tan simple como ejecutar ./apk.sh decode <nombre_del_apk>

Reconstruir un APK es tan simple como ejecutar ./apk.sh build <directorio_del_apk>

apk.sh pull

apk.sh pull extrae un APK de un dispositivo. Admite paquetes de aplicaciones/APKs divididos, lo que significa que los APKs divididos se unirán en un solo APK (esto es útil para aplicar parches). Si el paquete es un paquete de aplicaciones/APK dividido, apk.sh combinará los APKs en un solo APK, corrigiendo todos los identificadores de recursos públicos.

apk.sh patch

apk.sh patch aplica un parche a un APK para cargar frida-gadget.so al inicio.

frida-gadget.so es una biblioteca compartida de Frida destinada a ser cargada por programas que se van a instrumentar (cuando el modo de funcionamiento Inyectado no es adecuado). Simplemente cargando la biblioteca, podrá interactuar con ella utilizando herramientas basadas en Frida existentes como frida-trace. También admite un enfoque totalmente autónomo donde puede ejecutar scripts desde el sistema de archivos sin ninguna comunicación externa.

Aplicar un parche a un APK es tan simple como ejecutar ./apk.sh patch <nombre_del_apk> --arch arm.

También puede especificar una configuración de frida-gadget en un archivo json ./apk.sh patch <nombre_del_apk> --arch arm --gadget-conf <config.json>

Configuraciones de Frida’s Gadget

En la interacción predeterminada, Frida Gadget expone una interfaz compatible con frida-server, escuchando en localhost:27042 de forma predeterminada. Para lograr una instrumentación temprana, Frida permite que la función constructora de Gadget bloquee hasta que se adjunte() al proceso o se llame a resume() después de pasar por los pasos habituales spawn() -> attach() -> …aplicar instrumentación…

Si no desea este comportamiento de bloqueo y desea que el programa arranque inmediatamente, o si prefiere que escuche en una interfaz o puerto diferente, puede personalizar esto a través de un archivo de configuración json.

La configuración predeterminada es:

{
  "interaction": {
    "type": "listen",
    "address": "127.0.0.1",
    "port": 27042,
    "on_port_conflict": "fail",
    "on_load": "wait"
  }
}

Puede pasar el archivo de configuración de gadget a apk.sh con la opción --gadget-conf.

Interacción de scripts

Una configuración típicamente sugerida podría ser:

{
  "interaction": {
    "type": "script",
    "path": "/data/local/tmp/script.js",
    "on_change":"reload"
  }
}

script.js podría ser algo como:

var android_log_write = new NativeFunction(
    Module.getExportByName(null, '__android_log_write'),
    'int',
    ['int', 'pointer', 'pointer']
);

var tag = Memory.allocUtf8String("[frida-script][ax]");

var work = function() {
    setTimeout(function() {
        android_log_write(3, tag, Memory.allocUtf8String("ping @ " + Date.now()));
        work();
    }, 1000);
}

work();

android_log_write(3, tag, Memory.allocUtf8String(">--(O.o)-<"));
adb push script.js /data/local/tmp
./apk.sh patch <nombre_del_apk> --arch arm --gadget-conf <config.json>
adb install file.gadget.apk

Nota

Agregue el siguiente código para imprimir en logcat la salida de console.log de cualquier script de frida codeshare cuando use el tipo de interacción Script.

// Imprimir en logcat la salida de console.log
// Ver: https://github.com/frida/frida/issues/382
var android_log_write = new NativeFunction(
    Module.getExportByName(null, '__android_log_write'),
    'int',
    ['int', 'pointer', 'pointer']
);
var tag = Memory.allocUtf8String("[frida-script][ax]");
console.log = function(str) {
    android_log_write(3, tag, Memory.allocUtf8String(str));
}

Requisitos

  • apktool
  • apksigner
  • unxz
  • zipalign
  • aapt
  • adb

Uso

SINOPSIS

apk.sh [SUBCOMMAND] [APK FILE|APK DIR|PKG NAME] [FLAGS]
apk.sh pull [PKG NAME] [FLAGS]
apk.sh decode [APK FILE] [FLAGS]
apk.sh build [APK DIR] [FLAGS]
apk.sh patch [APK FILE] [FLAGS]
apk.sh rename [APK FILE] [PKG NAME] [FLAGS]

SUBCOMANDOS

pull //Extraer un apk desde un dispositivo/emulador.

decode //Decodificar un apk.

build //Reconstruir un apk.

patch //Aplicar un parche a un apk.

rename //Renombrar el paquete apk.

FLAGS

  • -a, –arch <arch> Especificar la arquitectura de destino, obligatorio al aplicar parches.
  • -g, –gadget-conf Especificar un archivo de configuración de frida-gadget, opcional al aplicar parches.
  • -n, –net Agregar una configuración de seguridad de red permisiva al construir, opcional. Se puede usar también con patch, pull y rename.
  • -s, –safe No decodificar recursos al decodificar (es decir, apktool -r). No se puede usar al aplicar parches.
  • -d, –no-dis No desensamblar dex, opcional al decodificar (es decir, apktool -s). No se puede usar al aplicar parches.

Visitar Código Fuente

My Cart Close (×)

Tu carrito está vacío
Ver tienda