xAnalyzer هو مكون إضافي لمصحح أخطاء x86/x64 x64dbg بواسطةmrexodia. يعتمد هذا البرنامج المساعد على APIInfo Plugin بواسطة @mrfearless، على الرغم من إجراء بعض التحسينات والإضافات. xAnalyzer قادر على إجراء أنواع مختلفة من التحليل على الكود الثابت للتطبيق الذي تم تصحيحه لتوفير المزيد من المعلومات الإضافية للمستخدم. سيقوم هذا البرنامج المساعد بإجراء اكتشافات واسعة النطاق لاستدعاء وظائف واجهة برمجة التطبيقات (API) لإضافة تعريفات الوظائف والوسائط وأنواع البيانات بالإضافة إلى أي معلومات تكميلية أخرى، وهو شيء قريب مما تحصل عليه مع محرك تحليل OllyDbg، من أجل جعله أكثر قابلية للفهم بالنسبة إلى المستخدم قبل بدء مهمة تصحيح الأخطاء.
تتضمن بعض الميزات والتحسينات الرئيسية ما يلي:
تحليل موسع لاستدعاءات الوظائف (أكثر من 13000 تعريف لواجهة برمجة التطبيقات (API) من حوالي 200 ملف DLL)
الوظائف والوسائط وأنواع البيانات المحددة والعامة والتعرف على معلومات تصحيح الأخطاء الإضافية.
الكشف التلقائي عن الحلقات.
يحتفظ المستخدم بملفات التعريف
قبل xAnalyzer
بعد xAnalyzer
قم بتنزيل هنا أحدث إصدار من الثنائيات
قم بتنزيل أحدث إصدار من x64dbg
قم باستخراج apis_def.zip
انسخ xAnalyzer.dp32/xAnalyzer.dp64 والمجلد apis_def إلى أدلة المكونات الإضافية المعنية في x64dbg
ابحث ضمن قائمة " المكونات الإضافية " في نافذة x64dbg الرئيسية أو في القائمة الثانوية في نافذة Disasm أيضًا للحصول على إدخال " xAnalyzer "
لدى xAnalyzer بعض الخيارات للاختيار من بينها لتخصيص التجربة بشكل أكبر، لاستخدامه فقط عندما تحتاج إليه وبالطريقة التي تريدها. خيارات البرنامج المساعد هي كما يلي:
التحليل التلقائي : عندما يكون هذا الخيار قيد التشغيل، سيطلق البرنامج المساعد تحليلًا تلقائيًا كاملاً للكود القابل للتنفيذ في كل مرة يصل فيها إلى نقطة الإدخال عند التحميل على مصحح الأخطاء. باستخدام هذا الخيار، يمكنك الحصول على سلوك تحليل أولي أقرب لـ OllyDbg على x64dbg.
التحليل الموسع : سيجبر هذا الخيار xAnalyzer على إجراء تحليل موسع على قسم التعليمات البرمجية بالكامل للملف القابل للتنفيذ الذي تم تصحيحه. تحذير!!! من خلال تمكين هذا الخيار، قد تستغرق عملية التحليل وقتًا وموارد أكثر بكثير لإكمالها، كما قد يتم استخدام كمية كبيرة من ذاكرة الوصول العشوائي (RAM) بواسطة x64dbg اعتمادًا على حجم القسم وكمية البيانات الإضافية المضافة إلى التفكيك الثابت القابل للتنفيذ الذي تم تصحيحه
تحليل الوظائف غير المحددة : من خلال تحديد هذا الخيار، سيستخدم xAnalyzer التحليل العام وأنواع الوسائط لجميع استدعاءات/وظائف واجهة برمجة التطبيقات (API) التي لم يتم تعريفها في ملفات تعريف واجهة برمجة التطبيقات (API) وكذلك الاستدعاءات مثل:
CALL {REGISTER}
CALL {REGISTER + DISPLACEMENT}
CALL {DYNAMIC_POINTER}
يحتوي xAnalyzer على بعض الأوامر وخيارات القائمة للاختيار من بينها عند العمل مع ملف قابل للتنفيذ:
من خلال تحديد عدة تعليمات في نوافذ التفكيك لـ x64dbg واختيار هذه القائمة، سيتم إجراء تحليل سريع للأسطر المحددة. يمكنك أيضًا استخدام أمر تحديد xanal لتشغيل هذا الخيار أو حتى تعيين مفاتيح التشغيل السريع الخاصة بك في واجهة المستخدم الرسومية x64dbg.
إذا كنت في منتصف إحدى الوظائف، فيمكنك استخدام إدخال القائمة هذا لتحليل الوظيفة بأكملها وتلك الوظيفة فقط. من خلال أخذ التعليمات المحددة الخاصة بك كمرجع، سيقوم xAnalyzer بمعالجة جميع الأسطر الموجودة داخل كتلة من التعليمات البرمجية من هناك. يمكنك أيضًا استخدام الأمر xanal لبدء هذا النوع من التحليل أو حتى تعيين مفاتيح التشغيل السريع الخاصة بك في واجهة المستخدم الرسومية x64dbg.
سيؤدي هذا الأمر إلى إطلاق تحليل كامل للوحدة بأكملها. تأخذ هذه الميزة خيار التحليل الموسع في الاعتبار من أجل عمق التحليل الذي سيتم استخدامه. يمكنك استخدام وحدة الأوامر xanal لتنفيذها أيضًا أو حتى تعيين مفاتيح التشغيل السريع الخاصة بك في واجهة المستخدم الرسومية x64dbg.
في هذه الحالات، كل هذه القوائم ستعمل على عكس ما فعلته الأوامر السابقة. في حالة رغبتك في التخلص من معلومات التحليل الإضافية في بعض أجزاء الكود أو في الملف القابل للتنفيذ بالكامل إذا رغبت في ذلك. يمكنك أيضًا استخدام الأوامر: xanalremove التحديد/الوظيفة/الوحدة النمطية
يحتوي xAnalyzer على نظام قابل للتوسيع من ملفات تعريف API، وهذه الملفات موجودة في المجلدات "api_def" و "api_def/headers" والتي يجب أن تحتوي على جميع الملفات ذات بنية .ini ومع القاعدة:
" اسم الملف ": هذا هو اسم الوحدة التي توجد بها وظيفة API.
" filename.h ": هذا هو الرأس الذي يحتوي على معلومات ذات صلة ببيانات النوع (الإشارات والتعدادات).
الامتداد " .api ": يحدد أنه ملف تعريف، ولن يتم التعرف على أي امتداد آخر (kernel32.api، shell32.api، إلخ)
تحتوي جميع ملفات ini هذه على معلومات مهمة للمكون الإضافي مثل النماذج الأولية للوظائف وأنواع الوسائط وما إلى ذلك. يتم استخدام كل هذه المعلومات بواسطة xAnalyzer من أجل تعيين المعلومات الإضافية على الكود الثابت. سيكون الإدخال الفردي في أي من هذه الملفات كما يلي:
ملف user32.api
[MessageBox]
1=HANDLE hWnd
2=LPCTSTR lpText
3=LPCTSTR lpCaption
4=[MessageBoxType] uType
ParamCount=4
Header=shell.h.api;
@=MessageBox
ملف shell.h.api
[MessageBoxType]
TypeDisplay=UINT
Base=UINT
Type=Flag
Const1=MB_ABORTRETRYIGNORE
Value1=0x00000002
Const2=MB_CANCELTRYCONTINUE
Value2=0x00000006
Const3=MB_HELP
Value3=0x00004000
Const4=MB_OK
Value4=0x00000000
Const5=MB_OKCANCEL
...
أي وسيطة بين الأقواس تعني أن هذا نوع بيانات محدد (تعداد أو إشارات ثنائية) وأنه سيتم تعريفه في ملف رأس .h المناسب المحدد في المفتاح " الرأس ".
أما بالنسبة لملف الرأس، فإن المخطط هو نفسه إلى حد كبير، حيث يوجد فقط بضعة مفاتيح، مثل " TypeDisplay ". هذا يحدد نوع البيانات المناسب لعرضه في تعليق dbg، ثم يأتي " Base "، وسيشير إلى نوع البيانات الأساسي الذي يستخدمه الإدخال الرئيسي، في حالة وجود نوع بيانات مرتبط، يمكن أن يكون هذا بين قوسين كما حسنًا. مفتاح " النوع " هو نوع بنية البيانات ويمكن أن يكون "Flag" أو "Enum". وأخيرًا، تأتي جميع أسماء وقيم المتغيرات.
إذا وجدت أن تعريف استدعاء API معين لم يتم اكتشافه أو لم يتم اكتشافه بشكل صحيح بواسطة xAnalyzer، فقد يعني ذلك أنه غير موجود في ملفات التعريف أو أنه تم تعريفه بشكل غير صحيح، لذلك في هذه الحالة يمكن إجراء إضافة أو تعديل لتضمينه أي دالة أو وسيطات مفقودة طالما تم اتباع نفس البنية، فقد تكون قابلة للتخصيص بنسبة 100%.
لن تتم معالجة أول مكالمة غير محددة تحتوي على وسيطات عامة في إحدى الوظائف، إلا إذا كانت مسبوقة بقفزة، حيث لا توجد طريقة لمعرفة عدد الوسائط التي يجب استخدامها دون استخدام تعليمات برولوج الدالة بشكل غير قانوني. ستتم معالجة المكالمات الموثقة فقط في بداية الوظيفة أو وظيفة غير محددة ترأسها قفزة.
تحتوي بعض الوظائف "غير الشائعة" على وسيطات بين الانتقالات، لذا وفقًا للتصميم الفعلي للمكون الإضافي (لا توجد انتقالات بين وسيطات الوظائف) لن تتم معالجة هذه الاستدعاءات، حيث أنه في كل مرة يتم العثور على قفزة، يتم تنظيف التعليمات الموجودة في المكدس.
لن تعمل المكالمات المتداخلة بشكل صحيح إلا عندما:
1-) يتم تعريف المكالمة الداخلية
2-) إذا كانت المكالمة الداخلية غير المحددة لا تأخذ وسائط المكدس أكثر من الوسائط التي يحتاجها الاستدعاء الخارجي
إنه يكتشف فقط الحلقات داخل الوظائف (حدود الوظائف Prologs/RETs). إذا كانت الوظيفة تحتوي على RET في منتصف الكود الخاص بها، فسيتم اكتشافها كنهاية للوظيفة ويتم مسح مكدس الحلقات.
قد يفشل التحليل إذا كان الملف القابل للتنفيذ الذي يتم تصحيحه يحتوي على نقاط متعددة باسمه
اكتشاف حلقة غير صحيحة لقسم به قفزة غير مشروطة بداخله (انظر رقم 7)
خطوط الوسيطات المتداخلة (يدعم xAnalyzer الوسائط المتداخلة لكن x64dbg لا يدعمها في الوقت الحالي)
إضافة تحليل الإنتروبيا
مسح تحليل التدفق بدلاً من الخطي (محاكاة التتبع)
كشف حالة التبديل
xAnalyzer 2.5.4
- تم تحديث المشروع إلى VS2017
- تم إصلاح المشكلات عند معالجة تعليمات الوسيطة التي تتضمن مؤشر المكدس (إصدار x64).
- تم إصلاح ترتيب الوسائط غير الصحيح الذي يتضمن مؤشر المكدس (إصدار x64).
- تم إصلاح الخلل في التعرف على وسيطات الوظائف غير المحددة التي تؤدي إلى تكرار السجلات كوسائط مختلفة (إصدار x64)
- تم تغيير التعرف على وسائط الاتصال غير المحددة، وسوف يتنبأ فقط بما يصل إلى 4 وسائط غير محددة بشكل افتراضي (إصدار x86)
- بعض إعادة هيكلة التعليمات البرمجية
xAnalyzer 2.5.3
- تم إصلاح اكتشاف أسماء الوظائف في الإصدارات الأحدث من x64dbg
xAnalyzer 2.5.2
-استخدام خط disasm الحالي المحدد لتحليل الوحدة بدلاً من cip
-تعديل بعض الكتابة في إدخالات البرنامج المساعد
- بعض إعادة هيكلة التعليمات البرمجية
- تعديل الأمر "xanal/xanalremove exe" إلى "وحدة xanal/xanalremove"
xAnalyzer 2.5.1
- تم إصلاح العطل في اختلافات تعليمات الحركة
xAnalyzer 2.5.0
- تمت إزالة تعليمات [EBP+/-] كوسائط استدعاء دالة محتملة
- تمت إزالة البادئة "0x" لجميع قيم وسيطات الوظائف حيث يتم استنتاج النظام الست عشري
-الوسائط الثابتة حيث لا تظهر متغيرات المؤشر بشكل صحيح كمؤشرات ولكن كنوع بيانات أساسي بدلاً من ذلك
- تمت إضافة التعرف على استخدام مؤشر المكدس (ESP) كوسيطة محتملة لاستدعاءات الوظائف (x86)
- تمت إضافة استخدام اسم نوع البيانات الدقيق في الوسائط بدلاً من اسم نوع البيانات العام/الأساسي
- تمت إضافة ميزة التتبع الذكي للوظيفة (التنبؤ الذكي والتعرف على استدعاءات الوظائف غير المباشرة مثل: CALL {REGISTER}، CALL {POINTER})
- تمت إضافة اسم مؤشرات الوظيفة كمعلمات (سيتم استخدام اسم الوظيفة بالكامل، في حالة اكتشافه، بدلاً من العنوان فقط)
xAnalyzer 2.4.3
- تمت إضافة التعرف على تعليمات MOV على x86
- تمت إضافة التعرف على الوظائف ذات اللاحقة "Stub".
- تم إصلاح الخلل في "التحليل التلقائي" (تمت إضافة المزيد من شروط فحص EP)
- تم تحديد خيارات مسح التعليقات التلقائية/التسميات التلقائية الآن بشكل افتراضي
xAnalyzer 2.4.2
- تم إصلاح BoF عندما يتجاوز تعليق علامات الوسيطة MAX_COMMENT_SIZE
- تم إصلاح خطأ البحث عن اسم الوظيفة عندما يكون التعريف موجودًا في ملف .api ثانٍ
xAnalyzer 2.4.1
- أضيفت مخطط مفاتيح الاختصار الجديد
- تمت إضافة خيارات جديدة للتحكم في بيانات التحليل السابقة التي يجب مسحها. (وهذا يعطي إمكانية العمل بسلاسة مع المكونات الإضافية لمحمل الخرائط مثل SwissArmyKnife، وما إلى ذلك).
- إضافة أوامر جديدة (تم إهمال الأوامر القديمة)
اختيار xanal: يقوم بإجراء تحليل التحديد
وظيفة xanal: تقوم بتحليل الوظيفة
إكسانال إكس: يقوم بإجراء تحليل قابل للتنفيذ بالكامل
xanalremove التحديد: يزيل تحليل التحديد السابق
وظيفة xanalremove: إزالة تحليل الوظيفة السابقة
xanalremove exe: يزيل التحليل القابل للتنفيذ بالكامل السابق
مساعدة xanal: يعرض بعض نصوص المساعدة في نافذة السجل
- تم إصلاح التحليل التلقائي الذي لا يبدأ عند بدء التشغيل (الإغلاق رقم 18)
- تم إصلاح ملفات تعريف API المختلفة (الإغلاق رقم 17)
محلل 2.4
- ملفات تعريف API جديدة ومحسنة مع مخطط معدل قليلاً (13000 API من حوالي 200 DLL)
- نظام التعرف على الرموز لكل وسيطة تعريف API مستخدمة (1000+ أنواع بيانات التعدادات و800+ علامة)
- التعرف على أنواع البيانات المعلمات (BOOL، NUMERIC، NON-NUMERIC)
- الكشف عن بذرة VB "DllFunctionCall".
- أصبحت السلاسل التي تم تمريرها كوسيطات أكثر نظافة الآن (تم الآن تجريد جزء العنوان من تعليقات مصحح الأخطاء)
- تمت إضافة ملخص التنفيذ إلى نافذة السجل
- تمت إزالة ميزة مفاتيح التشغيل السريع (سيتم دمجها في المراجعات المستقبلية) بسبب بعض التعارض مع x64dbg
- تم إصلاح الخلل المختلفة
xAnalyzer 2.3.1
- تم إصلاح الخلل عند تشغيل قائمة "تحليل التحديد" مع تحديد سطر واحد، وهو ما تسبب في استثناء dbg المفاجئ (بفضل @blaquee)
- تحقق من وجود مجلد ملفات التعريف "apis_def" وملفات التعريف بداخله قبل تحميل البرنامج الإضافي
- تم تغيير مفاتيح التشغيل السريع إلى Ctrl+Shift+X للاختيار وCtrl+X للوظائف
محلل 2.3
- تمت إضافة خيار "تحليل الوظائف غير المحددة". (يتم إيقاف التشغيل بشكل افتراضي، ولا يتم تحليل أي شيء غير موجود في ملفات التعريف)
- تمت إضافة خيار "التحليل التلقائي" (يتم إيقافه افتراضيًا، وجعل التحليل عند التشغيل عند EP للملف القابل للتنفيذ الذي تم تصحيحه)
- تمت إضافة ميزة "تحليل التحديد" (يقوم بتحليل التعليمات المحددة، ويدعم المكالمات المحددة المتعددة)
- تمت إضافة ميزة "تحليل الوظيفة" (يقوم باكتشاف وتحليل الوظيفة الحالية تلقائيًا من العنوان المحدد)
- تمت إضافة ميزة "إزالة التحليل" من التحديد/الوظيفة/القابل للتنفيذ
- أضيفت اختصارات الأوامر
- أضيفت أيقونات جديدة
- أضيفت حفظ التكوين إلى ملف .ini
- تمت إضافة الكتابة بالأحرف الكبيرة لقيم الوسيطة الست عشرية
- ميزة إعادة الهيكلة "تحليل الملف القابل للتنفيذ" (يقوم بإجراء تحليل كامل للملف القابل للتنفيذ الحالي)
- القوائم المعاد هيكلتها
- يظهر مربع الحوار الجديد حول رقم الإصدار لتتبع التحديثات
- بعض إصلاحات الأخطاء الصغيرة
- تم إصلاح ودمج بعض ملفات تعريف API
- تحسينات السرعة والاستقرار
محلل 2.2
- أضيفت مؤشر تقدم التحليل
- أضيفت وضع عمق التحليل الجديد
-الآن يتم تنفيذ التحليل التلقائي فقط في حالة عدم وجود قاعدة بيانات احتياطية
- البق ثابتة
محلل 2.1
- الحجج العامة للوظائف غير المحددة والغواصات الداخلية
- تعليقات ووسائط الوظائف الذكية (تتم معالجة الوظائف التي تحتوي على وسيطات في المكدس فقط). يسمح هذا لـ xAnalyzer بإعطاء رؤية أوضح للكود من خلال معالجة هذه الوظائف والتعليق عليها باستخدام الوسائط الفعلية
- الكشف عن استدعاءات الوظائف غير المباشرة باستخدام نظام CALL -> DYNAMIC_MEMORY -> API
- الكشف عن استدعاءات الوظائف غير المباشرة باستخدام نظام CALL -> التسجيل/التسجيل + الإزاحة -> API
- الكشف عن استدعاءات الوظائف غير المباشرة باستخدام مخطط CALL -> JMP -> JMP -> API
- الكشف التلقائي عن الحلقات
- البق القاصر الثابتة
- إعادة ترتيب التعليمات البرمجية
محلل 2.0
- تقديم الدعم لx64 بت
- دعم تغيير ترتيب وسيطات استدعاء API في x64 بت
- دعم ملفات PDB معلومات إضافية في مكالمات API
- دعم مكالمات API المباشرة/غير المباشرة
- دعم وظائف API الثابتة التي تستدعي رمز الوحدة الرئيسية
- تم إصلاح العديد من ترتيب وسيطات استدعاءات API الخاطئة في ملفات التعريف. يمكن الآن اكتشاف المزيد من المكالمات والتعليق عليها بشكل صحيح
- بعض التحسينات والتعليمات البرمجية المكتوبة بشكل أفضل
- تم حل الأخطاء المختلفة
محلل x 1.2
- تحديث ملفات تعريف API
- أضيفت الدعم للملفات التنفيذية vc6 +
محلل x 1.1
- تم إصلاح المشكلة التي لم تظهر معلومات API على الملفات التنفيذية VC++ بسبب عدم تنظيف بنيات BASIC_INSTRUCTION_INFO بشكل صحيح قبل/بعد استخدامها في حلقة
- تمت إضافة/تحديث ملفات تعريف واجهة برمجة التطبيقات
- البق ثابتة
محلل x 1.0
- الإصدار الأولي
نرحب بالمساهمات بجميع أنواعها، ليس فقط في مجال العلاقات العامة ولكن أيضًا في شكل تقارير عن الأخطاء، والتوثيق، وما إلى ذلك.
يرجى مراعاة ما يلي:
نشكرك على استخدام البرنامج الإضافي xAnalyzer... ونتمنى لك عودة سعيدة للجميع!