
Estudo educacional de engenharia reversa de um jogo Android Unity/IL2CPP. Documenta decodificação de protocolo de gateway, análise de SDK nativo de antimanipulação (anti-tampering), bypass de SSL pinning e técnicas de análise dinâmica baseadas em Frida.
Projeto educacional. O objetivo é entender como um jogo Unity/IL2CPP moderno para Android se comunica, como funcionam seus SDKs de proteção nativa e como aplicar técnicas de análise estática + dinâmica em um APK real.
Este repositório documenta um estudo contínuo de engenharia reversa de com.run.tower.defense (Game of Thrones: Conquest), um jogo Unity com runtime IL2CPP, múltiplos SDKs de proteção nativa e um protocolo binário personalizado de gateway.
Sem trapaça, sem exploração, sem modificação de dados do jogo em tempo real. O foco é puramente na compreensão da arquitetura interna.
| Área | Status | Descoberta Principal |
|---|---|---|
| Protocolo de gateway (porta 30101) | Decodificado | Binário personalizado, quadro uint16_BE, corpo varint, sem TLS |
| Opcodes | Mapeados | 0x55 handshake, 0x5d ações do jogo, 0x1d sincronização de estado, 0x15 heartbeat, 0x59 ACK do cliente |
| Codificação de coordenadas | Decodificada | 4 caracteres estilo ASCII85 → uint32 (x=reino, y=posição) |
| API de análise | Capturada | logagent-wf.centurygame.com — eventos JSON, sem pinning |
| SSL pinning | Contornado parcialmente | Camada Java contornada (OkHttp + TrustManager); camada nativa BestHTTP identificada |
| Anti-adulteração (libnesec) | Identificado | Mata o processo ~58s após attach do Frida; função de kill e nível de detecção mapeados |
| libxt_a64.so | Identificado | SDK de hooking PLT carregado em namespace isolado do linker — invisível para Frida/maps |
| libNetHTProtect.so | Analisado | SDK de integridade de rede; fingerprint MD5; serialização estilo protobuf |
| Dump IL2CPP | Parcial | Lista de assemblies recuperada; RVA de certval do BestHTTP mapeado |
got-re/
├── README.md ← este arquivo
├── FLOW.md ← fluxo de dados completo descoberto
├── SETUP.md ← guia de configuração do ambiente
├── TOOLS_AND_COMMANDS.md ← referência de todos os comandos e ferramentas
├── CLAUDE.md ← contexto para sessões assistidas por IA
├── captures/
│ ├── battle.pcap ← amostra de tráfego do gateway (sessão 1)
│ └── battle2.pcap ← amostra de tráfego do gateway (sessão 2, mais rica)
└── scripts/
├── frida/
│ ├── certval_hook.js ← observar validação de certificado do BestHTTP
│ ├── button_hook.js ← hookear eventos de botão da UI Unity
│ ├── ssl_unpin.js ← remoção de pinning SSL (camadas Java + IL2CPP)
│ └── nesec_bypass.js ← neutralizar anti-adulteração da libnesec
├── analysis/
│ ├── analyze_gateway.py ← analisar e decodificar capturas pcap da porta 30101
│ ├── analyze_mitm.py ← ler e filtrar arquivos .mitm do mitmproxy
│ ├── decode_1d_v2.py ← decodificação profunda de quadros de sincronização de estado 0x1d
│ └── deep_analysis.py ← coordenadas, fragmentos JSON, opcode 0x59
└── proxy/
├── mitm_setup.py ← instalar CA do mitmproxy no dispositivo
├── run_ssl_unpin.py ← executor combinado mitmdump + Frida SSL unpin
└── run_button_hook.py ← executor combinado mitmdump + Frida button hook
# 1. Iniciar o frida-server no dispositivo
adb shell "su -c '/data/local/tmp/fs17 -l 0.0.0.0:37555 &'"
adb forward tcp:37555 tcp:37555
# 2. Capturar tráfego do gateway
adb shell "su -c 'tcpdump -i any -w /sdcard/session.pcap port 30101'"
# ... jogar ...
adb pull /sdcard/session.pcap captures/
# 3. Analisar
python scripts/analysis/analyze_gateway.py captures/session.pcap
Consulte FLOW.md para o mapa completo do protocolo e perguntas em aberto.
Consulte SETUP.md para configurar seu ambiente.
Se você possui análise com Ghidra, saída do il2cppdumper ou capturas pcap adicionais — PRs e issues são bem-vindos.