Depurando um app impossível de depurar
- Recentemente encontrei um app impossível de depurar. Esse app bloqueia a conexão do depurador, encerra cedo quando há injeção de código e, se for executado em um dispositivo com jailbreak, faz o telefone inteiro travar.
- Apps iOS frequentemente incluem proteções adicionais, como detecção de jailbreak ou ofuscação de código. Este app, em particular, combina muitas proteções.
Versão em vídeo
- Há uma versão em vídeo deste post, que mostra o processo com mais detalhes.
Índice
PT_DENY_ATTACH
- Contornando
PT_DENY_ATTACH (modo fácil)
- Contornando
PT_DENY_ATTACH (modo difícil)
- Travamento do telefone
- Injeção de código
- Conclusão
PT_DENY_ATTACH
- Conectar o depurador é o primeiro passo. Em telefones com jailbreak, normalmente é fácil conectar um depurador.
- Uma função chamada
ptrace bloqueia a conexão do depurador. Essa função impede conexões futuras do depurador por meio da requisição PT_DENY_ATTACH.
Contornando PT_DENY_ATTACH (modo fácil)
PT_DENY_ATTACH só bloqueia o depurador depois de ser chamado. Se você definir um breakpoint antes da chamada, o depurador se conecta normalmente.
- É possível contornar a chamada definindo um breakpoint na própria função
ptrace.
Contornando PT_DENY_ATTACH (modo difícil)
- Alguns desenvolvedores implementam o bloqueio do depurador usando chamadas de sistema diretas em vez de
ptrace.
- Nesse caso, é preciso encontrar essa chamada de sistema no binário e contorná-la.
Travamento do telefone
- O app faz o telefone reiniciar de forma branda em certas condições. Isso acontece ao chamar em loop infinito um método intensivo em memória.
- É possível contornar esse método usando
lldb.
Injeção de código
- O app trava quando há injeção de código. Isso provavelmente ocorre por causa de um identificador de grupo de apps incorreto.
- Em telefones com jailbreak, é possível injetar código sem reassinar o app. Caso contrário, o problema pode ser resolvido fazendo swizzling de métodos.
1 comentários
Comentários do Hacker News
Bryce Bostwick faz um trabalho muito legal e inspirador com depuração e engenharia reversa de apps
No DOS/Windows, truques anti-depuração já eram comuns há muito tempo
PT_DENY_ATTACHparece ser um recurso do segundo casoSurpreende que a revisão da App Store da Apple não rejeite apps que fazem chamadas diretas ao sistema
Fica a dúvida de por que o autor procurou por
svc 0x80em vez demov w16, #26O autor está pronto para responder perguntas
O vídeo no topo é um vídeo de programação excelente
Fica a dúvida se esse app era um app legítimo ou se foi depurado por suspeita de malware
Burlando o PT_DENY_ATTACH (Modo Difícil)
Fica a curiosidade sobre a notificação "com.apple.tw.twrr"
Fica a dúvida se existem pessoas fazendo engenharia reversa do código JavaScript de sites
Fica a dúvida se é possível rodar kexts customizadas em um iPhone com jailbreak