
Инструмент для анализа Android-вредоносного ПО, создающий комплексные профили времени выполнения путём перехвата поведения приложений в области криптографии, файловых систем, баз данных, сетевых коммуникаций и операций с процессами.
Трассировщик API бинарных файлов Android
Dexray Intercept является частью динамической песочницы Sandroid. Его цель — создание профилей времени выполнения для отслеживания поведения Android-приложения. Это реализуется с использованием frida.
Просто установите его через pip:
python3 -m pip install dexray-intercept
Это установит Dexray Intercept как инструмент командной строки ammm или dexray-intercept.
Кроме того, будет предоставлен пакет dexray_intercept. Подробнее об использовании пакета — ниже.
Убедитесь, что ваше Android-устройство рутировано. frida-server будет автоматически установлен в последней версии. Затем вы можете использовать Dexray Intercept, просто выполнив следующую команду:
dexray-intercept <target app>
# или используя старое имя:
ammm <target app>
Все хуки отключены по умолчанию для оптимальной производительности. Включайте хуки в зависимости от ваших задач анализа:
# Включить определённые хуки
dexray-intercept --enable-aes <app_name> # Включить хуки криптографии AES
dexray-intercept --enable-web <app_name> # Включить хуки web/HTTP
dexray-intercept --enable-aes --enable-web <app_name> # Включить несколько хуков
# Включить группы хуков
dexray-intercept --hooks-crypto <app_name> # Включить все хуки криптографии
dexray-intercept --hooks-network <app_name> # Включить все сетевые хуки
dexray-intercept --hooks-filesystem <app_name> # Включить все хуки файловой системы
# Включить все хуки (влияет на производительность)
dexray-intercept --hooks-all <app_name> # Включить все доступные хуки
# Использовать идентификатор пакета вместо имени приложения
dexray-intercept -s com.example.package --hooks-crypto
--hooks-crypto (AES, кодировки, keystore, сертификаты)--hooks-network (HTTP, сокеты, SSL/TLS)--hooks-filesystem (файловые операции, базы данных, shared preferences)--hooks-ipc (intents, broadcasts, binder, shared preferences)--hooks-process (распаковка DEX, нативные библиотеки, среда выполнения)--hooks-services (камера, геолокация, телефония, bluetooth)Вот пример мониторинга приложения chrome на нашем 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
Установите Dexray Intercept как пакет и используйте новую модульную архитектуру:
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()
Включайте определённые группы хуков в зависимости от ваших задач анализа:
# 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
Старый API по-прежнему доступен для обратной совместимости:
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
Чтобы запустить его как пакет в Sandroid, убедитесь, что вы также установили JobManager из AndroidFridaManager. Это позволяет запускать несколько сессий frida в разных потоках.
Всё, что вам нужно сделать, — запустить следующий код:
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()
Убедитесь, что никакая другая часть вашего кода не пытается подключиться к серверу frida (нет других сессий frida).
Чтобы проверить это, вы можете попробовать следующий образец: catelites_2018_01_19.apk. Имя пакета — net.classwindexampleyear.bookseapiececountry. Убедитесь, что ваш AVD работает на Android 9, чтобы образец мог выполнить весь свой вредоносный код. Вы можете установить этот образец просто с помощью adb install samples/unpacking/catelites_2018_01_19.apk.
Чтобы скомпилировать этот проект, убедитесь, что npm и frida-compile работают в вашей системе и установлены в ваш PATH. Начиная с версии frida 17.0, frida-compile устанавливается через pip install frida-tools.
Затем просто выполните следующую команду, чтобы скомпилировать последнюю версию frida-агента:
$ 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
Это гарантирует, что в dexray-intercept используются последние frida-скрипты/хуки.
Чтобы вносить изменения в код на Python, рекомендуется установить dexray-intercept через pip в режиме редактирования:
python3 -m pip install -e .
Таким образом, локальные изменения в коде Python будут отражаться без создания новой версии пакета.
Доступна исчерпывающая документация, охватывающая установку, использование, справочник по API и разработку:
Просто выполнив следующую команду в этом каталоге, setup.py должен быть использован для установки dexray-intercept как локального python-пакета в вашу систему:
python3 -m pip install .
Чтобы скомпилировать TypeScript frida-хуки, нам нужен проект frida-compile (ссылка). Он будет включён в состав frida-tools.
python3 -m pip install frida-tools
Кроме этого, нам также нужна поддержка frida-java-bridge и внутренних типов frida:
npm install frida-java-bridge@latest --save
npm install --save-dev @types/frida-gum@latest
При распаковке приложения могут загружать DexCode — ранее указывавший на отдельные блоки памяти — в DexFile, который представляет выполняемый код. Например, некоторые приложения могут восстанавливать инструкции непосредственно перед выполнением. В таких случаях Sandroid не может вернуть инструкции обратно в DexFile. Для решения этой проблемы необходимы дальнейшие исследования.
Dexray Intercept основан на превосходной работе различных проектов с открытым исходным кодом и исследователей в сообществе безопасности Android и динамического анализа. Мы хотели бы выразить признательность следующим проектам, которые вдохновили нас или внесли вклад в нашу реализацию:
Мы выражаем благодарность этим проектам и их сопровождающим за развитие анализа безопасности Android и предоставление своей работы сообществу.