
Учебное исследование обратной разработки игры на Unity/IL2CPP для Android. Документирует декодирование шлюзового протокола, анализ нативного SDK для защиты от взлома, обход SSL-пиннинга и методы динамического анализа на основе Frida.
Образовательный проект. Цель — понять, как современная игра Android на Unity/IL2CPP общается, как работают её нативные SDK защиты и как применять методы статического и динамического анализа к реальному APK.
Этот репозиторий документирует текущее исследование обратной разработки com.run.tower.defense (Game of Thrones: Conquest), игры на Unity с рантаймом IL2CPP, несколькими нативными SDK защиты и пользовательским бинарным шлюзовым протоколом.
Без читерства, эксплуатации или модификации реальных игровых данных. Внимание сосредоточено исключительно на понимании внутренней архитектуры.
| Область | Статус | Ключевая находка |
|---|---|---|
| Шлюзовой протокол (порт 30101) | Декодирован | Пользовательский бинарный, обрамление uint16_BE, тело varint, без TLS |
| Опкоды | Сопоставлены | 0x55 рукопожатие, 0x5d игровые действия, 0x1d синхронизация состояния, 0x15 heartbeat, 0x59 подтверждение клиента |
| Кодирование координат | Расшифровано | 4-символьное, похожее на ASCII85 → uint32 (x=королевство, y=позиция) |
| API аналитики | Захвачено | logagent-wf.centurygame.com — JSON события, без пининга SSL |
| Привязка SSL (SSL pinning) | Частично обойдено | Java слой обойдён (OkHttp + TrustManager); идентифицирован нативный слой BestHTTP |
| Анти-модификация (libnesec) | Идентифицировано | Убивает процесс через ~58 секунд после присоединения Frida; функция уничтожения и уровень обнаружения сопоставлены |
| libxt_a64.so | Идентифицирована | SDK перехвата PLT, загружена в изолированное пространство имён компоновщика — невидима для Frida/maps |
| libNetHTProtect.so | Проанализирована | SDK целостности сети; отпечатки MD5; сериализация в стиле protobuf |
| Дамп IL2CPP | Частичный | Список сборок восстановлен; RVA проверки сертификатов BestHTTP сопоставлен |
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 и issues.