
دراسة تعليمية في الهندسة العكسية للعبة Android تستخدم Unity/IL2CPP. توثق فك تشفير بروتوكول البوابة، تحليل SDK الأصلي لمكافحة التلاعب، تجاوز تثبيت SSL، وتقنيات التحليل الديناميكي القائمة على Frida.
مشروع تعليمي. الهدف هو فهم كيفية تواصل لعبة Unity/IL2CPP حديثة على Android، وكيفية عمل حزم SDK الحماية الأصلية، وكيفية تطبيق تقنيات التحليل الثابت والديناميكي على ملف APK حقيقي.
هذا المستودع يوثق دراسة مستمرة للهندسة العكسية لتطبيق com.run.tower.defense (Game of Thrones: Conquest)، وهي لعبة Unity مع بيئة تشغيل IL2CPP، وعدة حزم SDK حماية أصلية، وبروتوكول بوابة ثنائي مخصص.
لا غش، ولا استغلال، ولا تعديل لبيانات اللعبة الحية. التركيز فقط على فهم البنية الداخلية.
| المجال | الحالة | النتيجة الرئيسية |
|---|---|---|
| بروتوكول البوابة (المنفذ 30101) | مفكوك | ثنائي مخصص، تأطير uint16_BE، جسم متغير الطول، لا TLS |
| أكواد التشغيل (Opcodes) | مرسومة | 0x55 مصافحة، 0x5d إجراءات اللعبة، 0x1d مزامنة الحالة، 0x15 نبض القلب، 0x59 تأكيد العميل |
| ترميز الإحداثيات | مفكوك | 4 أحرف شبيهة بـASCII85 ← uint32 (x=المملكة، y=الموقع) |
| واجهة تحليلات API | ملتقطة | logagent-wf.centurygame.com — أحداث JSON، غير مرتبطة بالشهادة |
| تثبيت SSL | تم تجاوزه جزئياً | تم تجاوز طبقة Java (OkHttp + TrustManager)؛ تم تحديد طبقة BestHTTP الأصلية |
| منع العبث (libnesec) | تم تحديده | يقتل العملية بعد حوالي 58 ثانية من ربط Frida؛ تم ربط دالة القتل ومستوى الكشف |
| libxt_a64.so | تم تحديده | حزمة SDK لخطف PLT محملة في مساحة اسم linker معزولة — غير مرئية لـ Frida/خرائط الذاكرة |
| libNetHTProtect.so | تم تحليله | حزمة SDK لسلامة الشبكة؛ بصمة MD5؛ تسلسل مشابه للـprotobuf |
| تفريغ IL2CPP | جزئي | تم استرداد قائمة التجميعات؛ تم تحديد RVA لقيمة شهادة BestHTTP |
got-re/
├── README.md ← هذا الملف
├── FLOW.md ← خريطة تدفق البيانات الكاملة المكتشفة
├── SETUP.md ← دليل إعداد البيئة
├── TOOLS_AND_COMMANDS.md ← مرجع لجميع الأوامر والأدوات
├── CLAUDE.md ← سياق للجلسات المدعومة بالذكاء الاصطناعي
├── captures/
│ ├── battle.pcap ← نموذج حركة بوابة (جلسة 1)
│ └── battle2.pcap ← نموذج حركة بوابة (جلسة 2، أغنى)
└── scripts/
├── frida/
│ ├── certval_hook.js ← مراقبة التحقق من شهادة BestHTTP
│ ├── button_hook.js ← ربط أحداث أزرار واجهة Unity
│ ├── ssl_unpin.js ← إزالة تثبيت SSL (طبقات Java وIL2CPP)
│ └── nesec_bypass.js ← تحييد منع العبث في libnesec
├── analysis/
│ ├── analyze_gateway.py ← تحليل وفك ترميز التقاط المنفذ 30101
│ ├── analyze_mitm.py ← قراءة وتصفية ملفات mitmproxy .mitm
│ ├── decode_1d_v2.py ← فك ترميز عميق لإطارات مزامنة الحالة 0x1d
│ └── deep_analysis.py ← إحداثيات، أجزاء JSON، كود التشغيل 0x59
└── proxy/
├── mitm_setup.py ← تثبيت شهادة mitmproxy على الجهاز
├── run_ssl_unpin.py ← مشغل مشترك لـ mitmdump + Frida لإزالة تثبيت SSL
└── run_button_hook.py ← مشغل مشترك لـ mitmdump + 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
انظر FLOW.md لخريطة البروتوكول الكاملة والأسئلة المفتوحة.
انظر SETUP.md لتجهيز بيئتك.
إذا كان لديك تحليل Ghidra، أو مخرجات il2cppdumper، أو ملفات pcap إضافية — فإن طلبات السحب (PRs) والقضايا (issues) مرحب بها.