
Una herramienta de análisis de malware para Android que crea perfiles de ejecución completos mediante la interceptación del comportamiento de las aplicaciones en criptografía, sistemas de archivos, bases de datos, comunicaciones de red y operaciones de procesos.
Rastreador de API de Binarios de Android
Dexray Intercept forma parte del Sandbox dinámico Sandroid. Su propósito es crear perfiles en tiempo de ejecución para rastrear el comportamiento de una aplicación Android. Esto se realiza utilizando frida.
Simplemente instálalo con pip:
python3 -m pip install dexray-intercept
Esto instalará Dexray Intercept como herramienta de línea de comandos ammm o dexray-intercept.
Además, proporcionará un paquete dexray_intercept. Más información sobre cómo usar el paquete a continuación.
Asegúrate de que tu dispositivo Android esté rooteado. El frida-server se instalará automáticamente en la última versión. Luego puedes usar Dexray Intercept simplemente invocando el siguiente comando:
dexray-intercept <target app>
# o usando su nombre antiguo:
ammm <target app>
Todos los hooks están deshabilitados por defecto para un rendimiento óptimo. Habilita los hooks según tus necesidades de análisis:
# Habilitar hooks específicos
dexray-intercept --enable-aes <app_name> # Habilitar hooks de criptografía AES
dexray-intercept --enable-web <app_name> # Habilitar hooks web/HTTP
dexray-intercept --enable-aes --enable-web <app_name> # Habilitar múltiples hooks
# Habilitar grupos de hooks
dexray-intercept --hooks-crypto <app_name> # Habilitar todos los hooks de criptografía
dexray-intercept --hooks-network <app_name> # Habilitar todos los hooks de red
dexray-intercept --hooks-filesystem <app_name> # Habilitar todos los hooks de sistema de archivos
# Habilitar todos los hooks (impacto en el rendimiento)
dexray-intercept --hooks-all <app_name> # Habilitar todos los hooks disponibles
# Usar el identificador del paquete en lugar del nombre de la app
dexray-intercept -s com.example.package --hooks-crypto
--hooks-crypto (AES, codificaciones, keystore, certificados)--hooks-network (HTTP, sockets, SSL/TLS)--hooks-filesystem (operaciones de archivos, bases de datos, preferencias compartidas)--hooks-ipc (intents, broadcasts, binder, preferencias compartidas)--hooks-process (desempaquetado de DEX, bibliotecas nativas, runtime)--hooks-services (cámara, ubicación, telefonía, bluetooth)Aquí un ejemplo de monitoreo de la app chrome en nuestro AVD:
dexray-intercept Chrome
Dexray Intercept
⠀⠀⠀⠀⢀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣀⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠙⢷⣤⣤⣴⣶⣶⣦⣤⣤⡾⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⠾⠛⢉⣉⣉⣉⡉⠛⠷⣦⣄⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⠋⣠⣴⣿⣿⣿⣿⣿⡿⣿⣶⣌⠹⣷⡀⠀⠀
⠀⠀⠀⠀⣼⣿⣿⣉⣹⣿⣿⣿⣿⣏⣉⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⠁⣴⣿⣿⣿⣿⣿⣿⣿⣿⣆⠉⠻⣧⠘⣷⠀⠀
⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡇⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀⠀⠈⠀⢹⡇⠀
⣠⣄⠀⢠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⣠⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⢸⣿⠛⣿⣿⣿⣿⣿⣿⡿⠃⠀⠀⠀⠀⢸⡇⠀
⣿⣿⡇⢸⣿⣿⣿Sandroid⣿⣿⣿⡇⢸⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣷⠀⢿⡆⠈⠛⠻⠟⠛⠉⠀⠀⠀⠀⠀⠀⣾⠃⠀
⣿⣿⡇⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⢸⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣧⡀⠻⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⠃⠀⠀
⣿⣿⡇⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⢸⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢼⠿⣦⣄⠀⠀⠀⠀⠀⠀⠀⣀⣴⠟⠁⠀⠀⠀
⣿⣿⡇⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⢸⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣦⠀⠀⠈⠉⠛⠓⠲⠶⠖⠚⠋⠉⠀⠀⠀⠀⠀⠀
⠻⠟⠁⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠈⠻⠟⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠉⠉⣿⣿⣿⡏⠉⠉⢹⣿⣿⣿⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⣿⣿⣿⡇⠀⠀⢸⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⣿⣿⣿⡇⠀⠀⢸⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⢀⣄⠈⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠈⠉⠉⠀⠀⠀⠀⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
[*] starting app profiling
[*] press Ctrl+C to stop the profiling ...
[*] Filesystem profiling informations:
[*] [Libc::read] Read FD (anon_inode:[eventfd],0x7ac6b67540,8)
[*] Filesystem profiling informations:
[*] [Libc::read] Read FD (anon_inode:[eventfd],0x7fcb41c990,8
Instala Dexray Intercept como un paquete y usa la nueva arquitectura modular:
from dexray_intercept import AppProfiler, setup_frida_device
from dexray_intercept.services.hook_manager import HookManager
# Connect to device and get process
device = setup_frida_device()
process = device.attach("com.example.app")
# Configure hooks (all disabled by default for performance)
hook_config = {
'aes_hooks': True,
'web_hooks': True,
'file_system_hooks': True,
'keystore_hooks': True
}
# Create profiler with new architecture
profiler = AppProfiler(
process,
verbose_mode=True,
output_format="JSON",
hook_config=hook_config,
enable_stacktrace=True
)
# Start profiling
script = profiler.start_profiling()
# ... let app run and collect data ...
# Get results
profile_data = profiler.get_profile_data()
json_output = profiler.get_profiling_log_as_json()
# Runtime hook management
profiler.enable_hook('socket_hooks', True) # Enable more hooks at runtime
enabled_hooks = profiler.get_enabled_hooks() # Check what's enabled
# Stop profiling
profiler.stop_profiling()
Habilita grupos de hooks específicos según tus necesidades de análisis:
# Crypto hooks
hook_config = {
'aes_hooks': True,
'encodings_hooks': True,
'keystore_hooks': True
}
# Network hooks
hook_config = {
'web_hooks': True,
'socket_hooks': True
}
# File system hooks
hook_config = {
'file_system_hooks': True,
'database_hooks': True
}
# Enable all hooks (performance impact)
profiler.enable_all_hooks()
# Enable hook groups
profiler.enable_hook_group('crypto') # Enable all crypto-related hooks
La API antigua sigue disponible para compatibilidad hacia atrás:
from dexray_intercept import AppProfilerLegacy
# OR use environment variable: DEXRAY_FORCE_OLD_ARCH=true
profiler = AppProfilerLegacy(process_session, verbose=True, output_format="CMD",
base_path=None, deactivate_unlink=False)
profiler.instrument() # Old method name
# ...
profiler.finish_app_profiling() # Old method name
Para ejecutarlo como un paquete en Sandroid, asegúrate de haber instalado también el JobManager de AndroidFridaManager. Esto permite ejecutar múltiples sesiones de frida en diferentes hilos.
Todo lo que tienes que hacer es ejecutar el siguiente código:
from AndroidFridaManager import JobManager
from dexray_intercept import AppProfiler
job_manager = JobManager()
app_package = "net.classwindexampleyear.bookseapiececountry"
profiler = AppProfiler(job_manager.process_session, True, output_format="JSON", base_path=None, deactivate_unlink=False)
frida_script_path = profiler.get_frida_script()
job_manager.setup_frida_session(app_package, profiler.on_appProfiling_message)
job = job_manager.start_job(frida_script_path, custom_hooking_handler_name=profiler.on_appProfiling_message)
# close only the job and the frida session keeps active to run other frida scripts
# job_manager.stop_job_with_id(job.job_id)
job_manager.stop_app_with_closing_frida(app_package) # stops the frida session and the app and all frida jobs
profiler.write_profiling_log() # write the log data to profile.json
# instead of writing it to a file the JSON output will just be returned
# profiler.get_profiling_log_as_JSON()
Asegúrate de que ninguna otra parte de tu código esté intentando conectarse al servidor frida (ninguna otra sesión de frida).
Para probar esto puedes intentar con el siguiente ejemplo: catelites_2018_01_19.apk. El nombre del paquete es net.classwindexampleyear.bookseapiececountry. Asegúrate de que tu AVD esté ejecutándose en Android 9, para que el ejemplo pueda ejecutar todo su código malicioso. Puedes instalar este ejemplo simplemente con adb install samples/unpacking/catelites_2018_01_19.apk.
Para compilar este proyecto, asegúrate de que npm y frida-compile estén ejecutándose en tu sistema e instalados en tu path. Desde la versión 17.0 de frida, frida-compile se instala mediante pip install frida-tools.
Luego simplemente invoca el siguiente comando para obtener el último agente frida compilado:
$ cd <AppProfiling-Project>
> Dexray [email protected] build
> frida-compile agent/hooking_profile_loader.ts -o src/dexray_intercept/profiling.js
$ npm install frida-java-bridge@latest --save
$ npm install --save-dev @types/frida-gum@latest
> Dexray [email protected] prepare
> npm run build
up to date, audited 75 packages in 6s
19 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
Esto asegura que los últimos scripts/hooks de frida se utilicen en dexray-intercept.
Para realizar ajustes en el código Python, se recomienda instalar dexray-intercept con pip utilizando el modo editable:
python3 -m pip install -e .
De esta manera, los cambios locales en el código Python se reflejan sin crear una nueva versión del paquete.
Hay documentación completa disponible que cubre instalación, uso, referencia de API y desarrollo:
Simplemente invocando el siguiente comando en este directorio, el setup.py debería usarse para instalar dexray-intercept como un paquete Python local en tu sistema:
python3 -m pip install .
Para compilar los hooks de frida en TypeScript necesitamos el proyecto frida-compile (enlace). El cual se incluirá con frida-tools.
python3 -m pip install frida-tools
Además, también necesitamos soporte para frida-java-bridge y los tipos internos de frida:
npm install frida-java-bridge@latest --save
npm install --save-dev @types/frida-gum@latest
Al desempaquetar, las aplicaciones pueden cargar DexCode—previamente apuntado a bloques de memoria distintos—en un DexFile, que representa el código que se está ejecutando. Por ejemplo, algunas aplicaciones pueden restaurar instrucciones inmediatamente antes de la ejecución. En tales casos, Sandroid no puede revertir las instrucciones de vuelta al DexFile. Se necesita más investigación para resolver este problema.
Dexray Intercept se basa en el excelente trabajo de varios proyectos de código abierto e investigadores en la comunidad de seguridad de Android y análisis dinámico. Nos gustaría reconocer los siguientes proyectos que han inspirado o contribuido a nuestra implementación:
Extendemos nuestra gratitud a estos proyectos y sus mantenedores por avanzar el estado del análisis de seguridad de Android y hacer su trabajo disponible a la comunidad.