
Unity/IL2CPP Androidゲームの教育的リバースエンジニアリング研究。ゲートウェイプロトコルデコード、ネイティブ改ざん防止SDK解析、SSLピンバイパス、およびFridaベースの動的解析手法を文書化する。
教育プロジェクト。 目標は、現代の Unity/IL2CPP Android ゲームがどのように通信するか、そのネイティブ保護 SDK がどのように動作するか、そして実際の APK に対して静的解析+動的解析技術をどのように適用するかを理解することです。
このリポジトリは、com.run.tower.defense (Game of Thrones: Conquest) の進行中のリバースエンジニアリング調査を文書化しています。これは、IL2CPP ランタイム、複数のネイティブ保護 SDK、およびカスタムバイナリゲートウェイプロトコルを備えた Unity ゲームです。
チート行為、悪用、ライブゲームデータの変更は一切行いません。焦点は純粋に内部アーキテクチャの理解にあります。
| 領域 | ステータス | 主な発見 |
|---|---|---|
| ゲートウェイプロトコル (port 30101) | デコード済み | カスタムバイナリ、uint16_BE フレーミング、varint ボディ、TLS なし |
| オペコード | マッピング済み | 0x55 ハンドシェイク、0x5d ゲームアクション、0x1d 状態同期、0x15 ハートビート、0x59 クライアント ACK |
| 座標エンコーディング | デコード済み | ASCII85 類似の4文字 → uint32 (x=王国, y=位置) |
| 分析 API | キャプチャ済み | logagent-wf.centurygame.com — JSON イベント、ピン留めなし |
| SSL ピンニング | 部分的にバイパス済み | Java レイヤーはバイパス済み (OkHttp + TrustManager); ネイティブ BestHTTP レイヤーを特定 |
| 改ざん防止 (libnesec) | 特定済み | Frida アタッチ後約58秒でプロセスを強制終了; 強制終了関数と検出レベルをマッピング |
| libxt_a64.so | 特定済み | PLT フッキング SDK が分離リンカ名前空間にロード — Frida/maps から不可視 |
| libNetHTProtect.so | 分析済み | ネットワーク整合性 SDK; MD5 フィンガープリンティング; protobuf 形式のシリアライゼーション |
| IL2CPP dump | 部分的 | アセンブリリストを復元; BestHTTP certval RVA をマッピング |
got-re/
├── README.md ← this file
├── FLOW.md ← complete discovered data flow
├── SETUP.md ← environment setup guide
├── TOOLS_AND_COMMANDS.md ← all commands and tools reference
├── CLAUDE.md ← context for AI-assisted sessions
├── captures/
│ ├── battle.pcap ← gateway traffic sample (session 1)
│ └── battle2.pcap ← gateway traffic sample (session 2, richer)
└── scripts/
├── frida/
│ ├── certval_hook.js ← observe BestHTTP certificate validation
│ ├── button_hook.js ← hook Unity UI button events
│ ├── ssl_unpin.js ← SSL unpinning (Java + IL2CPP layers)
│ └── nesec_bypass.js ← neutralize libnesec anti-tampering
├── analysis/
│ ├── analyze_gateway.py ← parse and decode port 30101 pcap captures
│ ├── analyze_mitm.py ← read and filter mitmproxy .mitm files
│ ├── decode_1d_v2.py ← deep decode of 0x1d state-sync frames
│ └── deep_analysis.py ← coordinates, JSON fragments, opcode 0x59
└── proxy/
├── mitm_setup.py ← install mitmproxy CA on device
├── run_ssl_unpin.py ← mitmdump + Frida SSL unpin combined runner
└── run_button_hook.py ← mitmdump + Frida button hook combined runner
# 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
完全なプロトコルマップと未解決の質問については FLOW.md を参照してください。
環境をセットアップするには SETUP.md を参照してください。
Ghidra 解析、il2cppdumper の出力、または追加の pcap キャプチャをお持ちの場合は、PR や issue を歓迎します。