
Binder Trace is a tool for intercepting and parsing Android Binder messages. Think of it as "Wireshark for Binder".
O Binder Trace é uma ferramenta para interceptar e analisar mensagens Binder do Android. Pense nele como um "Wireshark para Binder".

versão do python >= 3.9
Você precisará de um dispositivo Android com root ou de um emulador.
(somente Linux) - instale o xclip ou xsel para a funcionalidade "copiar para a área de transferência"
sudo apt-get install xclip
sudo apt-get install xsel
Instale a partir do PyPi
pip install binder-trace
Verifique qual versão do frida está instalada (certifique-se de que você instalou os requisitos via pip)
pip list | grep frida
Baixe a versão correspondente do frida-server na página de releases do frida
Certifique-se de que o adb esteja sendo executado como root, envie o frida-server para o seu dispositivo e execute-o
adb root
adb push frida-server /data/local/tmp
adb shell
chmod u+x /data/local/tmp/frida-server
/data/local/tmp/frida-server
Para iniciar o binder trace, precisamos escolher um dispositivo e um processo ao qual anexar.
No exemplo a seguir, usamos adb e frida-ps para identificar um processo ao qual anexar em um emulador local. Como é um emulador Android 11, escolhemos o diretório de structs do Android 11. Escolha o diretório de structs que corresponda mais de perto à sua versão do Android. Se você quiser estruturas para uma versão diferente do Android, por favor nos avise. Quando estiver em execução, comece a usar o aplicativo de destino para gerar algumas transações 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
Para filtrar, defina qualquer uma ou todas as opções interface, method, type e inclusive. Para não usar uma opção, deixe-a em branco ""
> 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->"" e android.content.IContentProvider->"" ->call foram filtrados

As interfaces binder internas podem mudar entre versões menores e, como tudo é efetivamente compilado junto sem informações de versão em tempo de execução, é difícil fornecer informações de estrutura 100% precisas para cada versão no ecossistema altamente fragmentado do Android.
Mais detalhes sobre as estruturas podem ser encontrados na página de estruturas.
| Argumento | Descrição |
|---|
| -h | Exibe a ajuda dos argumentos. |
| -d DEVICE | O dispositivo ao qual anexar, ex.: "emulator-5554". Use adb devices para listar os dispositivos disponíveis. Se não for informado, usa o dispositivo USB por padrão. |
| -p PID | O pid do processo no DEVICE ao qual anexar. |
| -n NAME | O nome do processo no DEVICE ao qual anexar, ex.: "Messaging". |
| -a [9, 10, 11, 12, 13, 14] | A versão Android do dispositivo de destino. Se nenhum caminho de structs for fornecido, as structs padrão serão usadas. |
| -s STRUCTPATH | O caminho para o diretório dos arquivos de estrutura. |
| -c CONFIG | O caminho para o arquivo de configuração a ser usado para filtrar. |
| --spawn | Gerar o processo antes de anexar. A opção -n deve estar presente e conter um identificador de processo válido. |
| Tecla | Ação |
|---|
up | Mover para cima |
down | Mover para baixo |
shift + up | Página acima |
shift + down | Página abaixo |
home | Ir para o topo |
end | Ir para o final |
tab | Próximo painel |
shift + tab | Painel anterior |
ctrl + c | Copiar o painel para a área de transferência |
space | Pausar/Retomar a gravação de transações |
c | Limpar |
h | Abrir a ajuda |
r | Recarregar o arquivo de configuração |
q | Sair |
| Tecla | Ação |
|---|
p | Alternar a ordem crescente/decrescente |
w | Ir para a próxima interface |
s | Ir para a interface anterior |
a | Ativar todos os filtros |
n | Desativar todos os filtros |
enter | Alternar filtro |