
Étude de rétro-ingénierie éducative d'un jeu Android Unity/IL2CPP. Documente le décodage du protocole de passerelle, l'analyse du SDK natif anti-altération, le contournement du SSL pinning et les techniques d'analyse dynamique basées sur Frida.
Projet éducatif. Le but est de comprendre comment un jeu Android moderne Unity/IL2CPP communique, comment ses SDK de protection natifs fonctionnent, et comment appliquer des techniques d'analyse statique et dynamique à un APK réel.
Ce dépôt documente une étude de rétro-ingénierie en cours de com.run.tower.defense (Game of Thrones: Conquest), un jeu Unity avec moteur d'exécution IL2CPP, plusieurs SDK de protection natifs et un protocole de passerelle binaire personnalisé.
Pas de triche, pas d'exploitation, pas de modification des données de jeu en direct. L'accent est mis uniquement sur la compréhension de l'architecture interne.
| Domaine | Statut | Découverte clé |
|---|---|---|
| Protocole de passerelle (port 30101) | Décodé | Binaire personnalisé, tramage uint16_BE, corps varint, pas de TLS |
| Opcodes | Cartographiés | 0x55 handshake, 0x5d actions de jeu, 0x1d synchronisation d'état, 0x15 battement de cœur, 0x59 accusé de réception client |
| Encodage des coordonnées | Décodé | 4 caractères de type ASCII85 → uint32 (x=royaume, y=position) |
| API d'analytique | Capturé | logagent-wf.centurygame.com — événements JSON, non épinglé |
| Épinglage SSL | Contourné partiellement | Couche Java contournée (OkHttp + TrustManager) ; couche native BestHTTP identifiée |
| Anti-altération (libnesec) | Identifié | Tue le processus ~58s après l'attachement de Frida ; fonction de mise à mort et niveau de détection cartographiés |
| libxt_a64.so | Identifié | SDK de hooking PLT chargé dans un espace de noms de linker isolé — invisible pour Frida/maps |
| libNetHTProtect.so | Analysé | SDK d'intégrité réseau ; empreinte MD5 ; sérialisation de type protobuf |
| Vidage IL2CPP | Partiel | Liste d'assemblages récupérée ; RVA certval BestHTTP cartographiée |
got-re/
├── README.md ← ce fichier
├── FLOW.md ← flux de données découvert complet
├── SETUP.md ← guide de configuration de l'environnement
├── TOOLS_AND_COMMANDS.md ← référence de toutes les commandes et outils
├── CLAUDE.md ← contexte pour les sessions assistées par IA
├── captures/
│ ├── battle.pcap ← échantillon de trafic de passerelle (session 1)
│ └── battle2.pcap ← échantillon de trafic de passerelle (session 2, plus riche)
└── scripts/
├── frida/
│ ├── certval_hook.js ← observe la validation du certificat BestHTTP
│ ├── button_hook.js ← accroche les événements de boutons de l'interface utilisateur Unity
│ ├── ssl_unpin.js ← désépinglage SSL (couches Java + IL2CPP)
│ └── nesec_bypass.js ← neutralise l'anti-altération libnesec
├── analysis/
│ ├── analyze_gateway.py ← analyse et décode les captures pcap du port 30101
│ ├── analyze_mitm.py ← lit et filtre les fichiers .mitm de mitmproxy
│ ├── decode_1d_v2.py ← décodage approfondi des trames de synchronisation d'état 0x1d
│ └── deep_analysis.py ← coordonnées, fragments JSON, opcode 0x59
└── proxy/
├── mitm_setup.py ← installe l'AC mitmproxy sur l'appareil
├── run_ssl_unpin.py ← exécuteur combiné mitmdump + désépinglage SSL Frida
└── run_button_hook.py ← exécuteur combiné mitmdump + accrochage de bouton Frida
# 1. Start frida-server on device
adb shell "su -c '/data/local/tmp/fs17 -l 0.0.0.0:37555 &'"
adb forward tcp:37555 tcp:37555
# 2. Capture gateway traffic
adb shell "su -c 'tcpdump -i any -w /sdcard/session.pcap port 30101'"
# ... play the game ...
adb pull /sdcard/session.pcap captures/
# 3. Analyze it
python scripts/analysis/analyze_gateway.py captures/session.pcap
Voir FLOW.md pour la carte complète du protocole et les questions ouvertes.
Voir SETUP.md pour configurer votre environnement.
Si vous avez des analyses Ghidra, des résultats d'il2cppdumper ou des captures pcap supplémentaires — les PRs et les issues sont les bienvenus.