Grand Larceny Auto | STY IT Labs
STY IT Labs · TryHackMe · Medium

Grand Larceny Auto

“Los Vanto’s Dumbest Crime Sim” — لعبة GTA-parody مبنية بـ Godot، فيها Safehouse Vault محدش قدر يفتحه. الحل مش لعب اللعبة — الحل تحليل ثابت لملف .NET assembly، فك obfuscation، واصطياد ثغرة منطقية بين شرط الفتح ومفتاح التشفير.

Medium 45 – 90 دقيقة سؤال واحد Godot / .NET 8

عن اللاب

الثغرة: 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)