
Uma ferramenta de análise de malware Android que cria perfis abrangentes de runtime ao interceptar o comportamento da aplicação em criptografia, sistemas de arquivos, bancos de dados, comunicações de rede e operações de processos.
Rastreador de API de Binários Android
O Dexray Intercept faz parte do Sandbox dinâmico Sandroid. Seu propósito é criar perfis de execução para rastrear o comportamento de uma aplicação Android. Isso é feito utilizando o frida.
Basta instalá-lo com o pip:
python3 -m pip install dexray-intercept
Isso instalará o Dexray Intercept como ferramenta de linha de comando ammm ou dexray-intercept.
Além disso, fornecerá um pacote dexray_intercept. Mais informações sobre como usar o pacote abaixo.
Certifique-se de que seu dispositivo Android esteja rooteado. O frida-server será instalado automaticamente na versão mais recente. Em seguida, você pode usar o Dexray Intercept apenas invocando o seguinte comando:
dexray-intercept <target app>
# ou usando seu nome antigo:
ammm <target app>
Todos os hooks estão desabilitados por padrão para desempenho ideal. Habilite hooks com base nas suas necessidades de análise:
# Habilitar hooks específicos
dexray-intercept --enable-aes <app_name> # Habilitar hooks de criptografia AES
dexray-intercept --enable-web <app_name> # Habilitar hooks web/HTTP
dexray-intercept --enable-aes --enable-web <app_name> # Habilitar múltiplos hooks
# Habilitar grupos de hooks
dexray-intercept --hooks-crypto <app_name> # Habilitar todos os hooks de criptografia
dexray-intercept --hooks-network <app_name> # Habilitar todos os hooks de rede
dexray-intercept --hooks-filesystem <app_name> # Habilitar todos os hooks de sistema de arquivos
# Habilitar todos os hooks (impacto no desempenho)
dexray-intercept --hooks-all <app_name> # Habilitar todos os hooks disponíveis
# Usar identificador de pacote em vez do nome do app
dexray-intercept -s com.example.package --hooks-crypto
--hooks-crypto (AES, codificações, keystore, certificados)--hooks-network (HTTP, sockets, SSL/TLS)--hooks-filesystem (operações de arquivo, bancos de dados, shared preferences)--hooks-ipc (intents, broadcasts, binder, shared preferences)--hooks-process (desempacotamento DEX, bibliotecas nativas, runtime)--hooks-services (câmera, localização, telefonia, bluetooth)Aqui um exemplo de monitoramento do app chrome em nosso 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
Instale o Dexray Intercept como um pacote e use a nova arquitetura 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()
Habilite grupos específicos de hooks com base nas suas necessidades de análise:
# 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
A API antiga ainda está disponível para compatibilidade retroativa:
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 executá-lo como um pacote no Sandroid, certifique-se de que você também instalou o JobManager do AndroidFridaManager. Isso permite executar múltiplas sessões frida em threads diferentes.
Tudo o que você precisa fazer é executar o seguinte 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()
Certifique-se de que nenhuma outra parte do seu código esteja tentando se conectar ao servidor frida (nenhuma outra sessão frida).
Para testar isso, você pode experimentar a seguinte amostra: catelites_2018_01_19.apk. O nome do pacote é net.classwindexampleyear.bookseapiececountry. Certifique-se de que seu AVD esteja rodando no Android 9, para que a amostra possa executar todo o seu código malicioso. Você pode instalar esta amostra simplesmente com adb install samples/unpacking/catelites_2018_01_19.apk.
Para compilar este projeto, certifique-se de que npm e frida-compile estejam rodando no seu sistema e instalados no seu path. Desde a versão 17.0 do frida, o frida-compile é instalado via pip install frida-tools.
Então basta invocar o seguinte comando para obter o agente frida mais recente 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
Isso garante que os scripts/hooks frida mais recentes sejam usados no dexray-intercept.
Para fazer ajustes no código Python, é recomendado instalar o dexray-intercept com pip utilizando o modo editável:
python3 -m pip install -e .
Dessa forma, alterações locais no código Python são refletidas sem criar uma nova versão do pacote.
Documentação abrangente está disponível cobrindo instalação, uso, referência da API e desenvolvimento:
Basta invocar o seguinte comando neste diretório e o setup.py deverá ser usado para instalar o dexray-intercept como um pacote Python local no seu sistema:
python3 -m pip install .
Para compilar os hooks frida em TypeScript, precisamos do projeto frida-compile (link). Que será incluído com o frida-tools.
python3 -m pip install frida-tools
Além disso, também precisamos de suporte para frida-java-bridge e os tipos internos do frida:
npm install frida-java-bridge@latest --save
npm install --save-dev @types/frida-gum@latest
Ao desempacotar, as aplicações podem carregar DexCode—anteriormente apontado para blocos de memória distintos—em um DexFile, que representa o código sendo executado. Por exemplo, algumas aplicações podem restaurar instruções imediatamente antes da execução. Nesses casos, o Sandroid é incapaz de reverter as instruções de volta para o DexFile. Pesquisas adicionais são necessárias para resolver este problema
O Dexray Intercept baseia-se no excelente trabalho de vários projetos de código aberto e pesquisadores na comunidade de segurança Android e análise dinâmica. Gostaríamos de reconhecer os seguintes projetos que inspiraram ou contribuíram para nossa implementação:
Estendemos nossa gratidão a esses projetos e seus mantenedores por avançar o estado da análise de segurança Android e disponibilizar seu trabalho para a comunidade.