1 puntos por GN⁺ 2025-02-19 | 1 comentarios | Compartir por WhatsApp

Cómo depurar una app imposible de depurar

  • Hace poco me encontré con una app imposible de depurar. Esta app bloquea la conexión del depurador, termina anticipadamente cuando se inyecta código y hace colapsar todo el teléfono si se ejecuta en un dispositivo con jailbreak.
  • Las apps de iOS suelen incluir protecciones adicionales como detección de jailbreak u ofuscación de código. Esta app en particular combina muchas protecciones.

Versión en video

  • Hay una versión en video de esta publicación que muestra el proceso con más detalle.

Índice

  • PT_DENY_ATTACH
  • Evadir PT_DENY_ATTACH (modo fácil)
  • Evadir PT_DENY_ATTACH (modo difícil)
  • Crash del teléfono
  • Inyección de código
  • Cierre

PT_DENY_ATTACH

  • El primer paso es conectar el depurador. En teléfonos con jailbreak, normalmente es fácil conectar el depurador.
  • Una función llamada ptrace bloquea la conexión del depurador. Esta función impide futuras conexiones del depurador mediante la solicitud PT_DENY_ATTACH.

Evadir PT_DENY_ATTACH (modo fácil)

  • PT_DENY_ATTACH solo bloquea el depurador después de ser llamado. Si se establece un breakpoint antes de la llamada, el depurador se conecta normalmente.
  • Se puede evitar la llamada poniendo un breakpoint en la propia función ptrace.

Evadir PT_DENY_ATTACH (modo difícil)

  • Algunos desarrolladores implementan el bloqueo del depurador usando llamadas al sistema directamente en lugar de ptrace.
  • En ese caso, hay que encontrar esa llamada al sistema en el binario y evadirla.

Crash del teléfono

  • La app provoca un reinicio suave del teléfono bajo ciertas condiciones. Esto ocurre al llamar en bucle infinito a un método intensivo en memoria.
  • Se puede evadir este método usando lldb.

Inyección de código

  • La app crashea cuando se inyecta código. Es muy probable que esto se deba a un identificador de grupo de apps incorrecto.
  • En teléfonos con jailbreak, se puede inyectar código sin volver a firmar la app. En caso contrario, el problema puede resolverse haciendo swizzling de métodos.

1 comentarios

 
GN⁺ 2025-02-19
Comentarios de Hacker News
  • Bryce Bostwick hace un trabajo muy genial e inspirador en depuración e ingeniería inversa de apps

    • Se inspiró al ver en uno de sus videos de YouTube cómo modificar TikTok para que solo mostrara videos de gatos, y luego modificó Instagram para dejar únicamente la función de mensajes y eliminar el resto
    • Le interesa modificar Windows al estilo de Windhawk
    • Bryce muestra este tipo de trabajos en iOS en tiempo real mediante videos paso a paso
  • En DOS/Windows, los trucos anti-depuración han sido comunes desde hace mucho tiempo

    • Qué tan fácil es para el usuario tomar el control es inversamente proporcional a qué tan hostil es la plataforma hacia el usuario
    • PT_DENY_ATTACH parece ser una función hecha para lo segundo
    • En Windows existe un truco para hacer que una app se adjunte a sí misma
  • Sorprende que la revisión de la App Store de Apple no rechace apps que hacen llamadas al sistema directas

    • En las plataformas de Apple, las llamadas al sistema no tienen un ABI estable, por lo que deberían pasar por libSystem
    • Una app que hace llamadas al sistema directas está haciendo algo que no debería hacer
  • Tiene curiosidad por saber por qué el autor buscó svc 0x80 en lugar de mov w16, #26

  • El autor está listo para responder preguntas

  • El video de arriba es un video de programación realmente excelente

    • El ritmo rápido, el nivel adecuado de conocimientos asumidos y las excelentes demos no interrumpen el flujo
  • Tiene curiosidad por saber si esta app era una app legítima o si fue depurada por sospechas de malware

    • Si no, debió de haber requerido mucho esfuerzo
  • Cómo eludir PT_DENY_ATTACH (modo difícil)

    • Parchear el kernel en macOS para que PT_DENY_ATTACH no haga nada
    • En macOS es fácil ejecutar un kernel parcheado
    • En iOS habría más problemas (KTRR, etc.)
    • XNU es técnicamente de código abierto, pero fue más fácil parchearlo con un hex editor que recompilarlo
  • Tiene curiosidad por la notificación "com.apple.tw.twrr"

    • Por qué empieza con com.apple
    • Esa app no es una app de Apple
  • Tiene curiosidad por saber si conocen personas que hagan ingeniería inversa del código JavaScript de sitios web

  • Tiene curiosidad por saber si se pueden ejecutar kexts personalizadas en un iPhone con jailbreak

    • Modificar el propio kernel sería una forma más elegante de hacerlo