العودة
مطوّر ImHex يشرح الهندسة العكسية لصيغة ملف مجهولة
SiTech AI Team3 წთ. საკითხავი

مطوّر ImHex يشرح الهندسة العكسية لصيغة ملف مجهولة

نشر مطوّر محرّر الـhex مفتوح المصدر ImHex دليلًا للهندسة العكسية للصيغ الثنائية المجهولة، مع ملف حفظ لعبة FEZ كمثال، من البايتات الخام إلى تعريف كامل. ويختم المقال بوصفة عامة لأي صيغة مجهولة.

نشر WerWolv، مطوّر محرّر الـhex مفتوح المصدر ImHex، دليلًا خطوة بخطوة لهندسة عكسية لصيغة ملف ثنائية غير معروفة. والمثال هو ملف الحفظ في لعبة FEZ من عام 2012: من البايتات الخام إلى تعريف كامل بلغة Pattern الخاصة بـImHex. وImHex مجاني ومفتوح المصدر ويعمل على أي نظام سطح مكتب ويتوفر أيضًا من المتصفح.

من فك الترجمة إلى الدالة الصحيحة

بيانات حفظ FEZ ليست مضغوطة ولا مشفّرة، ولا تحمل توقيعًا مميزًا، فلا شيء يعرّفها من النظرة الأولى. ولأن اللعبة مكتوبة بلغة C#، تستطيع أدوات مثل JetBrains Rider إعادة الملفات الثنائية إلى ما يشبه الكود المصدري الأصلي. وكانت أبرز التجميعات FEZ.exe وFezEngine.dll وCommon.dll وContentSerialization.dll وEasyStorage.dll. وفي الصنف PCSaveDevice يُبنى اسم الملف من "SaveSlot" ورقم فهرس، وتملأ الدالة Save() مخزنًا بحجم 40,960 بايتًا (0xA000): أولًا الوقت الحالي بصيغة FILETIME من ويندوز، ثم بيانات الحفظ، مع حشو الملفات الأقصر بالأصفار ورفع استثناء إذا كانت أكبر. وتتبّع السلسلة حتى SaveFileOperations.Write يكشف كل الحقول: رقم إصدار يشترط القارئ أن يساوي 6، وطوابع زمنية، وأعلام New Game Plus. ويشير الكاتب إلى أن بعض الميزات المستخدمة لا توجد إلا في نسخة Nightly وليس في الإصدار الرسمي، وينبّه إلى أن المقال يحوي حرقًا لأحداث FEZ.

بناء الـpattern في ImHex

في لغة Pattern يضع الكاتب بنية struct عند الإزاحة صفر، ويضيف أسماءً مستعارة للأنواع ليقترب الكود من التنفيذ الحقيقي، ويستورد النوع FILETIME من المكتبة القياسية ليظهر الطابع الزمني كتاريخ مقروء. تبيّن أن السلاسل النصية تحمل بادئة طول بترميز سبع بتات؛ ونفّذ ذلك بحلقة تقرأ البايتات حتى يختفي بت الاستمرار، وأضاف سِمات format وtransform لعرض القيمة في الواجهة. ويمثَّل الكائن بمغلّف nullable يخزّن راية منطقية قبل قيمة اختيارية، والقوائم بمصفوفات ذات بادئة عدد، أما الـenums فتنتقل من C# شبه دون تغيير. وفي نهاية المقال يكون كل بايت في الملف، عدا الحشو الأخير، قد فُكّ ترميزه، ويمكن استعراض القيم بل وتعديلها مباشرة من الواجهة.

وصفة عامة للصيغ المجهولة

في الختام يعمّم الكاتب سير العمل: أولًا تحقّقوا مما إذا كانت الصيغة معروفة أصلًا — يساعد في ذلك كشف التوقيع في ImHex وأدوات مثل binwalk، وقد تتوفر محلّلات جاهزة للصيغ الموثّقة. ثم ابحثوا عن الكود الذي يقرأ الملف أو يولّده: فكّوا الترجمة بأداة تناسب اللغة — ‏Rider لـ.NET، وGhidra أو IDA أو Binary Ninja للكود الأصلي، وRecaf للغات JVM — باحثين عن نداءات إدخال/إخراج الملفات أو سلاسل تحمل اسم الملف. بعدها حدّدوا الوحدات الأساسية: الأعداد الصحيحة والقيم المنطقية والسلاسل وبُنى البيانات، واكتبوا ملف pattern يوثّق النتائج ويتحقق منها.

لا كل برنامج سيكون بسهولة FEZ، كما يعترف الكاتب، لكن المنهج يبقى واحدًا. وقد نُشر الـpattern الكامل مع المقال، والأسئلة مرحّب بها على خادم Discord الخاص بـImHex.

SSiTech

SiTech — تطوير ويب مدعوم بالذكاء الاصطناعي

نبني مواقع سريعة وعصرية وندمج الذكاء الاصطناعي في سير عمل الشركات. لديك مشروع أو سؤال؟ يسعدنا مساعدتك.