
Estudio educativo de ingeniería inversa de un juego de Android en Unity/IL2CPP. Documenta la decodificación del protocolo de puerta de enlace, el análisis del SDK nativo anti-manipulación, la omisión del anclaje SSL y las técnicas de análisis dinámico basadas en Frida.
Proyecto educativo. El objetivo es entender cómo se comunica un juego moderno de Unity/IL2CPP para Android, cómo funcionan sus SDK de protección nativos y cómo aplicar técnicas de análisis estático y dinámico a un APK real.
Este repositorio documenta un estudio de ingeniería inversa en curso de com.run.tower.defense (Game of Thrones: Conquest), un juego de Unity con runtime IL2CPP, múltiples SDK de protección nativos y un protocolo binario personalizado.
Sin trampas, sin explotación, sin modificación de datos del juego en vivo. El enfoque es puramente en comprender la arquitectura interna.
| Área | Estado | Hallazgo Clave |
|---|---|---|
| Protocolo gateway (puerto 30101) | Decodificado | Binario personalizado, encuadre uint16_BE, cuerpo varint, sin TLS |
| Opcodes | Mapeados | 0x55 handshake, 0x5d acciones de juego, 0x1d sincronización de estado, 0x15 heartbeat, 0x59 ACK de cliente |
| Codificación de coordenadas | Decodificada | 4 caracteres tipo ASCII85 → uint32 (x=reino, y=posición) |
| API de análisis | Capturada | logagent-wf.centurygame.com — eventos JSON, sin pinning |
| Pinning SSL | Bypass parcial | Bypass en capa Java (OkHttp + TrustManager); capa nativa BestHTTP identificada |
| Anti-manipulación (libnesec) | Identificado | Mata el proceso ~58s después de adjuntar Frida; función de eliminación y nivel de detección mapeados |
| libxt_a64.so | Identificado | SDK de hooking PLT cargado en espacio de nombres de enlazador aislado — invisible para Frida/maps |
| libNetHTProtect.so | Analizado | SDK de integridad de red; huella MD5; serialización estilo protobuf |
| Volcado IL2CPP | Parcial | Lista de ensamblados recuperada; RVA de certval de BestHTTP mapeado |
got-re/
├── README.md ← este archivo
├── FLOW.md ← flujo de datos completo descubierto
├── SETUP.md ← guía de configuración del entorno
├── TOOLS_AND_COMMANDS.md ← referencia de todos los comandos y herramientas
├── CLAUDE.md ← contexto para sesiones asistidas por IA
├── captures/
│ ├── battle.pcap ← muestra de tráfico gateway (sesión 1)
│ └── battle2.pcap ← muestra de tráfico gateway (sesión 2, más rica)
└── scripts/
├── frida/
│ ├── certval_hook.js ← observar validación de certificados de BestHTTP
│ ├── button_hook.js ← interceptar eventos de botones UI de Unity
│ ├── ssl_unpin.js ← desanclar SSL (capas Java + IL2CPP)
│ └── nesec_bypass.js ← neutralizar anti-manipulación de libnesec
├── analysis/
│ ├── analyze_gateway.py ← analizar y decodificar capturas pcap del puerto 30101
│ ├── analyze_mitm.py ← leer y filtrar archivos .mitm de mitmproxy
│ ├── decode_1d_v2.py ← decodificación profunda de tramas de sincronización 0x1d
│ └── deep_analysis.py ← coordenadas, fragmentos JSON, opcode 0x59
└── proxy/
├── mitm_setup.py ← instalar CA de mitmproxy en el dispositivo
├── run_ssl_unpin.py ← ejecutor combinado mitmdump + desanclaje SSL de Frida
└── run_button_hook.py ← ejecutor combinado mitmdump + hook de botón de Frida
# 1. Iniciar frida-server en el dispositivo
adb shell "su -c '/data/local/tmp/fs17 -l 0.0.0.0:37555 &'"
adb forward tcp:37555 tcp:37555
# 2. Capturar tráfico del gateway
adb shell "su -c 'tcpdump -i any -w /sdcard/session.pcap port 30101'"
# ... jugar ...
adb pull /sdcard/session.pcap captures/
# 3. Analizarlo
python scripts/analysis/analyze_gateway.py captures/session.pcap
Consulta FLOW.md para ver el mapa completo del protocolo y preguntas abiertas.
Consulta SETUP.md para poner en marcha tu entorno.
Si tienes análisis de Ghidra, salida de il2cppdumper o capturas pcap adicionales — los PRs y las issues son bienvenidos.