
Binder Trace — это инструмент для перехвата и анализа сообщений Android Binder. Представьте его как «Wireshark для Binder».
Binder Trace — это инструмент для перехвата и разбора сообщений Android Binder. Можно считать его «Wireshark для Binder».

версия python >= 3.9
Вам понадобится рутированное Android-устройство или эмулятор.
(только Linux) — установите xclip или xsel для функции «копировать в буфер обмена»
sudo apt-get install xclip
sudo apt-get install xsel
Установка из PyPi
pip install binder-trace
Проверьте, какая версия frida установлена (убедитесь, что вы установили зависимости через pip)
pip list | grep frida
Загрузите подходящую версию frida-server со страницы релизов frida
Убедитесь, что adb запущен от root, скопируйте frida-server на устройство и запустите его
adb root
adb push frida-server /data/local/tmp
adb shell
chmod u+x /data/local/tmp/frida-server
/data/local/tmp/frida-server
Чтобы запустить binder trace, нужно выбрать устройство и процесс для подключения.
В следующем примере мы используем adb и frida-ps, чтобы определить процесс для подключения в локальном эмуляторе. Поскольку это эмулятор Android 11, мы выбираем каталог структур для Android 11. Выбирайте каталог структур, который наиболее точно соответствует вашей версии Android. Если вам нужны структуры для другой версии Android, сообщите нам. После запуска начните использовать целевое приложение, чтобы сгенерировать несколько binder-транзакций.
> adb devices
List of devices attached
emulator-5554 device
> frida-ps -Ua
PID Name Identifier
---- ------------- ----------------------------
8334 Messaging com.android.messaging
7941 Phone com.android.dialer
9607 Settings com.android.settings
> cd binder_trace
> binder-trace -d emulator-5554 -n Messaging -a 11
Для фильтрации укажите любой или все из параметров interface, method, type и inclusive. Чтобы не использовать параметр, оставьте его пустым ""
> binder-trace -d emulator-5554 -n Contacts -a 13

{
"filters": [
{
"interface": "android.gui.IDisplayEventConnection",
"method": "requestNextVsync",
"type": "",
"inclusive": false
},
{
"interface": "android.content.IContentProvider",
"method": "",
"type": "call",
"inclusive": false
}
]
}
> binder-trace -d emulator-5554 -n Contacts -a 13 -c .\binder_trace\binder_trace\config.json
android.gui.IDisplayEventConnection->requestNextVsync->"" и android.content.IContentProvider->""->call были отфильтрованы

Внутренние интерфейсы Binder могут меняться между минорными версиями, и, поскольку они фактически компилируются вместе без информации о версии во время выполнения, сложно предоставить 100% точную информацию о структурах для каждого выпуска в сильно фрагментированной экосистеме Android.
Больше подробностей о структурах можно найти на странице структур.
| Argument | Description |
|---|
| -h | Выводит справку по аргументам. |
| -d DEVICE | Устройство для подключения, например "emulator-5554". Используйте adb devices для вывода списка доступных устройств. Если не указано, по умолчанию используется USB-устройство. |
| -p PID | PID процесса на УСТРОЙСТВЕ, к которому нужно подключиться. |
| -n NAME | Имя процесса на УСТРОЙСТВЕ, к которому нужно подключиться, например "Messaging". |
| -a [9, 10, 11, 12, 13, 14] | Целевая версия Android на устройстве. Если путь к структурам не указан, используются структуры по умолчанию. |
| -s STRUCTPATH | Путь к каталогу файлов структур. |
| -c CONFIG | Путь к файлу конфигурации для фильтрации. |
| --spawn | Запустить процесс перед подключением. Опция -n обязательна и должна содержать допустимый идентификатор процесса. |
| Key | Action |
|---|
up | Переместиться вверх |
down | Переместиться вниз |
shift + up | На страницу вверх |
shift + down | На страницу вниз |
home | В начало |
end | В конец |
tab | Следующая панель |
shift + tab | Предыдущая панель |
ctrl + c | Скопировать панель в буфер обмена |
space | Приостановить/Возобновить запись транзакций |
c | Очистить |
h | Открыть справку |
r | Перезагрузить файл конфигурации |
q | Выйти |
| Key | Action |
|---|
p | Переключить порядок по возрастанию/убыванию |
w | Перейти к следующему интерфейсу |
s | Перейти к предыдущему интерфейсу |
a | Включить все фильтры |
n | Выключить все фильтры |
enter | Переключить фильтр |