عن اللاب
الثغرة: Gate Check ≠ Crypto Key
شرط فتح الخزنة هو “6 نجوم أو أكتر” (<6 يرفض)، بس مفتاح فك التشفير بيتولّد من عدد النجوم الحالي بالظبط. المحتوى الأصلي اتشفّر بمفتاح مبني على 6 بالظبط — فلو تخطيت 6 نجوم هتفتح الخزنة لكن هتاخد بيانات عشوائية مش الـ flag الحقيقي.
اللعبة نفسها بسيطة: اسرق أقماع، “استعير” سيارات، ازعج الـ NPCs. الهدف الحقيقي هو Safehouse Vault اللي القصة بتقول محدش فتحه قبل كده. الملف GrandLarcenyAuto.pck حجمه 4KB بس — يعني كل المنطق الحقيقي جوه ملف .NET assembly واحد.
الروم بيقول إنك محتاج Windows — بس تقدر تحل اللاب كامل بتحليل ثابت من غير ما تشغّل اللعبة أصلاً.
مسار الحل التفصيلي
1
فك الضغط + ملاحظة .pck الصغيرة
لاحظ إن الملف حجمه 4KB بس، يعني المنطق جوه GrandLarcenyAuto.dll
2
Strings + Disassemble
دور على أسماء الكلاسات المرتبطة بالخزنة، بعدين استخدم monodis عشان تدمّج الـ IL كامل كنص
strings -n 6 | grep -i vaultmonodis
3
فهم منطق TryOpen()
الشرط: WantedStars < 6 يرفض. المفتاح: SHA256(Salt + WantedStars). فك التشفير: XOR(SealedBlob, key)
4
Harness بالـ Reflection
اعمل dotnet console app صغير، حمّل الـ DLL، اعمل PlayerState بـ WantedStars=6 بالظبط، ونادي SafehouseVault.TryOpen() مباشرة
Assembly.LoadFrom
مرجع الأوامر
| الأمر | الوصف |
|---|---|
| strings -n 6 GrandLarcenyAuto.dll | grep -iE “flag|vault” | البحث عن الأسماء المرتبطة بالخزنة |
| monodis GrandLarcenyAuto.dll > disasm.il | تفريغ الـ IL كامل كنص |
| dotnet new console -o runner | إنشاء مشروع C# صغير للـ harness |
| dotnet run | تشغيل الـ harness واستخراج الـ flag |
المهارات اللي هتكتسبها
.NET / IL Reverse Engineering
Cryptographic Logic Auditing
Reflection-Based Harness
Static Analysis (No Runtime)