
Lehrreiche Reverse-Engineering-Studie eines Unity/IL2CPP-Android-Spiels. Dokumentiert Gateway-Protokoll-Dekodierung, native Anti-Tampering-SDK-Analyse, SSL-Pinning-Umgehung und Frida-basierte dynamische Analysetechniken.
Bildungsprojekt. Ziel ist es zu verstehen, wie ein modernes Unity/IL2CPP-Android-Spiel kommuniziert, wie seine nativen Schutz-SDKs funktionieren und wie man statische + dynamische Analysetechniken auf eine reale APK anwendet.
Dieses Repository dokumentiert eine laufende Reverse-Engineering-Studie von com.run.tower.defense (Game of Thrones: Conquest), einem Unity-Spiel mit IL2CPP-Laufzeit, mehreren nativen Schutz-SDKs und einem benutzerdefinierten binären Gateway-Protokoll.
Kein Cheating, keine Ausnutzung, keine Modifikation von Live-Spieldaten. Der Fokus liegt ausschließlich auf dem Verständnis der internen Architektur.
| Bereich | Status | Wichtigster Befund |
|---|---|---|
| Gateway-Protokoll (Port 30101) | Dekodiert | Benutzerdefiniertes Binärformat, uint16_BE-Rahmung, Varint-Body, kein TLS |
| Opcodes | Kartiert | 0x55 Handshake, 0x5d Spielaktionen, 0x1d Zustandssync, 0x15 Heartbeat, 0x59 Client-ACK |
| Koordinatenkodierung | Dekodiert | ASCII85-ähnlich 4 Zeichen → uint32 (x=Königreich, y=Position) |
| Analytics-API | Erfasst | logagent-wf.centurygame.com — JSON-Ereignisse, nicht gepinnt |
| SSL-Pinning | Teilweise umgangen | Java-Ebene umgangen (OkHttp + TrustManager); native BestHTTP-Ebene identifiziert |
| Anti-Tampering (libnesec) | Identifiziert | Beendet Prozess ~58s nach Frida-Attach; Kill-Funktion und Erkennungsstufe kartiert |
| libxt_a64.so | Identifiziert | PLT-Hooking-SDK geladen in isoliertem Linker-Namensraum — unsichtbar für Frida/maps |
| libNetHTProtect.so | Analysiert | Netzwerkintegritäts-SDK; MD5-Fingerprinting; protobuf-ähnliche Serialisierung |
| IL2CPP-Dump | Teilweise | Assembly-Liste wiederhergestellt; BestHTTP certval RVA kartiert |
got-re/
├── README.md ← diese Datei
├── FLOW.md ← vollständiger entdeckter Datenfluss
├── SETUP.md ← Umgebungseinrichtungsanleitung
├── TOOLS_AND_COMMANDS.md ← alle Befehle und Werkzeugreferenz
├── CLAUDE.md ← Kontext für KI-gestützte Sitzungen
├── captures/
│ ├── battle.pcap ← Gateway-Datenverkehrsbeispiel (Sitzung 1)
│ └── battle2.pcap ← Gateway-Datenverkehrsbeispiel (Sitzung 2, umfangreicher)
└── scripts/
├── frida/
│ ├── certval_hook.js ← BestHTTP-Zertifikatsvalidierung beobachten
│ ├── button_hook.js ← Unity-UI-Button-Ereignisse hooken
│ ├── ssl_unpin.js ← SSL-Unpinning (Java + IL2CPP-Ebenen)
│ └── nesec_bypass.js ← libnesec-Anti-Tampering neutralisieren
├── analysis/
│ ├── analyze_gateway.py ← Port-30101-Pcap-Aufnahmen parsen und dekodieren
│ ├── analyze_mitm.py ← mitmproxy-.mitm-Dateien lesen und filtern
│ ├── decode_1d_v2.py ← tiefe Dekodierung von 0x1d-Zustandssync-Frames
│ └── deep_analysis.py ← Koordinaten, JSON-Fragmente, Opcode 0x59
└── proxy/
├── mitm_setup.py ← mitmproxy-CA auf dem Gerät installieren
├── run_ssl_unpin.py ← mitmdump + Frida SSL-Unpinning kombinierter Ausführer
└── run_button_hook.py ← mitmdump + Frida-Button-Hook kombinierter Ausführer
# 1. Frida-Server auf dem Gerät starten
adb shell "su -c '/data/local/tmp/fs17 -l 0.0.0.0:37555 &'"
adb forward tcp:37555 tcp:37555
# 2. Gateway-Datenverkehr aufzeichnen
adb shell "su -c 'tcpdump -i any -w /sdcard/session.pcap port 30101'"
# ... das Spiel spielen ...
adb pull /sdcard/session.pcap captures/
# 3. Analysieren
python scripts/analysis/analyze_gateway.py captures/session.pcap
Siehe FLOW.md für die vollständige Protokollkarte und offene Fragen.
Siehe SETUP.md zum Einrichten Ihrer Umgebung.
Wenn Sie Ghidra-Analysen, il2cppdumper-Ausgaben oder zusätzliche Pcap-Aufnahmen haben — PRs und Issues sind willkommen.