1 pontos por GN⁺ 2025-02-19 | 1 comentários | Compartilhar no WhatsApp

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

 
GN⁺ 2025-02-19
Comentários do Hacker News
  • Bryce Bostwick faz um trabalho muito legal e inspirador com depuração e engenharia reversa de apps

    • Inspirado por um vídeo no YouTube dele mostrando como modificar o TikTok para exibir apenas vídeos de gatos, modificou o Instagram para manter só a função de mensagens e remover o restante
    • Tem interesse em modificar o Windows no estilo Windhawk
    • Bryce apresenta esse tipo de trabalho no iOS por meio de vídeos passo a passo em tempo real
  • No DOS/Windows, truques anti-depuração já eram comuns há muito tempo

    • O grau de facilidade de controle pelo usuário é inversamente proporcional à hostilidade da plataforma ao usuário
    • PT_DENY_ATTACH parece ser um recurso do segundo caso
    • No Windows, existe um truque para fazer o app se anexar a si mesmo
  • Surpreende que a revisão da App Store da Apple não rejeite apps que fazem chamadas diretas ao sistema

    • Nas plataformas da Apple, chamadas de sistema não são uma ABI estável, então deveriam passar pelo libSystem
    • Um app que faz chamadas diretas ao sistema está fazendo algo que não deveria
  • Fica a dúvida de por que o autor procurou por svc 0x80 em vez de mov w16, #26

  • O autor está pronto para responder perguntas

  • O vídeo no topo é um vídeo de programação excelente

    • Ritmo rápido, pressupostos de conhecimento adequados e ótimas demonstrações que não atrapalham o fluxo
  • Fica a dúvida se esse app era um app legítimo ou se foi depurado por suspeita de malware

    • Caso contrário, isso deve ter dado bastante trabalho
  • Burlando o PT_DENY_ATTACH (Modo Difícil)

    • No macOS, faz-se um patch no kernel para que o PT_DENY_ATTACH não faça nada
    • No macOS, é fácil rodar um kernel com patch
    • No iOS, haveria mais problemas (KTRR etc.)
    • O XNU é tecnicamente open source, mas foi mais fácil aplicar patch com um editor hexadecimal do que recompilar
  • Fica a curiosidade sobre a notificação "com.apple.tw.twrr"

    • Por que começa com com.apple
    • Esse app não é um app da Apple
  • 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

    • Modificar o próprio kernel seria a forma mais legal