مُفكِّك برمجيات يستعيد الخوارزمية، لا الشيفرة وحدها
كثيرًا ما تحتاج المؤسسات إلى فهم برمجيات لا تملك شيفرتها المصدرية: نظام قديم، أو مكوّن مُشترى، أو ملف وصل ويبدو مريبًا. توجد أدوات بالفعل تعيد شيفرة الآلة إلى خطوات مقروءة. ويحاول RetDec Imortek خطوة أبعد: أن يسمّي ما هذه الخطوات — هذا الجزء معيار التعمية المتقدّم (AES)، وهذا الجزء فرز، وهذا الجزء كيفية حزم البيانات للإرسال.
المشروع المنبع RetDec v5.0 خامل منذ 2022. ويظل واحدًا من المفكِّكات المفتوحة القليلة ذات واجهة أمامية عريضة فعلًا — وهذا الاتساع يستحق أن يبقى حيًّا.
ما هذا، في دقيقة واحدة
تُشحن البرمجيات في صورة تقرأها الآلة ولا يقرأها الإنسان. وحين لا توجد شيفرة مصدرية — اختفى المورّد، أو لم يشملها العقد يومًا، أو وصل الملف من جهة لا تثق بها — لا يستطيع أحد أن يقول ما يفعله البرنامج فعلًا. وفحصه يدويًّا يعني قراءة تعليمات الآلة واحدة تلو الأخرى.
يفكّك الملف المُصرَّف ويعيد بناء شيفرة C منه: كل الملفات الثنائية الـ216 في مجموعة الاختبار تعود شيفرة C قابلة للبناء. ثم يطارد المعنى — أي تعمية، وأي فرز، وأي تعدّد خيوط، وأي صيغة ملف — ويبلّغ عن نسبة نجاح ذلك، بما في ذلك الحالة التي يكاد فيها لا ينجح.
فرق الأمن التي تفكّك البرمجيات الخبيثة وتحتاج إلى الجواب قبل أن تحتاج إلى الشيفرة. والشركات التي تشغّل برمجيات لا يملك أحد مصدرها وتحتاج إلى وصف لها قبل أن يُعاد بناء أي شيء أو استبداله بأمان. وكل من علِق بصيغة ملف لم تُوثَّق قط — سجلات قديمة، أو آلة لا تكلّم إلا برمجيتها الخاصة.
فاكّ الترميز الفعلي، مُترجَمًا إلى WebAssembly
كل ما فوق هذا جولة مكتوبة سلفًا في سلّم التجريد. وهذه هي الدرجة الأولى تعمل حقيقةً: Capstone — مُفكِّك التجميع نفسه الذي يربطه بناء RetDec الأصلي — يفكّ ترميز بايتات تلصقها أنت.
capstone — WebAssembly
791 كيلوبايت (KB) لأن فاكّ ترميز x86 الحقيقي يحمل مجموعة التعليمات كاملة — كل ترميز وبادئة وامتداد. هذا هو الحجم الصادق للشيء.
deps/capstone.
صيغ أصلية وشيفرة بايت وصيغ ناشئة
المخرَج يعتمد على الصيغة، لأن ادّعاء أن كل شيء يُفكَّك إلى C لا يفيد أحدًا. تتلقّى الواجهة الأمامية ملفات ثنائية أصلية بصيغة التنفيذ والربط (ELF)، والتنفيذي المحمول (PE)، وMach-O؛ وشيفرة بايت، منها ملفات أصناف آلة جافا الافتراضية (JVM)، وتنفيذي دالفيك (DEX)، واللغة الوسيطة المشتركة (CIL)؛ وأهدافًا أحدث مثل تنفيذ الخيوط المتوازي (PTX) من CUDA.
ELF · PE · Mach-O
ينتج شيفرة C وهمية، إضافة إلى الطبقة الدلالية التي هي سبب التفريع.
Python · Lua · JVM · DEX · CIL
شيفرة بايت Python وLua تعود بلغتيهما؛ ومسارات الشيفرة المُدارة تُخرِج ناتجًا من عائلة Java أو عائلة C#.
WebAssembly · CUDA PTX
يتحوّل WebAssembly إلى صيغة WebAssembly النصية (WAT). ويُعامَل PTX مُدخَلًا من الدرجة الأولى لا فكرةً لاحقة.
شاهد دالّة تصعد سلّم التجريد
اختر دالّة ثنائية ومرّرها خطوة خطوة في الخط: بايتات خام، ثم فكّ تجميع، ثم تمثيل وسيط مرفوع، ثم شيفرة C وهمية، وأخيرًا الحكم الدلالي — الخوارزمية باسمها، مع الدليل الذي حدّدها.
retdec — استخراج المواصفة
الحكم الدلالي
الدليل
مع تجريد الرموز، على الاستعادة أن تعمل من البنية وحدها — الثوابت، وعدد الجولات، وشكل تدفّق التحكّم. هذه هي الحالة الصعبة، وهي التي يشير إليها مقياس F1 المقيس البالغ 0.056.
ست عائلات من البِنى
حاويات مكتبة القوالب القياسية (STL) وبنى زمن تشغيل C++ — شكل std::vector يعاود الظهور من نمط الحجز.
AES، وعائلة خوارزمية التجزئة الآمنة (SHA)، وChaCha20، وريفست–شامير–أدلمان (RSA)، وأوليّات المنحنيات الإهليلجية، تُعرَّف بالثوابت وبنية الجولات.
introsort، والفرز بالدمج، والبحث الثنائي — بما في ذلك تبديل حدّ العمق الذي يفضح introsort.
خوارزميات الرسوم، إضافة إلى أنماط الاجتياز بالبحث بالعرض أولًا (BFS) والبحث بالعمق أولًا (DFS).
std::thread، وpthreads، وOpenMP، وThreading Building Blocks (TBB)، والذرّيات الخام.
Protobuf، وFlatBuffers، وMessagePack، وترميز كائنات جافاسكربت (JSON)، وتأطير لغة الترميز الموسّعة (XML).
216 ملفًّا ثنائيًّا، والرقم المؤلم
كل الملفات الثنائية ELF الـ216 في مجموعة الاختبار تنتج شيفرة C قابلة للبناء مع
--buildable، وهو مفعَّل افتراضيًّا. أما استعادة الخوارزميات فقصة أخرى، والطريقة الصادقة للإبلاغ عنها هي وضع الرقمين جنبًا إلى جنب.
| المقياس | النتيجة | الشرط |
|---|---|---|
| مخرَج C قابل للبناء | 216 / 216 | --buildable، مفعَّل افتراضيًّا |
| F1 لاستعادة الخوارزميات | 0.056 | بلا مساعدة الأسماء، فاصل ثقة 95% يبلغ 0.034–0.083 |
| F1 لاستعادة الخوارزميات | 1.000 | بمساعدة الأسماء، ملفات ثنائية ذات رموز |
إعادة ترجمة ملف .c الافتراضي | لا | لا هذا التفريع ولا RetDec الأصلي |
اختياري، دون اتصال، وخلف بوابة
يجري التنقيح عبر llama.cpp بنماذج GGUF، دون اتصال تمامًا، فقط حين يكون
RETDEC_NEURAL_REFINE=1 ويُعطى مسار نموذج. وهو مُطفأ افتراضيًّا ولا يحلّ محلّ الخط الأساس أبدًا.
- بوابة ترجمة. على المخرَج المنقَّح أن يجتاز
gcc -fsyntax-onlyقبل أن يُقبل. - تحقّق بنيوي. يجب أن يظل التنقيح مطابقًا للبنية المرفوعة.
- الخط الأساس الحتمي محفوظ. يبقى مخرَج المُفكِّك غير المنقَّح هو الأثر القابل للتدقيق. وإن احتجت إلى الدفاع عن نتيجة، فعنه تدافع.
- لا شبكة. استدلال GGUF محلي. لا يغادر الجهازَ أي شيء عن ملفك الثنائي.
$ export RETDEC_NEURAL_REFINE=1 $ export RETDEC_NEURAL_MODEL=/models/qwen-coder.gguf $ retdec-decompiler --buildable ./target.elf
يكتشف ما يفعله البرنامج حين تختفي الشيفرة المصدرية
تُشحَن البرمجيات في صورة تقرؤها الآلة ولا يقرؤها الإنسان. وهذا يفكّكها مجدّدًا ويخبرك، بكلام واضح، بما يفعله البرنامج فعلًا.
فرق الأمن التي تفكّك البرمجيات الخبيثة
بدل صفحات من شيفرة غير مقروءة، تحصل على الجواب: هذا الجزء يشوّش البيانات، وهذا هو كيف يتّصل بخادمه، وهذا هو كيف يختبئ. وهذا ما يحتاجه المحلّل أولًا.
شركات لديها برمجيات قديمة بلا شيفرة مصدرية
النظام ما زال يدير العمل، ومن كتبه رحل منذ سنوات. وهذا يستعيد وصفًا لما يفعله، وهو ما تحتاجه قبل أن يستطيع أحد إعادة بنائه أو استبداله بأمان.
كل من علق مع صيغة ملف لم يوثّقها أحد
سجلات قديمة، أو آلة لا تكلّم إلا برمجياتها، أو ملف تصدير من منافس. وهذا يستنتج البنية كي تستطيع برمجياتك أنت قراءته.
واجهة Qt 6 الرسومية، أو بلا واجهة رسومية إطلاقًا
عروض شيفرة متزامنة عبر C والتجميع والتمثيل الوسيط ورسوم تدفّق التحكّم، مع تنقّل بين الدوال، وفحص للسلاسل، ومتصفّح للملف الثنائي، ولوحة مساعد. ويُسقط الوضع بلا رأس كل اعتمادية للواجهة الرسومية، فيعمل البناء نفسه في التكامل المستمر.
رخصة جنو أفيرو العمومية العامة (AGPL-3.0+) للاستخدام مفتوح المصدر، أو ترخيص تجاري للنشر الاحتكاري. حقوق النشر Odin Loch، متاجرًا باسم Imortek، 2025–2026.
قابل للشحن عند v2.0.21. وبوابات التكامل المستمر تعكس معايير التطوير لا معايير نضج الإنتاج — هذا ما يقوله المشروع نفسه، لا استنتاجًا.