Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
windbg-decompile-ext — إضافة WinDbg x64 تفكّك الدوال الحية وتستخدم نموذج LLM لإنتاج شبه كود متحقق منه. | Kitploit
أدوات/GitHubGitHub/kernullist/windbg-decompile-ext
التحليل الثابتالتحليل الديناميكي (عزل)تحليل الكودالهندسة العكسيةمصممي الأخطاءتحليل البرمجيات الخبيثةتحليل الملفات الثنائيةالتعلم والتعليمالهندسة العكسية بمساعدة الذكاء الاصطناعيتحليل البرامج الثابتةاستغلال الملفات الثنائية
11211منذ 2 أشهرتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
GitHub
kernullist/windbg-decompile-ext

windbg-decompile-ext

إضافة WinDbg x64 تفكّك الدوال الحية وتستخدم نموذج LLM لإنتاج شبه كود متحقق منه.

عرض المستودع

ملحق تفكيك Windbg عبر LLM

عارض التفكيك الأصلي

لقطة شاشة

هذا المشروع هو هيكل أساسي لملحق WinDbg لأنظمة Windows x64 يحل دالة بالاسم أو العنوان، ويعيد بناء عرض تدفق تحكم حتمي، ويطلب من LLM مباشرة من الملحق لإنتاج شبه كود.

البنية

  • src/extension: ملف DLL لملحق WinDbg وأمر !decomp.
  • src/shared: كود JSON والمحلل والبروتوكول والمدقق المشترك بين الملحق.
  • scripts: أدوات البناء ونسخ المورّدين.
  • third_party/dbgeng: نسخة اختيارية مضمّنة من dbgeng.h وdbgeng.lib.
  • third_party/zydis: شجرة مصادر Zydis المستقرة المضمّنة المستخدمة افتراضيًا عند وجودها.

النطاق الحالي

  • افتراضات خاصة بـ x64 فقط
  • تحليل الذاكرة الحية عبر DbgEng
  • تفكيك منظم قائم على Zydis لاستعادة مستقرة لرموز التعليمات والمعاملات
  • استعادة نطاق الدالة عبر مناطق الرموز، ومعلومات فك الترجمة، والطرق الاستدلالية
  • استعادة بنمط SSA-lite لوسائط السجلات الواردة، والمتغيرات المحلية في فتحات المكدس، ومرشحي الدمج، وشروط التفريع المعيارية
  • حقائق قيم IR منخفضة المستوى مع تلميحات تعريف-استخدام، وتعبيرات نسخ/ثوابت مقنّنة، وعلامات للتعريفات الميتة
  • حقائق حالة القيم على مستوى الكتلة لتعريفات الوصول المتقاربة live-in/live-out عبر السجلات والمتغيرات المحلية في المكدس
  • حقائق مناطق تدفق التحكم المدعومة بالمسيطرين للحلقات الطبيعية، ومرشحي if/else، ومرشحي switch، وبيانات استقراء الحلقة، وبيانات نطاق/افتراضي switch
  • حقائق ABI الخاصة بـ x64 للفتحات الظلية/المنزلية، وفروقات مؤشر المكدس، والتعرف على المقدمة/الخاتمة، واستدعاءات عدم الإرجاع، والاستدعاءات الذيلية، والـ thunks، ومرشحي أغلفة الاستيراد، ووسائط الاستدعاء المستعادة للسجلات/المكدس
  • استعادة وسائط Microsoft x64 الواعية بـ SIMD/FP من xmm0 إلى xmm3، مع حراسات لصيغة الصفر المتجهة لتجنب الوسائط الواردة الخاطئة
  • تلميحات استعادة الأنواع للقيم الشبيهة بالمؤشرات، والمتغيرات المحلية في المكدس، وإزاحات الحقول، ومصفوفات الفهرس المقيّس، والمقارنات الشبيهة بالتعدادات، واختبارات أعلام البت، ومرشحي الجداول الافتراضية
  • حقائق الأنماط الاصطلاحية والمكتبية لمساعدات الذاكرة/السلاسل، وكوكيز الأمان، وفحوصات المكدس، والمخصّصات، ومهيئات التجميع، وتحميلات العامة/الاستيراد النسبية إلى RIP
  • حقائق أهداف الاستدعاء للاستدعاءات المباشرة، والاستدعاءات غير المباشرة عبر السجلات/الذاكرة، ومرشحي الاستدعاء الافتراضي/إزاحة الجدول الافتراضي، ونوع الإرجاع، ونموذج المعاملات، والآثار الجانبية، وآثار الذاكرة، وتلميحات الملكية، والثقة
  • حقائق إرباك بنمط OLLVM لموزعات تسطيح تدفق التحكم، والحواف الدلالية المستعادة، والحواف الميتة للمسندات المعتمة، وأنماط استبدال التعليمات العددية
  • حقائق جاهزية إزالة الإرباك بالإضافة إلى التحكم عبر /deobf:on|off في ما إذا كانت حقائق الإرباك المستعادة قد توجه إعادة كتابة شبه-C
  • حقائق مخطط الأدلة التي تربط حقائق المحلل عالية الإشارة وPDB والسلوك المرصود بالتأسيس على مستوى التعليمات/الكتلة
  • تحفيز قائم على التنقيح أولاً مع هيكل شبه كود مولّد من المحلل، وملخصات واعية بالرسم البياني لمناطق CFG والشروط والكتل المهمة، واختيار الحقائق عالية الإشارة المرتبة، وأخذ عينات موزعة لمجموعات الحقائق الكبيرة

استخدام WinDbg

قم بتحميل الملحق من مخرجات البناء، ثم قم بتشغيل !decomp على رمز أو عنوان:```text .load C:\path\to\decomp.dll !decomp /doctor !decomp module!FunctionName !decomp 0x7ffb`12345678

root@kitploit:~
استخدم `/doctor` عندما يبدو الإعداد خاطئًا أو قبل تمكين مزوّد LLM:```text
!decomp /doctor
!decomp /doctor:net
  • /doctor لا يتطلب هدفًا ولا يستدعي المزوّد. بل يُبلغ عن مسار التكوين/حالة التحميل، وملخص المزوّد/النموذج/نقطة النهاية، ووجود المصادقة دون الأسرار، وإعدادات المهلة/الرمز/التقسيم، ودعم DML، وفئة الجلسة/المؤهل، ونوع المعالج، ومحاذير PDB.
  • يُقبل /doctor:net كطلب صريح للتحقق من الشبكة، لكنه يُبلغ حاليًا بأن فحص اتصال المزوّد (ping) يتم تخطيه. لا تقوم الإضافة بإجراء فحص شبكة من وضع doctor.
  • لا تتم طباعة القيم السرية مثل مفاتيح API، ورموز الوصول (bearer tokens)، ورموز التحديث (refresh tokens)، وسلاسل استعلام URL.

يمكن أن تكون الأهداف رموزًا عامة/خاصة، أو أسماء دوال مُصدَّرة، أو عناوين. إذا تم تحليل الهدف إلى عنوان داخل دالة، تحاول الإضافة استعادة نطاق الدالة الحاوية من الرموز، وبيانات unwind، واستدلالات تدفق التحكم. ضع علامات اقتباس حول الأهداف التي تحتوي على مسافات:```text !decomp "my module!Function With Spaces"

root@kitploit:~
مسار الأمر العادي يقوم بالتحليل المحلي، ويبني حقائق المحلل، ويستدعي اختياريًا نقطة نهاية LLM المكوّنة، ويتحقق من الاستجابة مقابل الأدلة المسترجعة، ويطبع كود C الزائف مع الثقة والتحذيرات وملاحظات عدم اليقين:```text
!decomp ntdll!RtlAllocateHeap
!decomp kernel32!Sleep
!decomp game.exe!CheckIntegrity

يتضمن الإخراج العادي، وbrief، وexplain تدفق تقدم مضغوط حتى بدون /verbose. تُظهر عمليات تشغيل LLM الطويلة اكتمال التحليل المحلي، وتقدّم الأجزاء، وإشعارات إعادة المحاولة، وبدء الدمج، والتحقق، وتلميح الإلغاء عبر Ctrl+Break. تعمل الأوضاع القابلة للقراءة آليًا مثل /view:json و/view:facts و/view:prompt و/view:data على إخفاء خطوط التقدم وروابط مساعد DML بحيث تستقبل البرامج النصية الحمولة المطلوبة فقط.

استخدم /view:* لاختيار ما تريد رؤيته. هذا يُبقي سطح الأوامر صغيرًا: خيار واحد يتحكم في جميع أوضاع الإخراج.```text !decomp /view:brief module!HotPath !decomp /view:explain module!BranchyFunction !decomp /view:json module!FunctionName !decomp /view:facts module!FunctionName !decomp /view:prompt module!FunctionName !decomp /view:data module!FunctionName !decomp /view:analyzer module!FunctionName !decomp /view:plan module!FunctionName

root@kitploit:~
- `brief` يطبع الهدف، والثقة، والملخص، وأول تحذير عدم يقين أو تحذير من المُتحقِّق.
- `explain` يضيف أقسام الأدلة، وتدفق التحكم، وتلميحات الأنواع، والسلوك الملاحَظ، وأهداف الاستدعاء.
- `json` يطبع JSON للطلب والاستجابة قابلًا للقراءة آليًا.
- `facts` يطبع حقائق المُحلِّل فقط ويعطّل مسار LLM.
- `prompt` يطبع موجّه النظام وموجّه المستخدم وحقائق الموجّه بالضبط. ويعطّل استدعاء LLM.
- `data` يطبع لقطة JSON ثابتة مخصّصة للأتمتة بأسلوب WinDbg JavaScript/NatVis.
- `analyzer` يعرض مسار الكود الزائف الحتمي الخاص بالمُحلِّل فقط دون استدعاء LLM.
- `plan` ينفّذ تحليلًا محليًا ويطبع خطة فحص مسبق دون استدعاء LLM أو تحديث ذاكرة التخزين المؤقت للنتائج. ويتضمن أعداد الأهداف/الوحدات/النطاقات، وتوفّر PDB، وسياسة الجلسة، والتقسيم التقديري، والأعداد ذات الصلة بحجم الموجّه، وتوصيات عملية.

استخدم `/verbose` عندما يبدو أن أمرًا ما عالقًا أو عندما تريد رؤية دفق التقدّم الكامل:```text
!decomp /verbose module!SlowFunction
!decomp /verbose /view:json module!SlowFunction
  • /verbose يطبع المراحل المحلية مثل تحليل الهدف، واستعادة نطاق الدوال، وقراءات البايت، وفك التجميع، وبناء حقائق المحلل، وإثراء PDB/الجلسة، وتقطيع الشيفرة الزائفة إلى رموز، ونتائج المدقق.
  • في وضع LLM، يطبع /verbose أيضًا أحجام المطالبات، وموازين رموز الطلب، ومراحل اتصال/إرسال/استقبال HTTP، وأحجام أجزاء الاستجابة، وسبب الإنهاء، ومعاينة JSON للنموذج المستخرج، ومحاولات إعادة المحاولة، وقرارات إعادة المحاولة بناءً على ملاحظات المدقق.
  • لا تتم طباعة مفتاح API. تُظهر سجلات الطلب/الاستجابة الأحجام ومعاينات قصيرة بدلاً من الترويسات الكاملة أو نصوص المطالبات الكاملة.
  • /verbose يستبدل دفق التقدم المدمج بالتتبع الكامل. استخدمه عندما لا تكفي أسطر التقدم المدمجة لتشخيص أين يذهب الوقت.
  • أثناء تنفيذ أمر !decomp طويل الأمد، اضغط Ctrl+Break في WinDbg لطلب الإلغاء. تتحقق الإضافة من الانقطاعات بين مراحل التحليل المحلية وأثناء انتظار عامل LLM، ثم تطلب من إدخال/إخراج HTTP المتزامن النشط التوقف.

الأسماء المستعارة القديمة مثل /brief، و/explain، و/json، و/facts-only، و/debug-prompt، و/data-model، و/dx، و/no-llm لا تزال تعمل مع البرامج النصية القديمة، لكن الأمثلة الجديدة تستخدم /view:*.

عارض النافذة:```text !decomp /view:window module!FunctionName !decomp /view:window /view:explain module!FunctionName

root@kitploit:~
- `/view:window` يشغّل مسار النتيجة العادي لـ `!decomp` للهدف ويفتح النتيجة المعروضة بالكامل في عارض منفصل.
- يستخدم العارض نفس مُصيّر الاستجابة المستخدم في مسار الكونسول، ثم يفتح نافذة أدوات Win32 أصلية غير نمطية (modeless) مملوكة لنافذة المُنقّح (debugger) عند العثور على واحدة.
- يُبلغ مُخرج المُنقّح عن مقبض نافذة العارض الأصلية. إذا تعذّر إنشاء نافذة العارض، يطبع الأمر تحذيرًا ويتراجع إلى نتيجة الكونسول العادية.
- تُعرض روابط DML فقط كتسميات نصية مع سلاسل أوامرها في العارض. عند توفر RichEdit، تستخدم النافذة تخطيط RTF بأسلوب GitHub مع عناوين أقسام، وتنسيق بيانات وصفية، وتمييز شبه كود؛ وإلا فإنها تتراجع إلى نص عادي.
- عندما تحتوي الجلسة الحالية على نتائج مخزنة سابقًا، يعرض العارض قائمة سجل على الجانب الأيسر بحيث يمكنك التبديل بين الإخراج الحالي ونتائج التفكيك السابقة دون إعادة تشغيل التحليل.
- تظل `/view:json` و`/view:facts` و`/view:prompt` و`/view:data` مخرجات كونسول قابلة للقراءة آليًا ولا تتم إعادة توجيهها إلى العارض.

دوال كبيرة:```text
!decomp /limit:deep module!LargeFunction
!decomp /limit:huge module!VeryLargeFunction
!decomp /limit:12000 module!VeryLargeFunction
!decomp /timeout:120000 module!SlowFunction
  • /limit:deep يرفع حد التعليمات إلى 8192.
  • /limit:huge يرفع حد التعليمات إلى 16384.
  • /limit:N يضبط حد تعليمات صريحًا.
  • /timeout:MS يتجاوز مهلة الطلب لهذا الاستدعاء.
  • يتم التحكم في تقسيم وحدات LLM بواسطة decomp.llm.json؛ يتحكم حد التعليمات في سطر الأوامر في مقدار الكود المحلي الذي تحاول الإضافة استعادته قبل المطالبة.
  • تظل الأوامر القديمة /deep و /huge و /maxinsn:N مدعومة.

فك الترجمة المراعي للتعتيم:```text !decomp /deobf:on module!FlattenedFunction !decomp /deobf:off module!FlattenedFunction !decomp /view:facts /deobf:off module!FlattenedFunction

root@kitploit:~
- `/deobf:on` هو الإعداد الافتراضي. ما يزال المحلل يُصدر حقائق أولية، لكن استعادة المُوزِّع عالية الثقة على نمط OLLVM، وإثبات الحواف الميتة المعتمة، وأنماط الاستبدال، وتراكبات CFG الدلالية قد تُوجّه حقائق التوجيه، وسياسة الدمج، وسياسة تعارض المُدقِّق، واستعادة الشبه-سي المنظمة.
- `/deobf:off` يُبقي حقائق `obfuscation` و `semantic_control_flow` و `deobfuscation_readiness` مرئية، لكنه يعطّل إجراءات إعادة الكتابة الآمنة، ويُبقي هيكلة تدفق التحكم على CFG الخام، ويُخبر مسارات التوجيه/الدمج/المدقِّق بالحفاظ على الشكل المعتم الخام.
- استخدم `/deobf:off` عندما تريد فحص المُوزِّع أو الفرع الزائف أو سطح الاستبدال مباشرةً بدلاً من مطالبة الامتداد باستعادة بنية غير معتمة.
- `/deobfuscation:on|off` يُقبل كاسم مستعار أطول.

مساعدات التخزين المؤقت وإعادة التشغيل:```text
!decomp /view:json module!FunctionName
!decomp /last:json
!decomp /view:explain module!FunctionName
!decomp /last:explain
!decomp /view:facts module!FunctionName
!decomp /last:facts
!decomp /view:data module!FunctionName
!decomp /last:data
!decomp /view:prompt module!FunctionName
!decomp /last:prompt
!decomp /history
!decomp /refresh module!FunctionName
!decomp /last:2:explain
!decomp /last:2:json
  • /last:json يعرض JSON الخاص بالطلب/الاستجابة السابق دون إعادة تشغيل التحليل.
  • /last:explain يعيد عرض النتيجة الكاملة السابقة مع قسم الشرح دون إعادة تشغيل التحليل أو استدعاء LLM.
  • /last:facts يعرض حقائق المحلل من النتيجة السابقة دون إعادة تشغيل التحليل.
  • /last:data يعرض لقطة نموذج البيانات السابقة دون إعادة تشغيل التحليل.
  • /last:prompt يعرض تفريغ المطالبة السابق دون إعادة تشغيل التحليل.
  • /history يسرد المخزن المؤقت الحلقي للنتائج في الذاكرة. الفهرس 1 هو أحدث نتيجة.
  • /refresh <target> يتجاوز إعادة تشغيل الأثر الدائم لهذا الهدف، ويشغّل تحليلًا محليًا جديدًا وتحليل LLM، ويستبدل الأثر المحفوظ بعد نتيجة ناجحة مدعومة بـ LLM.
  • /last:N:explain و /last:N:json و /last:N:facts و /last:N:data و يعيدون تشغيل نتيجة مخزنة أقدم حسب فهرس السجل دون إعادة تشغيل التحليل المحلي أو استدعاء LLM.

التنقل عبر DML:

  • عندما يُبلغ WinDbg أن استدعاء الإخراج الحالي يدعم DML، يتم تلوين الكود الزائف بالتظليل النحوي باستخدام فتحات ألوان DML المُهيأة.
  • يتضمن الإخراج العادي صف actions به روابط قابلة للنقر explain و json و facts و prompt و data-model و history لنفس الهدف.
  • يتضمن الإخراج العادي أيضًا صف nav به روابط تفكيك نقطة الدخول ونقطة توقف الدخول وإعادة تشغيل آخر أثر.
  • تصبح عناوين الدخول والكتل الأساسية وكتل الأدلة ومناطق تدفق التحكم ومواقع تلميحات الأنواع ومواقع النقاط الساخنة في الذاكرة المرصودة واقتراحات استعلامات TTD وأهداف الاستدعاء المباشر روابط قابلة للنقر عندما يكون لدى الامتداد معلومات عناوين كافية.
  • ترتبط حالات عدم اليقين وتحذيرات المدقق بأفضل موقع دليل مسترجع عندما يمكن إرجاع السبب إلى فرع أو حلقة أو تبديل أو استدعاء بدون إرجاع أو تعليمة إرجاع أو نقطة دخول الدالة.
  • إذا لم يكن مسار الإخراج الحالي يدعم DML، يتراجع الامتداد تلقائيًا إلى النص العادي. نتيجة التحليل تظل كما هي؛ فقط طريقة العرض تتغير.

تفاصيل الوعي بالجلسة والسلوك المرصود:

  • تتضمن أوضاع /view:json و /view:facts و /view:prompt والوضع العادي لـ LLM session_policy.
  • يسجل session_policy فئة التصحيح والمؤهِّل ونوع التنفيذ واستراتيجية التحليل وأعلام التفريغ/المباشر/النواة وما إذا كان دعم TTD يبدو محملاً.
  • يسجل observed_behavior عنوان rip و rsp الحاليين وعنوان الإرجاع عندما يكون قابلاً للقراءة وعينات وسيطات سجلات x64 من مايكروسوفت (rcx, rdx, r8, r9) والنقاط الساخنة المتكررة للوصول إلى الذاكرة وأوامر TTD المقترحة.
  • تكون عينات وسيطات الإطار الحالي عالية الثقة فقط عندما يكون مؤشر التعليمات الحالي داخل الدالة التي تم تحليلها. وإلا فتُحفظ كتلميحات سياقية.
  • إذا تم تحميل ttdext.dll أو في عملية المصحح، يضيف الامتداد استعلامات المقترحة بدلاً من الادعاء بصمت بأن بيانات التتبع قد جُمعت بالفعل.

تتيح لك مفاتيح تصحيح المستخدم تصحيح حقائق المحلل من سطر الأوامر عندما يفتقر المصحح إلى معلومات دلالية كافية:```text !decomp /fix:noreturn:FatalError module!FunctionName !decomp /fix:type:rcx=MY_TYPE* module!FunctionName !decomp /fix:field:[rcx+18h]=uint32_t module!FunctionName !decomp /fix:rename:v3=request module!FunctionName !decomp /fix:clear

root@kitploit:~
- `/fix:noreturn:name` يعامل الاستدعاءات المطابقة على أنها لا تُرجع قيمة (no-return) لأغراض التفكيك الاحتياطي، واستعادة مخطط تدفق التحكم (CFG)، وحقائق ABI، وفحوصات المدقق.
- `/fix:type:expr=TYPE` يضيف تلميح نوع مستخدم عالي الثقة.
- `/fix:field:expr=TYPE` يضيف تلميح حقل مستخدم عالي الثقة.
- `/fix:rename:old=new` يضيف تلميح إعادة تسمية ويطبّق إعادة التسمية على معرّفات شبه الكود النهائية.
- `/fix:clear` يمسح جميع تجاوزات التصحيح المستمرة عبر الجلسة.

يبقى متغير البيئة `DECOMP_NORETURN_OVERRIDES` مدعومًا. تُضاف قيم سطر الأوامر `/fix:noreturn:` فوق قيمة البيئة الأصلية لجلسة WinDbg الحالية.

مفاتيح التصحيح مستمرة عبر الجلسة:

- يتم تذكر `/fix:noreturn:` و`/fix:type:` و`/fix:field:` و`/fix:rename:` بواسطة الامتداد المُحمَّل وإعادة استخدامها في تشغيلات `!decomp` اللاحقة.
- يمسح `/fix:clear` جميع التصحيحات المستمرة عبر الجلسة ويعيد تجاوز البيئة الخاص بـ no-return إلى قيمته الأصلية من وقت تحميل الامتداد.
- تبقى الإصدارات القديمة `/noreturn:` و`/type:` و`/field:` و`/rename:` و`/clear-overrides` مدعومة.

يتم تجاهل قيم التصحيح غير الصالحة والإبلاغ عنها في `uncertainties` بدلاً من تخزينها مؤقتًا. على سبيل المثال، يتم تجاهل `/fix:type:rcx` لأنه لا يحتوي على زوج `expr=TYPE`.

سير العمل الموصى به للتحقيق:

1. ابدأ بـ `!decomp /view:facts target` للتأكد من أن نطاق الدالة والكتل والاستدعاءات والواردات وبيانات PDB وحقائق الجلسة تبدو معقولة.
2. استخدم `!decomp /view:plan target` لتقدير التقسيم إلى أجزاء، وحجم المطالبة، وخطر انتهاء المهلة، وجودة الرموز قبل إنفاق طلب LLM.
3. استخدم `!decomp /view:prompt target` عندما يبدو حجم المطالبة أو لغتها أو اختيار الأدلة خاطئًا.
4. شغّل `!decomp target` للحصول على نتيجة شبه-C الكاملة والمتحقق منها.
5. استخدم `!decomp /refresh target` عندما يتم إعادة تشغيل قطعة أثرية مستمرة موجودة ولكنك تحتاج إلى تحليل جديد.
6. إذا بدت النتيجة خاطئة، شغّل `!decomp /view:explain target` وافحص تحذيرات المدقق وتغطية الأدلة والإصلاحات المقترحة.
7. أضف تصحيحات مركّزة مثل `/fix:noreturn:` أو `/fix:type:` أو `/fix:field:` أو `/fix:rename:` وأعد تشغيل الهدف نفسه.
8. استخدم `/history` وإعادة تشغيل `/last:N:*` المفهرسة عند مقارنة عدة نتائج حديثة.
9. التقط `/view:json` أو `/last:json` عند تقديم تقارير الأخطاء أو مقارنة السلوك عبر الإصدارات.

## سطح حقائق المحلل

يتم تمرير حقائق المحلل الأخيرة عمدًا عبر `/view:json` و`/view:facts` و`/view:prompt` ووضع LLM العادي. الحقول عالية القيمة التي يجب فحصها أولاً:

- `stack_pointer` يسجّل فروقات المكدس لكل تعليمة، والأسماء المستعارة المرتبطة بالإطار، ومستوى الثقة.
- `call_arguments` يسجّل وسائط السجلات والمكدس المستعادة عند مواقع الاستدعاء، بما في ذلك تخزينات المكدس عبر الكتل القريبة عندما يكون الدليل قويًا بما يكفي.
- `pdb.prototype_parameters` يسجّل أسماء معاملات النموذج الأولي المهيكلة، وأنواعها، وترتيبها، ومواقع ABI، وثقة المصدر.
- `control_flow` يتضمن متغيرات عدّاد الحلقات، والقيم الأولية، والخطوات، والحدود، والاتجاه، وعنوان جدول التبديل، وأهداف الحالات، والهدف الافتراضي، وحدود النطاق، والإشارة (signedness)، وتعبير الفهرس عند استعادته.
- تتضمن `callee_summaries` وحقائق أهداف الاستدعاء مرشحي الاستدعاء المباشر وغير المباشر والاستدعاء الافتراضي/vtable بالإضافة إلى دلالات الذاكرة والتخصيص والتحرير والحالة المعروفة لـ Win32/NT/Rtl.
- يكشف `obfuscation` عن مرشحي موزّع التسطيح بنمط OLLVM، ومتغيرات الحالة، والحواف الدلالية المستعادة، والمسندات المعتمة، وأشكال استبدال السلميات.
- يكشف `semantic_control_flow` عن الحواف الحية/الميتة المستعادة المشتقة من حقائق التعتيم، وتبقى متاحة للفحص حتى عند استخدام `/deobf:off`.
- يكشف `deobfuscation_readiness` عن `enabled`، وإجراءات إعادة الكتابة الآمنة، والافتراضات المحظورة، ومسارات الحقائق ذات الأولوية، والعدادات، والثقة. وعند تعطيله، يسجّل قرار السياسة ويمنع إعادة كتابة تدفق التحكم بعد إزالة التعتيم.
- يضع اختيار حقائق المطالبة الإدخالات عالية الإشارة أولاً، ثم يحافظ على التوزيع عبر أخذ العينات الموزعة بحيث لا تفقد الدوال الكبيرة جميع الأدلة منخفضة التكرار.

## إعداد dbgeng الموصى به

أسرع مسار هو تضمين ملف الرأس ومكتبة الاستيراد داخل المشروع.
التخطيط المتوقع للتضمين:```text
third_party\dbgeng\inc\dbgeng.h
third_party\dbgeng\lib\dbgeng.lib

يمكنك نسخها يدويًا، أو استخدام البرنامج النصي المساعد.

تحضير نسخة المورّد من جذر المصحح```powershell

powershell -ExecutionPolicy Bypass -File .\scripts\Prepare-DbgengVendor.ps1 ` -SourceRoot 'C:\Program Files (x86)\Windows Kits\10\Debuggers\x64'

root@kitploit:~
### تحضير نسخة المورّد من مسارات الملفات الصريحة```powershell
powershell -ExecutionPolicy Bypass -File .\scripts\Prepare-DbgengVendor.ps1 `
    -HeaderPath 'C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\sdk\inc\dbgeng.h' `
    -LibraryPath 'C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\dbgeng.lib'

بمجرد وجود third_party\dbgeng، سيفضّله Build.ps1 تلقائيًا ولا تحتاج عادةً إلى DEBUGGERS_ROOT.

إعداد Zydis الموصى به

يمكن للمستودع استخدام أيٍّ من:

  • كود مصدر third_party\zydis المُضمَّن
  • FetchContent الخاص بـ CMake

السلوك الافتراضي هو auto، الذي يفضّل third_party\zydis عند وجوده ويعود إلى جلب Zydis أثناء إعداد CMake.

التخطيط المتوقع للتبعية:```text third_party\zydis\CMakeLists.txt third_party\zydis\include\Zydis\Zydis.h third_party\zydis\dependencies\zycore\CMakeLists.txt

root@kitploit:~
قم بتحديث أو إنشاء نسخة المورّد:```powershell
powershell -ExecutionPolicy Bypass -File .\scripts\Prepare-ZydisVendor.ps1

يمكنك أيضًا إنشاء vendor من شجرة مصدر محلية تم تنزيلها بالفعل:```powershell powershell -ExecutionPolicy Bypass -File .\scripts\Prepare-ZydisVendor.ps1 ` -SourcePath 'C:\path\to\zydis'

root@kitploit:~
## البناء

المسار الموصى به هو Visual Studio Developer PowerShell أو Developer Command Prompt.

يضمّن ملف `decomp.dll` المُجمَّع الآن إصدار ملف ويندوز مأخوذًا من `version.txt`.

### البناء العادي```powershell
powershell -ExecutionPolicy Bypass -File .\scripts\Build.ps1 -Reconfigure

اختبارات الانحدار```powershell

cmake --build build --config Debug ctest --test-dir build -C Debug --output-on-failure cmake --build build --config Release ctest --test-dir build -C Release --output-on-failure

root@kitploit:~
`decomp_snapshot_tests` يغطي تعاقدات المحلل/البروتوكول/المدقق لوسائط المكدس المستعادة، ومدخلات ABI الخاصة بـ SIMD/FP، وكبت نمط الصفر المتجهي، وتفضيل استقراء الحلقة، وبيانات switch الوصفية، وبيانات الاستدعاء الافتراضي الوصفية، وحقائق التعتيم بأسلوب OLLVM، وسياسة `/deobf:off`، وملخصات API المعروفة، واختيار حقائق الموجّه، وفحوصات إرساء المدقق.

### بناء dbgeng القديم```powershell
powershell -ExecutionPolicy Bypass -File .\scripts\Build-Legacy.ps1 -Reconfigure

إصدار Release مع زيادة تلقائية لرقم إصدار ملف DLL```powershell

powershell -ExecutionPolicy Bypass -File .\scripts\Invoke-ReleaseBuild.ps1

root@kitploit:~
يزيد هذا السكربت المكوّن الأخير في `version.txt` بمقدار `1`، ويفرض إعادة التهيئة، ثم يبني ملف DLL لإصدار Release. على سبيل المثال، `1.0.0.7` تصبح `1.0.0.8`.

### الخيارات الشائعة

- `-Configuration Release|Debug`
- `-Clean`
- `-Reconfigure`
- `-ConfigureOnly`
- `-Verbose`
- `-ZydisSource Auto|Vendor|Fetch`
- `-ZydisVendorDir 'C:\path\to\zydis'`
- `-DebuggersRoot 'C:\Program Files (x86)\Windows Kits\10\Debuggers\x64'`
- `-DbgengIncludeDir 'E:\works\windbg_llm_decomp_2\windbg_llm_decomp\third_party\dbgeng\inc'`
- `-DbgengLibrary 'E:\works\windbg_llm_decomp_2\windbg_llm_decomp\third_party\dbgeng\lib\dbgeng.lib'`

### مثال البائع أولاً```powershell
powershell -ExecutionPolicy Bypass -File .\scripts\Build.ps1 `
    -Configuration Release `
    -ZydisSource Vendor `
    -Reconfigure `
    -Verbose

مثال صريح على التضمين والمكتبة```powershell

powershell -ExecutionPolicy Bypass -File .\scripts\Build.ps1 -Configuration Release -DbgengIncludeDir 'E:\works\windbg_llm_decomp_2\windbg_llm_decomp\third_party\dbgeng\inc' -DbgengLibrary 'E:\works\windbg_llm_decomp_2\windbg_llm_decomp\third_party\dbgeng\lib\dbgeng.lib' -Reconfigure

root@kitploit:~
يحاول سكريبت البناء تلقائيًا تحديد موقع:

- `cmake.exe` من PATH، أو CMake المستقل، أو CMake المرفق مع Visual Studio
- `third_party\dbgeng` تحت جذر المشروع
- `DEBUGGERS_ROOT` من متغيرات البيئة أو المواقع الشائعة لمجموعات Windows Kits

يعمل اختيار مصدر Zydis على النحو التالي:

- `Auto`: يفضّل `third_party\zydis`، وإلا يقوم بجلب `Zydis` أثناء التكوين
- `Vendor`: يتطلب شجرة `third_party\zydis` قابلة للاستخدام أو المسار الممرر عبر `-ZydisVendorDir`
- `Fetch`: يتجاهل شجرة المورّد ويسمح دائمًا لـ CMake بتنزيل `Zydis`

قد يشير `DEBUGGERS_ROOT` إلى جذر مصحّح يستخدم أحد هذه التخطيطات:

- `sdk\inc\dbgeng.h` و `sdk\lib\dbgeng.lib`
- `sdk\inc\dbgeng.h` و `sdk\lib\amd64\dbgeng.lib`
- `sdk\inc\dbgeng.h` و `sdk\lib\x64\dbgeng.lib`
- `sdk\inc\dbgeng.h` و `dbgeng.lib`
- `inc\dbgeng.h` و `lib\dbgeng.lib`
- `inc\dbgeng.h` و `lib\amd64\dbgeng.lib`
- `inc\dbgeng.h` و `lib\x64\dbgeng.lib`
- `dbgeng.h` و `dbgeng.lib`

إذا كان تثبيتك لا يطابق تلك التخطيطات، مرّر مسارات CMake مباشرة:```powershell
cmake -S . -B build-manual -G "Visual Studio 17 2022" -A x64 `
    -DDBGENG_INCLUDE_DIR='E:\works\windbg_llm_decomp_2\windbg_llm_decomp\third_party\dbgeng\inc' `
    -DDBGENG_LIBRARY='E:\works\windbg_llm_decomp_2\windbg_llm_decomp\third_party\dbgeng\lib\dbgeng.lib'
cmake --build build-manual --config Release

توافق dbgeng القديم

إذا كانت نسخة dbgeng.h لديك قديمة جدًا وفشل البناء بسبب GetSymbolEntryOffsetRegions أو GetSymbolEntryString، فاستخدم Build-Legacy.ps1 أو مرر خيار CMake يدويًا.

عند ضبط DECOMP_USE_SYMBOL_ENTRY_APIS=OFF، تتراجع الإضافة إلى:

  • GetFunctionEntryByOffset لاستعادة النطاق المعتمدة على unwind في x64
  • GetNameByOffset مع التفكيك الاستدلالي إذا كانت بيانات تعريف unwind مفقودة

استخدام PDB

تستهلك الإضافة تلقائيًا الرموز ومعلومات الأنواع التي قام WinDbg بتحميلها بالفعل للوحدات المستهدفة.

هناك مستويان عمليان لإثراء PDB:

  • حقائق الأنواع على مستوى الوحدة: اسم الدالة، النموذج الأولي، نوع الإرجاع، أسماء الرموز العامة، إزاحات الحقول، أسماء ثوابت التعداد، وتلميحات سطر المصدر
  • حقائق على مستوى النطاق: أسماء/أنواع المعاملات والمتغيرات المحلية من نطاق المصحح النشط عندما تطابق الدالة المستهدفة النطاق الحالي أو عندما يمكن للإضافة تبديل النطاق إلى نقطة دخول الدالة

كيف يؤثر ذلك على توليد الكود الزائف:

  • يمكن إعادة تسمية وسائط السجلات المستعادة من أسماء استدلالية مثل arg1 إلى أسماء PDB مثل ctx
  • يمكن ترقية المتغيرات المحلية في المكدس من أسماء فتحات عامة إلى أسماء وأنواع محلية ذات نطاق عند توفّرها
  • يمكن أن تكتسب عمليات الوصول إلى الذاكرة القائمة على المؤشر تلميحات حقول مثل ctx->State
  • يمكن أن تكتسب المقارنات الشبيهة بالتعداد أسماء رمزية مثل state == StateRunning
  • يمكن لملخصات الاستدعاء المباشر إعادة استخدام النماذج الأولية وأنواع الإرجاع المشتقة من PDB

قيود مهمة:

  • قد توفر ملفات PDB العامة أسماء الدوال وبعض بيانات الأنواع لكنها غالبًا لا تتضمن المتغيرات المحلية ذات النطاق
  • يمكن أن تجعل البنيات المحسّنة قيم ومواقع المتغيرات المحلية ذات النطاق غير مكتملة أو غامضة
  • تعامل الإضافة بيانات PDB كتلميحات دلالية، وليس كإذن لتجاوز تدفق التحكم الذي يتعارض مع التفكيك

السلوك الحالي تلقائي. لا يوجد مفتاح تكوين منفصل لاستخدام PDB؛ تعتمد الجودة على ما قام WinDbg بتحميله بالفعل وما إذا كان يمكن مطابقة النطاق الحالي مع الدالة المستهدفة.

التكوين

ضع decomp.llm.json بجوار decomp.dll.

هذا الملف ليس مخصصًا لإعدادات شبكة LLM فقط.

  • تؤثر إعدادات provider و endpoint و model وميزانيات الرموز وإعدادات التقسيم على مسار LLM.
  • يؤثر display_language على اللغة الطبيعية المستخدمة في الملخصات وحالات عدم اليقين.
  • يؤثر syntax_highlighting على عرض الكود الزائف في WinDbg عندما يكون الإخراج المدعم بـ DML متاحًا.
  • لا يزال يتم استخدام display_language و syntax_highlighting لإخراج /view:analyzer ومزود المحاكاة (mock provider).

مثال:```json { "provider": "openai-compatible", "endpoint": "https://api.openai.com/v1/chat/completions", "model": "gpt-5.4-2026-03-05", "api_key_env": "OPENAI_API_KEY", "timeout_ms": 120000, "max_completion_tokens": 12000, "force_chunked": false, "chunk_trigger_instructions": 900, "chunk_trigger_blocks": 36, "chunk_block_limit": 24, "chunk_count_limit": 16, "chunk_completion_tokens": 6000, "merge_completion_tokens": 12000, "display_language": { "mode": "auto", "tag": "en-US", "name": "English" }, "syntax_highlighting": { "keyword_color": "warnfg", "type_color": "emphfg", "function_name_color": "srcid", "identifier_color": "wfg", "number_color": "changed", "string_color": "srcstr", "char_color": "srcchar", "comment_color": "subfg", "preprocessor_color": "verbfg", "operator_color": "srcannot", "punctuation_color": "srcpair" } }

root@kitploit:~
مثال على اشتراك ChatGPT:```json
{
  "provider": "chatgpt",
  "model": "gpt-5.5",
  "chatgpt_auth_file": "%USERPROFILE%\\.codex\\auth.json",
  "timeout_ms": 120000,
  "max_completion_tokens": 12000,
  "force_chunked": false,
  "chunk_trigger_instructions": 900,
  "chunk_trigger_blocks": 36,
  "chunk_block_limit": 24,
  "chunk_count_limit": 16,
  "chunk_completion_tokens": 6000,
  "merge_completion_tokens": 12000,
  "reasoning_effort": "medium"
}

بالنسبة إلى provider: "chatgpt"، تكون قيمة endpoint اختيارية وتُعتمد افتراضيًا على https://chatgpt.com/backend-api/codex/responses. كما يُقبل عنوان أساسي مثل https://chatgpt.com/backend-api/codex ويتم تطبيعه إلى /responses. يقرأ الامتداد tokens.access_token وtokens.refresh_token من ملف المصادقة المُهيأ، ويجدّد رموز الوصول JWT المنتهية عبر OAuth الخاص بـ OpenAI، ثم يكتب مجموعة الرموز المحدّثة مرة أخرى إلى ذلك الملف. ملف المصادقة الافتراضي هو %USERPROFILE%\.codex\auth.json، لذا يمكن إعادة استخدام تسجيل دخول Codex CLI إلى ChatGPT مباشرةً. لا يفتح الامتداد متصفحًا ولا يبدأ تدفق تسجيل دخول OAuth من داخل WinDbg؛ إذا كان ملف المصادقة مفقودًا أو غير صالح أو لم يعد قابلاً للتجديد، فشغّل codex login خارج WinDbg وأعد محاولة !decomp. للاختبارات لمرة واحدة، استخدم access_token أو access_token_env بدلاً من ملف مصادقة. و و و محجوزة لمزودي مفاتيح API المتوافقين مع OpenAI ويتم تجاهلها من قِبل مزود ChatGPT.

المفاتيح المدعومة:

  • provider
  • endpoint
  • model
  • api_key
  • api_key_env
  • access_token
  • access_token_env
  • chatgpt_auth_file
  • reasoning_effort
  • timeout_ms
  • max_completion_tokens
  • force_chunked
  • chunk_trigger_instructions
  • chunk_trigger_blocks

مفاتيح display_language المدعومة:

  • mode
  • tag
  • name

يقبل display_language.mode القيم التالية:

  • auto
  • fixed

مفاتيح syntax_highlighting المدعومة:

  • keyword_color
  • type_color
  • function_name_color
  • identifier_color
  • number_color
  • string_color
  • char_color
  • comment_color
  • preprocessor_color
  • operator_color
  • punctuation_color

كيفية عمل قيم ألوان syntax_highlighting:

  • هذه القيم هي أسماء فتحات ألوان DML في WinDbg، وليست أسماء ألوان RGB ثابتة أو CSS.
  • يمررها الامتداد إلى WinDbg DML كما هي عبر <col fg="...">.
  • يحل WinDbg كل اسم فتحة وفقًا لسمته الحالية وإعدادات ألوان نافذة الأوامر.
  • ولهذا السبب، فإن verbfg وwarnfg وemphfg وsrcid والأسماء المشابهة لا تُرتبط بلون واحد عام عبر جميع الأجهزة.
  • لا يوجد حاليًا إعداد على جانب الامتداد لقيم RGB عشوائية مثل #FF8800. اللون الفعلي يأتي من WinDbg، وليس من decomp.llm.json.

النتيجة العملية:

  • إذا كان لون رمز ما داكنًا جدًا على سمة داكنة، فقد تبدو الفتحة نفسها مقبولة على جهاز آخر أو سمة WinDbg أخرى.
  • إذا بدت فتحتان متطابقتين تقريبًا في السمة الحالية، فغيّر أسماء الفتحات في syntax_highlighting بدلاً من افتراض أن الامتداد يتجاهل الإعداد.
  • إذا كنت بحاجة إلى لون نهائي مختلف حقًا، فغيّر سمة WinDbg أو إعدادات ألوان نافذة الأوامر بحيث تُحل الفتحة نفسها بشكل مختلف.

عندما يكون التمييز مرئيًا:

  • يصدر الامتداد كودًا شبه زائف ملوّنًا بـ DML عندما يبلغ WinDbg أن استدعاءات الإخراج الحالية تدعم DML.
  • إذا لم يكن مسار إخراج المصحح الحالي يدعم DML، فيتحول الامتداد تلقائيًا إلى كود شبه زائف نصي عادي.
  • مخرجات /view:json لا تُعرض عبر DML. بدلاً من ذلك، تحمل pseudo_c_tokens لتتمكن الأدوات الخارجية من تطبيق تمييز الصيغة الخاص بها.

فتحات اللون الأمامي الشائعة في DML:

  • wfg نص المقدمة الافتراضي للنافذة.
  • normfg نص نافذة الأوامر العادي.
  • emphfg نص مؤكَّد. توثّق Microsoft هذا كلون أزرق فاتح افتراضيًا، لكن المظهر الدقيق لا يزال يعتمد على السمة.
  • warnfg نص تحذير.
  • errfg نص خطأ.
  • verbfg نص مطوّل.
  • changed بيانات متغيّرة. توثّق Microsoft هذا كلون أحمر افتراضيًا.

فتحات اللون الأمامي الشائعة في DML الموجّهة للمصدر:

  • srcnum الثوابت الرقمية.
  • srcchar ثوابت الأحرف.
  • srcstr ثوابت السلاسل النصية.
  • srcid المعرّفات.
  • srckw الكلمات المفتاحية.
  • srcpair الأقواس أو أزواج الرموز المتطابقة.
  • srccmnt التعليقات.
  • srcdrct التوجيهات.
  • srcspid معرّفات خاصة.
  • srcannot التعليقات التوضيحية للمصدر أو العناصر الشبيهة بالتعليقات التوضيحية.

أمثلة:

  • verbfg تعني "فتحة اللون الأمامي للنص المطوّل"، وليس "لونًا أزرق محددًا".
  • warnfg تعني "فتحة اللون الأمامي للتحذير"، وليس "أصفر أو برتقالي دائمًا".
  • function_name_color: "srcid" تعني "عرض أسماء الدوال باستخدام فتحة المعرّفات في WinDbg".

إذا كنت تضبط الألوان على سمة داكنة:

  • ابدأ بـ function_name_color: "emphfg" أو function_name_color: "verbfg" إذا كانت أسماء الدوال تبدو باهتة مع srcid.
  • استخدم identifier_color: "normfg" أو identifier_color: "wfg" للرموز العامة التي يجب أن تبقى مقروءة دون أن تطغى على الكلمات المفتاحية.
  • أبقِ comment_color: "subfg" إذا كنت تريد أن تتراجع التعليقات دون أن تختفي تمامًا.

المرجع الرسمي:

  • سلوك فتحات ألوان DML وأمثلة عليها: تخصيص مخرجات المصحح باستخدام DML
  • فئات رسائل نافذة الأوامر مثل العادية والتحذير والخطأ والمطوّلة: .printf (WinDbg)

يحتوي ملف decomp.llm.json.example المُضمَّن في المستودع على إعدادات صالحة على المستوى الأعلى يقرؤها الامتداد فعليًا فقط.

أمثلة مرجعية فقط:

اتبع لغة واجهة المستخدم للكمبيوتر:```json { "display_language": { "mode": "auto" } }

root@kitploit:~
فرض اللغة الإنجليزية:```json
{
  "display_language": {
    "mode": "fixed",
    "tag": "en-US",
    "name": "English"
  }
}

فرض اللغة الكورية:```json { "display_language": { "mode": "fixed", "tag": "ko-KR", "name": "Korean" } }

root@kitploit:~
إعداد مسبق لتلوين الصيغة الداكن:```json
{
  "syntax_highlighting": {
    "keyword_color": "warnfg",
    "type_color": "emphfg",
    "function_name_color": "srcid",
    "identifier_color": "wfg",
    "number_color": "changed",
    "string_color": "verbfg",
    "char_color": "srcchar",
    "comment_color": "subfg",
    "preprocessor_color": "normfg",
    "operator_color": "srcannot",
    "punctuation_color": "srcpair"
  }
}

الإعداد المسبق لتلوين الصيغة الفاتح:```json { "syntax_highlighting": { "keyword_color": "emphfg", "type_color": "warnfg", "function_name_color": "srcid", "identifier_color": "normfg", "number_color": "changed", "string_color": "verbfg", "char_color": "srcchar", "comment_color": "subfg", "preprocessor_color": "srcannot", "operator_color": "wfg", "punctuation_color": "subfg" } }

root@kitploit:~
مثال لتفاصيل استجابة `/view:json`:

- تتضمن استجابة JSON الحقلين `pseudo_c` و`pseudo_c_tokens`.
- `pseudo_c_tokens` هو دفق رموز حتمي مناسب لتمييز الصيغة البرمجية خارجيًا.
- يتضمن الطلب المُسلسَل الحقلين `preferred_natural_language_tag` و`preferred_natural_language_name`، اللذين يعكسان لغة العرض المُحدَّدة بعد تطبيق `display_language.mode`.
- تتضمن حقائق المحلّل الآن حقول الجودة من المستوى P0: `ir_values` و`block_value_states` و`control_flow` و`abi`.
- يكشف `ir_values` عن معرّفات قيم شبيهة بـ SSA، ومواقع التعريف، والأهداف، والتعبيرات الأساسية، وروابط الاستخدام، وأعلام الثبات/النسخ، وتلميحات التعريفات الميتة.
- يكشف `block_value_states` عن التعريفات الواصلة live-in/live-out لكل كتلة أساسية، والقيم الأساسية، وفئة التخزين، وحالة التقارب، ومستوى الثقة.
- يكشف `stack_pointer` عن فروق المكدس لكل تعليمة، والأسماء المستعارة المرتبطة بالإطار، والقيم الخام للقاعدة/الإزاحات، ومستوى الثقة.
- يكشف `control_flow` عن مرشّحات المناطق المهيكلة مثل `natural_loop` و`if_else_candidate` و`switch_candidate` مع أدلة الكتل، وبيانات استقراء الحلقات، وبيانات جدول switch/الافتراضي/النطاق، والإشارة (signedness)، وتعبيرات الفهرس، ومستوى الثقة.
- يكشف `abi` عن افتراضات مساحة الظل (shadow space) في Microsoft x64، وأدلة فتحات الإيداع (home slots)، والتعرّف على الإطار/التمهيد/الختام (frame/prolog/epilog)، وأدلة استدعاءات no-return، ومرشّحات الاستدعاءات الذيلية، ومرشّحات الـ thunk، ومرشّحات مغلّفات الاستيراد، ووسائط الاستدعاء المستعادة من السجلات وعمليات تخزين المكدس.
- تتضمن حقائق المحلّل الآن أيضًا حقولًا دلالية من المستوى P1: `type_hints` و`idioms` و`callee_summaries`.
- يكشف `type_hints` عن أدلة المؤشرات، والمتغيرات المحلية، وإزاحات الحقول، والأنماط الشبيهة بالمصفوفات، والشبيهة بالتعدادات، والشبيهة بأعلام البت، ومرشّحات vtable، مع المصدر ومستوى الثقة. وعند توفّر بيانات PDB، تُرفع أيضًا الوسائط/المتغيرات المحلية ذات النطاق، وتلميحات الحقول، وثوابت التعداد إلى دفق تلميحات الأنواع الموحّد هذا.
- يكشف `idioms` عن بدائل عالية المستوى لاستدعاءات المساعدين وأنماط المترجم المعروفة، مثل نسخ/تعبئة الذاكرة، ونسخ السلاسل النصية، وفحوصات كعكة الأمان (security cookies)، ومجسّات المكدس (stack probes)، ومساعدي التخصيص/التحرير، ومهيّئات الأنواع التجميعية، وعمليات تحميل العموميات/الاستيراد النسبية إلى RIP.
- يكشف `callee_summaries` عن تلميحات نوع الإرجاع للاستدعاءات المباشرة وغير المباشرة، ونموذج الوسائط، والآثار الجانبية، وتأثيرات الذاكرة، والملكية، والمصدر، ومستوى الثقة؛ وتستبدل أهداف الاستدعاء المُثراة بالرموز/الأنواع الملخصات الاستدلالية الأولية عندما تتمكن WinDbg من حلها، وتتضمن مرشّحات الاستدعاءات الافتراضية تعبيرات الأهداف بالإضافة إلى إزاحات vtable عند استعادتها.
- تصف ملخصات واجهات برمجة تطبيقات Win32/NT/Rtl المعروفة سلوك نسخ/تعبئة/تصفير الذاكرة، والتخصيص، والتحرير، والحالة، والأخطاء عند توفّر أسماء الرموز.
- تتضمن حقائق التلقين `analyzer_skeleton` و`graph_summary` ليصقل النموذج مسودة مدعومة بالأدلة بدلًا من البدء من صفحة فارغة.
- يوفر `graph_summary` كتلة الدخول، ومناطق تدفق التحكم، والشروط المُطبَّعة (normalized)، وكتلًا تمثيلية عالية الإشارة مع سياسة اقتطاع صريحة. ويقوم اختيار حقائق التلقين الآن بترتيب الإدخالات عالية الإشارة ويستخدم أخذ العينات الموزّع للحفاظ على تمثيلية مجموعات الحقائق الكبيرة.
- يكشف `evidence_graph` عن عُقد الحقائق عالية الإشارة وحواف تتبع المصدر (provenance edges) بحيث يمكن تتبّع قيم IR، وحالات قيم الكتل، والوصول إلى الذاكرة، وأهداف الاستدعاءات، وتلميحات الأنواع، وتلميحات PDB، والسلوك المرصود إلى أدلة التعليمة والكتلة.
- تكشف `obfuscation` و`semantic_control_flow` و`deobfuscation_readiness` عن حقائق الاستعادة بأسلوب OLLVM وعن ما إذا كان توجيه إعادة كتابة إزالة التعتيم مفعّلًا للأمر الحالي.
- تتضمن استجابة المدقّق إدخالات `warnings` القديمة بالإضافة إلى إدخالات `issues` المهيكلة. تحمل كل مشكلة `severity` و`code` و`message` و`evidence` اختياريًا، بحيث يمكن للأدوات فصل أخطاء مثل `branch.true_target_not_successor` عن التحذيرات منخفضة الخطورة.
- تقارن فحوصات المدقّق الآن أهداف الفروع الصحيحة/الخاطئة المُطبَّعة مع خلفاء CFG، وتقارن كثافة فروع الكود الزائف مع الفروع الشرطية المستعادة، وتتحقق تبادليًا من ملخصات المستدعَين المباشرة مع تأثيرات استدعاءات الكود الزائف، وتتحقق من إرساء عُقد/حواف evidence_graph، وتفحص مراجع حالات قيم الكتل عائدًا إلى الكتل وقيم IR المستعادة.
- قد يتضمن المخرَج العادي ومخرَج الشرح قسمًا موجزًا باسم `suggested fixes`. وهي أوامر `/fix:*` متحفّظة مستمدة من مشكلات المدقّق، أو فرص إعادة التسمية المدعومة بـ PDB، أو نقاط الذاكرة الساخنة المتكررة المرصودة. ويعرض المخرَج المدرِك لـ DML الاقتراحات القابلة للتطبيق فورًا كروابط إعادة تشغيل قابلة للنقر للهدف نفسه؛ وتبقى اقتراحات نوع الحقل النائبة (placeholder) نصًا عاديًا حتى يتم استبدال `TYPE`.
- في وضع LLM، يُعيد الامتداد تغذية مشكلات المدقّق تلقائيًا في تلقين إعادة محاولة واحد. يُحتفظ بإعادة المحاولة عندما تحافظ على جودة المدقّق أو تحسّنها؛ وإلا يُحتفظ بالاستجابة الأصلية مع إضافة ملاحظة عدم اليقين.
- يكشف `session_policy` و`observed_behavior` عن سياق خاص بـ WinDbg مثل سياسة live/dump/kernel/الشبيهة بـ TTD، وعيّنات وسائط سجلات الإطار الحالي، ونقاط الذاكرة الساخنة، واستعلامات التتبّع المقترحة.
- يتضمن الطلب المُسلسَل الآن أيضًا كائن `pdb` عند توفّر بيانات الرموز/الأنواع.
- يُبلغ `pdb.availability` عن مستوى الإثراء مثل `none` أو `symbols` أو `typed` أو `scoped`.
- تُعد `pdb.params` و`pdb.locals` و`pdb.field_hints` و`pdb.enum_hints` و`pdb.source_locations` تلميحات دلالية قابلة للقراءة آليًا موجهة للأدوات الخارجية أو التحليل دون اتصال.

تجاوزات بيئية اختيارية:

- `DECOMP_LLM_PROVIDER`
- `DECOMP_LLM_ENDPOINT`
- `DECOMP_LLM_MODEL`
- `DECOMP_LLM_API_KEY`
- `OPENAI_API_KEY`
- `DECOMP_LLM_CHATGPT_ACCESS_TOKEN`
- `DECOMP_LLM_CODEX_ACCESS_TOKEN`
- `KERNFORGE_CODEX_ACCESS_TOKEN`
- `DECOMP_LLM_CHATGPT_AUTH_FILE`
- `DECOMP_LLM_CODEX_AUTH_FILE`
- `KERNFORGE_CODEX_AUTH_FILE`
- `DECOMP_LLM_REASONING_EFFORT`
- `DECOMP_LLM_TIMEOUT_MS`
- `DECOMP_LLM_MAX_COMPLETION_TOKENS`
- `DECOMP_LLM_FORCE_CHUNKED`
- `DECOMP_LLM_CHUNK_TRIGGER_INSTRUCTIONS`
- `DECOMP_LLM_CHUNK_TRIGGER_BLOCKS`
- `DECOMP_LLM_CHUNK_BLOCK_LIMIT`
- `DECOMP_LLM_CHUNK_COUNT_LIMIT`
- `DECOMP_LLM_CHUNK_COMPLETION_TOKENS`
- `DECOMP_LLM_MERGE_COMPLETION_TOKENS`
- `DECOMP_NORETURN_OVERRIDES`
  أجزاء أسماء دوال مفصولة بفواصل أو فواصل منقوطة، تُعامَل كأهداف no-return أثناء التفكيك الاحتياطي، واستعادة خلفاء CFG، وحقائق ABI، وفحوصات المدقّق. مثال: `DECOMP_NORETURN_OVERRIDES=MyAbort;PanicAndExit`.

ملاحظة الجودة أولًا:

- يدعم الامتداد الآن التحليل متعدد المراحل المُقسَّم للدوال الكبيرة.
- يرسل المحلّل حقائق قيم IR، وحالات قيم الكتل، ومناطق تدفق التحكم، وحقائق evidence_graph، وأدلة x64 ABI/no-return إلى نموذج LLM قبل مرحلة الصقل، بحيث تتشارك أوضاع `/view:analyzer` و`/view:json` ووضع LLM العادي نفس قاعدة أدلة P0.
- يتحقق المدقّق تبادليًا من الحلقات، وswitch، وno-return، وأهداف الفروع، وسلوك الإرجاع، وتأثيرات استدعاءات المستدعَين، وإرساء evidence_graph، واتساق حالات قيم الكتل، وتغطية الأدلة، وادعاءات المعرّفات المشبوهة، مقابل أدلة المحلّل. ويخفض مستوى الثقة عندما يتجاوز النثر الواثق الحقائق المستعادة، ويسمّي كل مشكلة بزوج مستقر من severity/code.
- عندما تعثر تعليقات المدقّق على أخطاء في المخطط، أو تعارضات في الحقائق، أو ثقة معدَّلة منخفضة جدًا، ينفّذ مسار LLM محاولة إعادة واحدة تلقائيًا مع إلحاق مشكلات المدقّق بالتلقين.
- نقطة بداية جيدة للنماذج السحابية هي `max_completion_tokens=12000` و`chunk_completion_tokens=6000` و`merge_completion_tokens=12000`، مع `force_chunked=false` ومحفّزات تقسيم حول `900 instructions` أو `36 blocks`.
- أبقِ `force_chunked=true` لاختبارات إجهاد خط أنابيب التقسيم فقط. عادةً ما تحتاج إزالة التحويل البرمجي الموجهة بالجودة للدوال المسطَّحة أو كثيفة الموزّعات (dispatchers) إلى تلقين واحد حتى تصبح الدالة كبيرة بما يكفي لتجاوز محفّزات التقسيم المهيأة.
- أبقِ `timeout_ms` مرتفعًا للنماذج السحابية. `120000` نقطة بداية أكثر أمانًا من `15000`.
- إذا كانت الجودة ما تزال ضعيفة على الدوال الضخمة، ارفع `chunk_count_limit` قبل تقليص `/limit:N`.
- إذا لم يتم تكوين أي نقطة نهاية، يتراجع الامتداد إلى مزوّد المحاكاة الحتمي.
- حتى عندما يستخدم الامتداد `/view:analyzer` أو مزوّد المحاكاة، ما يزال `display_language` و`syntax_highlighting` يؤثران على ما يراه المستخدم.

## اختبار دخان WinDbg

1. قم بالبناء باستخدام `Build.ps1` أو `Build-Legacy.ps1`.
2. ضَع `decomp.llm.json` بجوار ملف `decomp.dll` المُبنى.
3. شغّل WinDbg. متغيرات البيئة هي تجاوزات اختيارية فقط.
4. حمّل الامتداد.
5. تحقّق من وضع المحلّل فقط قبل تفعيل مسار LLM.```text
.load C:\path\to\decomp.dll
!decomp /view:analyzer ntdll!RtlAllocateHeap
!decomp /view:facts kernel32!Sleep

ثم تحقق من وضع LLM:```text !decomp ntdll!RtlAllocateHeap !decomp /view:json ntdll!RtlAllocateHeap !decomp 0x7ffb`12345678

root@kitploit:~
الفحوصات المتوقعة:

- يجب أن تُحل `target` و`entry` و`module` بشكل متسق
- يجب أن تكون `regions` غير صفرية للدوال العادية
- يجب أن يستمر `/view:analyzer` في طباعة ثقة المحلل وكعب الكود الزائف
- يجب أن يملأ وضع LLM الحقول `summary` و`pseudo_c` و`pseudo_c_tokens` و`verified`
- يجب أن يتضمن مخرج `/view:json` كلاً من `preferred_natural_language_tag` و`preferred_natural_language_name` في الطلب المتسلسل
- عند تحميل ملفات PDB خاصة أو غنية، يجب أن يتضمن `/view:json` أيضاً `pdb.prototype` و`pdb.params` وربما `pdb.locals`
- بالنسبة إلى البنى والتعدادات المعرّفة، قد يتضمن `/view:json` `pdb.field_hints` و`pdb.enum_hints`

## مثال اشتراك ChatGPT```powershell
$env:DECOMP_LLM_PROVIDER = "chatgpt"
$env:DECOMP_LLM_MODEL = "gpt-5.5"
$env:DECOMP_LLM_CHATGPT_AUTH_FILE = "$env:USERPROFILE\.codex\auth.json"
$env:DECOMP_LLM_TIMEOUT_MS = "120000"

إذا كان ملف المصادقة يحتوي على رمز تحديث (refresh token)، فتقوم الإضافة بتحديث رمز الوصول منتهي الصلاحية قبل إرسال الطلب. يمكن استخدام DECOMP_LLM_CHATGPT_ACCESS_TOKEN كرمز حامل مؤقت، لكن مسار ملف المصادقة أفضل لجلسات WinDbg العادية لأنه يبقى صالحًا بعد انتهاء صلاحية الرمز. لا تفتح الإضافة متصفحًا أبدًا أثناء !decomp؛ شغّل codex login خارج WinDbg عند الحاجة إلى تسجيل دخول ChatGPT تفاعلي.

أمثلة على نقاط نهاية LLM المحلية

Ollama```powershell

$env:DECOMP_LLM_ENDPOINT = "http://127.0.0.1:11434/v1/chat/completions" $env:DECOMP_LLM_MODEL = "qwen2.5-coder:14b" $env:DECOMP_LLM_API_KEY = "ollama"

root@kitploit:~
### LM Studio```powershell
$env:DECOMP_LLM_ENDPOINT = "http://127.0.0.1:1234/v1/chat/completions"
$env:DECOMP_LLM_MODEL = "local-model"
$env:DECOMP_LLM_API_KEY = "lm-studio"

vLLM أو خادم محلي متوافق مع OpenAI```powershell

$env:DECOMP_LLM_ENDPOINT = "http://127.0.0.1:8000/v1/chat/completions" $env:DECOMP_LLM_MODEL = "Qwen/Qwen2.5-Coder-14B-Instruct" $env:DECOMP_LLM_API_KEY = "local"

root@kitploit:~
تنزيل الأداة
  • روابط WinDbg DML للتنقل عبر نقطة الدخول/الكتلة الأساسية/الدليل/هدف الاستدعاء عندما يدعم رد استدعاء الإخراج DML
  • أوضاع نتائج منفصلة للإخراج الموجز، وشرح الأدلة، والحقائق فقط، ومحفز التصحيح، وJSON، ونمط نموذج البيانات
  • مفاتيح تصحيح المستخدم لتلميحات عدم الإرجاع والنوع والحقل وإعادة التسمية
  • حقائق سياسة التحليل الواعية بالجلسة للجلسات الحية، والتفريغ، والنواة، والجلسات الشبيهة بـ TTD
  • حقائق السلوك المرصود من سياق مصحح الأخطاء الحالي، بما في ذلك عينات وسائط السجلات، والنقاط الساخنة في الذاكرة، واقتراحات استعلام TTD عند توفرها
  • تصنيف السلاسل/العامة/IAT النسبية إلى RIP وتلميحات توقيع هدف الاستدعاء لمحفز LLM
  • تلميحات مدركة لـ PDB المحمّل للنموذج الأولي، والمعامل/المحلي المحدد النطاق، والحقل، والتعداد، وسطر المصدر لمحفز LLM
  • استدعاءات LLM مباشرة داخل العملية من الملحق
  • محول HTTP متوافق مع OpenAI أو احتياطي mock حتمي
  • تمريرة تحقق على مخرجات LLM
  • /last:N:prompt
  • أوضاع /last:* هي أوامر إعادة تشغيل طرفية. إذا وُجد هدف في نفس الأمر، تتم إعادة تشغيل الأثر المخزن ولا يبدأ أي تحليل محلي أو طلب LLM لذلك الهدف.
  • الآثار المخزنة مؤقتًا في الذاكرة تعيش فقط في مثيل الامتداد المُحمَّل. يحتفظ سجل النتائج بأحدث 8 نتائج ويختفي عندما يُفرغ WinDbg الامتداد أو تنتهي العملية.
  • النتائج الناجحة المدعومة بـ LLM تُحفظ أيضًا تلقائيًا في مجلد artifact بجوار decomp.dll المُحمَّل. لا يحتاج المشغّل إلى أمر حفظ منفصل.
  • تشمل الآثار الدائمة request و response و data_model و debug_prompt وكائن kernel_build بقيم إصدار Win32/KD وسلسلة بناء وNtBuildLab اختياري وبصمة بناء.
  • في جلسة لاحقة، يتحقق تشغيل نفس الأمر !decomp <target> تلقائيًا من المسار artifact\<kernel_build>\... بعد حلّ الهدف واستعادة RVA للدالة. إذا كان kernel_build المحفوظ يطابق بناء نظام التشغيل الحالي، يعيد الامتداد تشغيل الأثر دون قراءة بايتات الدالة أو تشغيل تمريرات المحلل المحلي أو استدعاء LLM.
  • الآثار الدائمة المفقودة أو غير القابلة للقراءة أو غير المتطابقة تُعتبر حالات فقدان في الكاش. يتراجع الأمر إلى تحليل جديد ولا يستبدل الأثر إلا بعد نتيجة ناجحة مدعومة بـ LLM.
  • تستخدم روابط إجراءات DML في الإخراج العادي هذه العروض المخزنة /last:*، لذا فإن النقر على explain أو json أو facts أو prompt أو data-model لا يبدأ تشغيل تفكيك جديد.
  • تظل الصيغ القديمة /last-json و /last-explain و /last-facts و /last-data-model و /last-dx و /last-prompt مدعومة.
  • TTDReplay.dll
    dx @$cursession.TTD.Calls(...)
    api_key
    api_key_env
    DECOMP_LLM_API_KEY
    OPENAI_API_KEY
  • chunk_block_limit
  • chunk_count_limit
  • chunk_completion_tokens
  • merge_completion_tokens
  • display_language
  • syntax_highlighting