
Radare2 e Frida melhores juntos.
Radare2 e Frida melhores juntos
Plugin autocontido para radare2 que inclui frida e permite instrumentar processos locais ou remotos usando comandos r2 em vez (mas não limitado a) scripts Frida.
O projeto radare fornece uma toolchain completa para engenharia reversa, é mantido ativamente e está fornecendo funcionalidades bem mantidas e estendendo suas funcionalidades com outras linguagens de programação e ferramentas.
Frida é um kit de ferramentas de instrumentação dinâmica que facilita a inspeção e manipulação de processos em execução injetando seu próprio JavaScript e, opcionalmente, também se comunicar com seus scripts.
:.):dbr_fs.A forma recomendada de instalar o r2frida é via r2pm:
$ r2pm -ci r2frida
Builds binários que não requerem compilação serão em breve suportados em r2pm e r2env. Enquanto isso, sinta-se à vontade para baixar as últimas builds na página de Releases.
No GNU/Debian você precisará instalar os seguintes pacotes:
$ sudo apt install -y make gcc libzip-dev nodejs npm curl pkg-config git
$ git clone https://github.com/nowsecure/r2frida.git
$ cd r2frida
$ make
$ make user-install
radare2 (ao invés de radare2-x.y.z)preconfigure.bat)configure.bat e depois make.batPara teste, use r2 frida://0, pois anexar ao pid0 no frida é uma sessão especial que executa localmente. Agora você pode executar o comando :? para obter a lista de comandos disponíveis.
$ r2 'frida://?'
r2 frida://[action]/[link]/[device]/[target]
* action = list | apps | attach | spawn | launch
* link = local | usb | remote host:port
* device = '' | host:port | device-id
* target = pid | appname | process-name | program-in-path | abspath
Local:
* frida://? # show this help
* frida:// # list local processes
* frida://0 # attach to frida-helper (no spawn needed)
* frida:///usr/local/bin/rax2 # abspath to spawn
* frida://rax2 # same as above, considering local/bin is in PATH
* frida://spawn/$(program) # spawn a new process in the current system
* frida://attach/(target) # attach to target PID in current host
USB:
* frida://list/usb// # list processes in the first usb device
* frida://apps/usb// # list apps in the first usb device
* frida://attach/usb//12345 # attach to given pid in the first usb device
* frida://spawn/usb//appname # spawn an app in the first resolved usb device
* frida://launch/usb//appname # spawn+resume an app in the first usb device
Remote:
* frida://attach/remote/10.0.0.3:9999/558 # attach to pid 558 on tcp remote frida-server
Environment: (Use the `%` command to change the environment at runtime)
R2FRIDA_SAFE_IO=0|1 # Workaround a Frida bug on Android/thumb
R2FRIDA_DEBUG=0|1 # Used to debug argument parsing behaviour
R2FRIDA_COMPILER_DISABLE=0|1 # Disable the new frida typescript compiler (`:. foo.ts`)
R2FRIDA_AGENT_SCRIPT=[file] # path to file of the r2frida agent
$ r2 frida://0 # same as frida -p 0, connects to a local session
Você pode anexar, spawnar ou lançar qualquer programa por nome ou pid. A linha a seguir anexará ao primeiro processo chamado rax2 (execute rax2 - em outro terminal para testar esta linha)
$ r2 frida://rax2 # attach to the first process named `rax2`
$ r2 frida://1234 # attach to the given pid
Usando o caminho absoluto de um binário para spawnar irá iniciar o processo:
$ r2 frida:///bin/ls
[0x00000000]> :dc # continue the execution of the target program
Também funciona com argumentos:
$ r2 frida://"/bin/ls -al"
Para depuração USB de aplicativos iOS/Android use estas ações. Note que spawn pode ser substituído por launch ou attach, e o nome do processo pode ser o bundleid ou o PID.
$ r2 frida://spawn/usb/ # enumerate devices
$ r2 frida://spawn/usb// # enumerate apps in the first iOS device
$ r2 frida://spawn/usb//Weather # Run the weather app
Estes são os comandos mais frequentes, então você deve aprendê-los e sufixá-los com ? para obter ajuda dos subcomandos.
:i # get information of the target (pid, name, home, arch, bits, ..)
.:i* # import the target process details into local r2
:? # show all the available commands
:dm # list maps. Use ':dm|head' and seek to the program base address
:iE # list the exports of the current binary (seek)
:dt fread # trace the 'fread' function
:dt-* # delete all traces
Os plugins r2frida executam no lado do agente e são registrados com a API r2frida.pluginRegister.
Veja o diretório plugins/ para mais alguns scripts de exemplo de plugins.
[0x00000000]> cat example.js
r2frida.pluginRegister('test', function(name) {
if (name === 'test') {
return function(args) {
console.log('Hello Args From r2frida plugin', args);
return 'Things Happen';
}
}
});
[0x00000000]> :. example.js # load the plugin script
O comando :. funciona como o comando . do r2, mas executa dentro do agente.
:. a.js # run script which registers a plugin
:. # list plugins
:.-test # unload a plugin by name
:.. a.js # eternalize script (keeps running after detach)
Se você deseja instalar e usar r2frida nativamente no Android via Termux, existem algumas ressalvas com as dependências de biblioteca devido a algumas resoluções de símbolos. A maneira de fazer isso funcionar é estendendo a variável de ambiente LD_LIBRARY_PATH para apontar para o diretório do sistema antes do libdir do termux.
$ LD_LIBRARY_PATH=/system/lib64:$LD_LIBRARY_PATH r2 frida://...
Certifique-se de estar usando uma versão moderna do r2 (preferencialmente a última versão ou git).
Execute r2 -L | grep frida para verificar se o plugin está carregado; se nada for impresso, use a variável de ambiente R2_DEBUG=1 para obter algumas mensagens de depuração para descobrir o motivo.
Se você tiver problemas para compilar o r2frida, pode usar r2env ou baixar as builds de release da página de releases do GitHub; lembre-se de que apenas a versão MAJOR.MINOR deve corresponder, ou seja, r2-5.7.6 pode carregar qualquer plugin compilado em qualquer versão entre 5.7.0 e 5.7.8.
+---------+
| radare2 | The radare2 tool, on top of the rest
+---------+
:
+----------+
| io_frida | r2frida io plugin
+----------+
:
+---------+
| frida | Frida host APIs and logic to interact with target
+---------+
:
+-------+
| app | Target process instrumented by Frida with Javascript
+-------+
Este plugin foi desenvolvido por pancake, também conhecido como Sergi Alvarez (o autor do radare2) para a NowSecure.
Gostaria de agradecer a Ole André por escrever e manter o Frida, bem como por ser tão gentil em corrigir proativamente bugs e discutir detalhes técnicos sobre qualquer coisa necessária para fazer esta união funcionar. Kudos