لقطة شاشة واجهة IDA Pro DisassemblerIDA Pro هو أداة تفكيك شهيرة تم استخدامها من قبل باحثي أمن المعلومات حول العالم لسنوات عديدة. نحن في التقنيات الإيجابية نستخدم هذه الأداة أيضًا. علاوة على ذلك ، تمكنا من تطوير
وحدة معالج التفكيك الخاصة بنا
لبنية المعالج الدقيق NIOS II ، مما يزيد من سرعة تحليل الشفرة وملاءمته.
اليوم سأخبرنا عن تاريخ هذا المشروع وأظهر ما حدث في النهاية.
الخلفية
بدأ كل شيء في عام 2016 ، عندما اضطررنا إلى تطوير وحدة المعالج الخاصة بنا لتحليل البرامج الثابتة في مهمة واحدة. تم إجراء التطوير من الصفر على الدليل
المرجعي للمعالج الكلاسيكي Nios II ، والذي كان حينها الأكثر صلة. في المجموع ، استغرق هذا العمل حوالي أسبوعين.
تم تطوير وحدة المعالج للإصدار 6.9 IDA. من أجل السرعة ، تم اختيار IDA Python. في المكان الذي توجد فيه وحدات المعالج - الدليل الفرعي procs داخل دليل تثبيت IDA Pro - هناك ثلاث وحدات Python: msp430 ، ebc ، spu. فيها ، يمكنك أن ترى كيف يتم ترتيب الوحدة وكيف يمكن تنفيذ وظيفة التفكيك الأساسية:
- تعليمات ومعاملات التحليل ،
- تبسيطها وعرضها ،
- إنشاء تعويضات ومراجع تبادلية ، وكذلك الكود والبيانات التي تشير إليها
- تجهيز منشآت التبديل،
- معالجة التلاعبات مع متغيرات المكدس والمكدس.
تم تنفيذ هذه الوظيفة تقريبًا في ذلك الوقت. لحسن الحظ ، كانت الأداة مفيدة في عملية العمل على مهمة أخرى ، تم خلالها استخدامها وصقلها بنشاط بعد ذلك بعام.
قررت مشاركة تجربة إنشاء وحدة المعالج مع المجتمع في PHDays 8. أثار العرض التقديمي اهتمامًا (تم
نشر تقرير الفيديو على موقع PHDays) ، حتى أن منشئ IDA Pro Ilfak Gilfanov كان حاضرًا. كان أحد أسئلته ما إذا كان دعم الإصدار IDA Pro قد تم تنفيذه 7. في ذلك الوقت لم يكن موجودًا ، ولكن بعد الأداء وعدت بعمل إصدار مناسب من الوحدة. هنا بدأ المرح.
الآن أحدث
دليل من Intel ، والذي تم استخدامه للتحقق من الأخطاء والتحقق منها. لقد نقحت الوحدة بشكل ملحوظ ، وأضفت عددًا من الميزات الجديدة ، بما في ذلك حل تلك المشاكل التي لم يكن بالإمكان هزيمتها من قبل. حسنًا ، بالطبع أضفت دعمًا للإصدار السابع من IDA Pro. إليك ما حدث.
نموذج برنامج NIOS II
NIOS II هو معالج برمجيات تم تطويره من أجل Altera FPGAs (الآن جزء من Intel). من وجهة نظر البرامج ، فإنه يحتوي على الميزات التالية: ترتيب البايت من نهاية صغيرة ، مساحة عنوان 32 بت ، مجموعة تعليمات 32 بت ، أي 4 بايت ، 32 تسجيل عام و 32 تسجيلات الأغراض الخاصة تستخدم لترميز كل أمر.
التفكيك ومراجع التعليمات البرمجية
لذا ، فتحنا ملفًا جديدًا في IDA Pro مع برنامج ثابت لمعالج NIOS II. بعد تثبيت الوحدة ، سنراها في قائمة معالجات IDA Pro. يظهر اختيار المعالج في الشكل.

افترض أن الوحدة لم تنفذ حتى التحليل الأساسي للأوامر. بالنظر إلى أن كل أمر يأخذ 4 بايت ، نقوم بتجميع البايتات في أربعة ، ثم سيبدو كل شيء على هذا النحو.

بعد تطبيق الوظائف الأساسية لتعليمات فك التشفير والمعاملات ، وعرضها على الشاشة ، وتحليل تعليمات نقل التحكم ، يتم تحويل مجموعة البايت من المثال أعلاه إلى الرمز التالي.

كما يتبين من المثال ، يتم إنشاء المراجع التبادلية أيضًا من أوامر نقل التحكم (في هذه الحالة ، يمكنك رؤية الانتقال الشرطي واستدعاء الإجراء).
أحد الخصائص المفيدة التي يمكن تنفيذها في وحدات المعالج هي تعليقات الأوامر. إذا قمت بتعطيل إخراج قيم البايت ومكّنت إخراج التعليقات ، فسيبدو نفس القسم من التعليمات البرمجية بالفعل مثل هذا.

هنا ، إذا واجهت رمز التجميع لبنية جديدة لك أولاً ، باستخدام التعليقات ، يمكنك فهم ما يحدث. علاوة على ذلك ، ستكون أمثلة الكود في نفس النموذج - مع التعليقات ، حتى لا ننظر إلى دليل NIOS II ، ولكن لفهم ما يحدث في قسم الكود على الفور ، والذي يتم تقديمه كمثال.
تعليمات زائفة وتبسيط الأوامر
بعض أوامر NIOS II هي تعليمات زائفة. لا توجد شفرات opc منفصلة لهذه الفرق ، وهم أنفسهم على غرار حالات خاصة لفرق أخرى. في عملية التفكيك ، يتم تبسيط التعليمات - استبدال تركيبات معينة بتعليمات زائفة. يمكن تقسيم التعليمات الزائفة في NIOS II بشكل عام إلى أربعة أنواع:
- عندما يكون أحد المصادر صفر (r0) ويمكن إزالته من الاعتبار ،
- عندما يكون للفريق قيمة سالبة ويتم استبدال الفريق بالعكس ،
- عندما يتم عكس الشرط ،
- عندما يتم إدخال إزاحة 32 بت في فريقين في أجزاء (الأصغر والأقدم) ويتم استبدال ذلك بأمر واحد.
تم تنفيذ النوعين الأولين ، لأن استبدال الشرط لا يعطي أي شيء خاص ، ولإزاحات 32 بت خيارات أكثر من تلك المعروضة في الدليل.
على سبيل المثال ، للعرض الأول ، خذ بعين الاعتبار الرمز.

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

متغيرات المكدس
يدعم بنية NIOS II المكدس ، بالإضافة إلى مؤشر المكدس sp ، يوجد أيضًا مؤشر لإطار مكدس fp. خذ بعين الاعتبار مثال على إجراء صغير يستخدم مكدس.

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

تبدو الشفرة الآن أوضح قليلاً ، ويمكنك بالفعل تسمية متغيرات المكدس وتحليل غرضها باتباع المراجع التبادلية. الدالة في المثال هي من النوع __fastcall ويتم دفع الوسيطات الخاصة بها في السجلات r4 و r5 إلى المكدس لاستدعاء إجراء فرعي من النوع _stdcall.
أرقام وتعويضات 32 بت
تكمن خصوصية NIOS II في أنه في عملية واحدة ، أي عند تنفيذ أمر واحد ، من الممكن تسجيل قيمة مباشرة بحد أقصى 2 بايت (16 بت). من ناحية أخرى ، فإن تسجيلات المعالج ومساحة العنوان هي 32 بت ، أي للعنونة ، يجب إدخال 4 بايت في التسجيل.
لحل هذه المشكلة ، يتم استخدام النزوح من جزأين. يتم استخدام آلية مماثلة في المعالجات في PowerPC: يتكون الإزاحة من جزأين ، الأقدم والأصغر ، ويتم إدخاله في التسجيل بواسطة أمرين. في PowerPC ، هذا على النحو التالي.

في هذا النهج ، يتم تكوين الروابط المتقاطعة من كلا الفريقين ، على الرغم من أنه في الواقع ، يتم تكوين العنوان في الأمر الثاني. قد يكون هذا في بعض الأحيان مصدر إزعاج عند حساب عدد المراجع التبادلية.
تستخدم خصائص الإزاحة للجزء الأقدم النوع غير القياسي HIGHA16 ، وأحيانًا يتم استخدام النوع HIGH16 ، للجزء الأصغر - LOW16.

لا يوجد شيء معقد في حساب الأرقام المكونة من جزأين 32 بت. تنشأ الصعوبات في تشكيل المعاملات كإزاحة لفريقين منفصلين. كل هذه المعالجة تقع على وحدة المعالج. لا توجد أمثلة على كيفية تنفيذ ذلك (خاصة في Python) في IDA SDK.
في التقرير عن PHDays ، وقف التحيز كمشكلة لم يتم حلها. لحل المشكلة ، غشنا: إزاحة 32 بت فقط من الجزء الأصغر - على القاعدة. يتم احتساب القاعدة على أنها الجزء الأقدم ، وتحولت إلى اليسار بمقدار 16 بت.

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

في التعليمات البرمجية لـ NIOS II ، تم العثور على الآلية التالية لإدخال أرقام 32 بت في التسجيل. أولاً ، يتم إدخال الجزء الأقدم من الإزاحة في التسجيل باستخدام الأمر movhi. ثم ينضم إليها الجزء الأصغر. يمكن القيام بذلك بثلاث طرق (عن طريق الأوامر): إضافة addi وطرح subi و logical OR ori.
على سبيل المثال ، في القسم التالي من التعليمات البرمجية ، يتم تعيين التسجيلات على أرقام 32 بت ، والتي يتم إدخالها بعد ذلك في السجلات - الوسيطات قبل استدعاء الوظيفة.

بعد إضافة حساب الإزاحة ، نحصل على التمثيل التالي لكتلة التعليمات البرمجية هذه.

يتم عرض إزاحة 32 بت الناتجة بجوار الأمر لإدخال الجزء السفلي. هذا المثال توضيحي تمامًا ، ويمكننا بسهولة حساب جميع أرقام 32 بت في العقل ببساطة عن طريق إضافة الأجزاء الثانوية والعليا. إذا حكمنا من خلال القيم ، فمن المرجح أنها ليست تحيزات.
ضع في اعتبارك الحالة عند استخدام الطرح عند دخول الجزء الأصغر. في هذا المثال ، لن يكون من الممكن تحديد أرقام 32 بت النهائية (الإزاحة) أثناء الحركة.

بعد تطبيق حساب أرقام 32 بت ، نحصل على النموذج التالي.

هنا نرى أنه الآن ، إذا كان العنوان في مساحة العنوان ، يتم تكوين إزاحة عليه ، ولم تعد القيمة التي تم تكوينها نتيجة لربط الأجزاء الصغيرة والكبيرة بجوارها. هنا حصلوا على تعويض عن طريق الخط "10/22/08". بحيث تشير بقية الإزاحات إلى عناوين صالحة ، فلنقم بزيادة الجزء قليلاً.

بعد زيادة المقطع ، نحصل الآن على أن جميع أرقام 32 بت المحسوبة هي تعويضات وتشير إلى عناوين صالحة.
ذكر أعلاه أن هناك خيارًا آخر لحساب الإزاحات عند استخدام أمر OR المنطقي. فيما يلي مثال لرمز حيث يتم حساب تعويضين بهذه الطريقة.

ثم يتم دفع تلك التي يتم تقييمها في سجل r8 إلى المكدس.
بعد التحويل ، يمكن ملاحظة أنه في هذه الحالة يتم تكوين السجلات على عناوين بداية الإجراءات ، أي يتم دفع عنوان الإجراء إلى المكدس.

القراءة والكتابة بالنسبة للقاعدة
قبل ذلك ، نظرنا في الحالات التي يمكن أن يكون فيها رقم 32 بت الذي تم إدخاله باستخدام أمرين مجرد رقم وإزاحة أيضًا. في المثال التالي ، يتم إدخال القاعدة في الجزء العلوي من السجل ، ثم تتم القراءة أو الكتابة بالنسبة له.

بعد معالجة مثل هذه الحالات ، نحصل على الإزاحة للمتغيرات من أوامر القراءة والكتابة نفسها. علاوة على ذلك ، اعتمادًا على بُعد العملية ، يتم تعيين حجم المتغير نفسه.

تبديل الإنشاءات
يمكن لمفاتيح التبديل الموجودة في الملفات الثنائية تسهيل التحليل. على سبيل المثال ، من خلال عدد حالات التحديد داخل بنية المحول ، يمكنك توطين المحول المسؤول عن معالجة بروتوكول أو نظام أوامر معين. لذلك ، تنشأ المهمة عن التعرف على المفتاح نفسه ومعلماته. جرب المقطع التالي من التعليمات البرمجية.

يتوقف مؤشر ترابط التنفيذ عند انتقال تسجيل jmp r2. علاوة على ذلك ، هناك كتل من التعليمات البرمجية التي تحتوي على روابط من البيانات ، وفي نهاية كل كتلة هناك قفزة إلى نفس التسمية. من الواضح أن هذا عبارة عن مفتاح تبديل وتعالج هذه الكتل الفردية حالات معينة منه. أعلاه يمكنك أيضًا رؤية التحقق من عدد الحالات والقفزة الافتراضية.
بعد إضافة معالجة التبديل ، سيبدو هذا الرمز على هذا النحو.

الآن يشار إلى القفزة نفسها ، عنوان الجدول مع الإزاحات ، عدد الحالات ، بالإضافة إلى كل حالة بالرقم المقابل.
الجدول نفسه مع تعويض للخيارات على النحو التالي. لتوفير المساحة ، يتم إعطاء العناصر الخمسة الأولى.

في الواقع ، تتكون معالجة المفتاح من الرجوع عبر الرمز والبحث عن جميع مكوناته. وهذا هو ، يتم وصف بعض مخطط التبديل المنظمة. في بعض الأحيان قد تكون هناك استثناءات في المخططات. قد يكون هذا هو السبب في الحالات التي لا يتم فيها التعرف على المفاتيح الواضحة في وحدات المعالج الحالية. اتضح أن المفتاح الحقيقي ببساطة لا يندرج تحت المخطط المحدد داخل وحدة المعالج. لا تزال هناك خيارات ممكنة عندما يبدو أن الدائرة موجودة ، ولكن هناك فرق أخرى داخلها لا تشارك في الدائرة ، أو يتم إعادة ترتيب الفرق الرئيسية ، أو يتم كسرها عن طريق التحولات.
تتعرف وحدة المعالج NIOS II على مفتاح يحتوي على تعليمات "غريبة" بين الأوامر الرئيسية ، وكذلك مع الأماكن التي تمت إعادة ترتيبها للأوامر الرئيسية ومع وجود فواصل تقطع الدائرة. يتم استخدام مسار الإرجاع على طول مسار التنفيذ ، مع مراعاة التحولات المحتملة التي تقطع الدائرة ، مع تثبيت المتغيرات الداخلية التي تشير إلى حالات مختلفة من أداة التعرف. ونتيجة لذلك ، تم التعرف على حوالي 10 خيارات تنظيمية مختلفة موجودة في البرامج الثابتة.
تعليمات مخصصة
هناك ميزة مثيرة للاهتمام في بنية NIOS II - التعليمات المخصصة. يتيح الوصول إلى 256 تعليمات محددة من قبل المستخدم والتي يمكن أن تكون في بنية NIOS II. في عملها ، بالإضافة إلى السجلات ذات الأغراض العامة ، يمكن للتعليمات المخصصة الوصول إلى مجموعة خاصة من 32 سجلًا مخصصًا. بعد تنفيذ منطق تحليل الأمر المخصص ، نحصل على النموذج التالي.

قد تلاحظ أن التعليمات الأخيرة لها نفس رقم التعليمات ويبدو أنها تؤدي نفس الإجراءات.
وفقًا للتعليمات المخصصة ، يوجد
دليل منفصل . ووفقًا له ، فإن أحد أكثر الخيارات شمولًا وتحديثًا لمجموعة التعليمات المخصصة هو مجموعة تعليمات NIOS II Floating Point Hardware 2 (FPH2) للعمل مع النقطة العائمة. بعد تنفيذ تحليل أوامر FPH2 ، سيبدو المثال هكذا.

من فن الإستذكار في الفريقين الأخيرين ، نتأكد من أنهم يؤدون نفس الإجراء حقًا - الأمر fadds.
الانتقالات حسب قيمة التسجيل
في البرامج الثابتة قيد التحقيق ، غالبًا ما تتم مواجهة موقف عند إجراء قفزة وفقًا لقيمة السجل ، حيث يتم إدخال إزاحة 32 بت ، والتي تحدد مكان القفزة ، من قبل.
ضع في اعتبارك قطعة من الرمز.

في السطر الأخير هناك قفزة في قيمة التسجيل ، بينما من الواضح أنه قبل إدخال عنوان الإجراء في السجل ، والذي يبدأ في السطر الأول من المثال. في هذه الحالة ، من الواضح أن القفزة تتم منذ بدايتها.
بعد إضافة وظيفة التعرف على القفزات ، يتم الحصول على النموذج التالي.

بجوار الأمر jmp r8 ، يتم عرض العنوان الذي تحدث فيه القفزة إذا كان من الممكن الحساب. يتم تشكيل مرجع تبادلي أيضًا بين الفريق والعنوان الذي تحدث فيه القفزة. في هذه الحالة ، يكون الارتباط مرئيًا في السطر الأول ، ويتم تنفيذ القفزة نفسها من السطر الأخير.
قيمة تسجيل Gp (المؤشر العام) ، حفظ وتحميل
من الشائع استخدام مؤشر عام تم تكوينه لبعض العناوين ، ويتم التعامل مع المتغيرات المتعلقة به. يستخدم NIOS II سجل gp (المؤشر العام) لتخزين المؤشر العام. في مرحلة ما ، كقاعدة ، في إجراءات التهيئة للبرنامج الثابت ، يتم إدخال قيمة العنوان في سجل gp. يعالج وحدة المعالج هذا الموقف؛ لتوضيح ذلك ، فيما يلي أمثلة التعليمات البرمجية ونافذة إخراج IDA Pro عند تمكين رسائل التصحيح في وحدة المعالج.
في هذا المثال ، تبحث وحدة المعالج وتحسب قيمة تسجيل gp في قاعدة البيانات الجديدة. عند إغلاق قاعدة بيانات idb ، يتم تخزين قيمة gp في قاعدة البيانات.

عند تحميل قاعدة بيانات idb موجودة وإذا تم العثور على قيمة gp بالفعل ، يتم تحميلها من قاعدة البيانات ، كما هو موضح في رسالة التصحيح في المثال التالي.

القراءة والكتابة بخصوص GP
العمليات الشائعة هي القراءة والكتابة مع إزاحة نسبة إلى سجل gp. على سبيل المثال ، في المثال التالي ، يتم تنفيذ ثلاث قراءات وسجل واحد من هذا النوع.

نظرًا لأننا حصلنا بالفعل على قيمة العنوان المخزن في سجل gp ، يمكننا معالجة هذا النوع من القراءة والكتابة.
بعد إضافة معالجة لقراءة وكتابة المواقف المتعلقة بسجل gp ، نحصل على صورة أكثر ملاءمة.

هنا يمكنك معرفة المتغيرات التي يتم الوصول إليها ، وتتبع استخدامها وتحديد الغرض منها.
العنوان المتعلق بـ gp
هناك استخدام آخر لسجل GP لمعالجة المتغيرات.

على سبيل المثال ، نرى هنا أن السجلات قد تم تكوينها بالنسبة إلى سجل gp لبعض المتغيرات أو مناطق البيانات.
بعد إضافة وظيفة تتعرف على مثل هذه المواقف ، وتتحول إلى تعويضات وتضيف إسنادات ترافقية ، نحصل على النموذج التالي.

هنا يمكنك أن ترى بالفعل المناطق المتعلقة بسجلات gp التي تم تكوينها ، ويصبح أكثر وضوحًا ما يحدث.
معالجة بالنسبة ل س
وبالمثل ، في المثال التالي ، يتم ضبط التسجيلات على بعض مناطق الذاكرة ، هذه المرة بالنسبة لمؤشر sp - المؤشر إلى المكدس.

من الواضح ، يتم ضبط السجلات على بعض المتغيرات المحلية. مثل هذه المواقف - تعيين الحجج للمخازن المؤقتة المحلية قبل استدعاءات الإجراءات - شائعة بما يكفي.
بعد إضافة المعالجة (تحويل القيم المباشرة إلى الإزاحات) ، نحصل على النموذج التالي.

الآن أصبح من الواضح أنه بعد استدعاء الإجراء ، يتم تحميل القيم من تلك المتغيرات التي تم تمرير عناوينها كمعلمات قبل استدعاء الوظيفة.
إسنادات ترافقية من التعليمات البرمجية إلى حقول البنية
يمكن أن يسهل تحديد الهياكل واستخدامها في IDA Pro تحليل التعليمات البرمجية.

بالنظر إلى هذا الجزء من الشفرة ، يمكننا أن نفهم أن الحقل field_8 يزداد ، وربما هو عداد لحدوث حدث. إذا تم فصل حقول القراءة والكتابة في الرمز على مسافة كبيرة ، يمكن أن يساعد الإسناد الترافقي.
النظر في الهيكل نفسه.
على الرغم من أن الوصول إلى حقول الهياكل ، كما نرى ، لا توجد إحالات مرجعية من الرمز إلى عناصر الهياكل.بعد معالجة مثل هذه الحالات ، سيبدو كل شيء بالنسبة لحالتنا على النحو التالي.
الآن هناك إحالات مرجعية لحقول الهيكل من فرق محددة تعمل مع هذه الحقول. يتم إنشاء إسنادات ترافقية للأمام وللخلف ، ويمكنك التتبع بإجراءات مختلفة حيث تتم قراءة قيم حقول الهيكل وأين يتم إدخالها.التناقضات بين الدليل والواقع
في الدليل ، عند فك تشفير بعض الأوامر ، يجب أن تأخذ بعض البتات قيمًا محددة بدقة. على سبيل المثال ، بالنسبة لأمر رجوع من استثناء eret ، يجب أن تكون البتات 22–26 بت 0x1E.
فيما يلي مثال لهذا الأمر من أحد البرامج الثابتة.
عند فتح برنامج ثابت آخر في مكان له سياق مشابه ، نواجه حالة مختلفة.
لم يتم تحويل هذه البايتات تلقائيًا إلى أمر ، على الرغم من وجود معالجة لجميع الأوامر. إذا حكمنا من خلال البيئة ، وحتى عنوان مشابه ، يجب أن يكون هذا هو نفس الفريق. دعونا ننظر بعناية في البايت. هذا هو نفس الأمر eret ، باستثناء أن البتات 22-26 لا تساوي 0x1E ، ولكنها تساوي الصفر.علينا إصلاح تحليل هذا الأمر قليلاً. الآن لا يتوافق تمامًا مع الدليل ، لكنه يتوافق مع الواقع.
دعم المؤسسة الدولية للتنمية 7
بدءًا من 7.0 IDA ، تغيرت واجهة برمجة التطبيقات التي توفرها Python IDA للنصوص العادية كثيرًا. أما بالنسبة لوحدات المعالج ، فالتغييرات هائلة. على الرغم من ذلك ، كانت وحدة المعالج NIOS II قادرة على تجديد الإصدار 7 ، وعملت بنجاح فيه.
اللحظة الوحيدة غير المفهومة: عند تحميل ملف ثنائي جديد ضمن NIOS II في IDA 7 ، لا يحدث التحليل التلقائي الأولي الموجود في IDA 6.9.الخلاصة
بالإضافة إلى وظائف التفكيك الأساسية ، التي توجد أمثلة عليها في SDK ، تطبق وحدة المعالج العديد من الميزات المختلفة التي تسهل عمل مستكشف الكود. من الواضح أن كل هذا يمكن القيام به يدويًا ، ولكن ، على سبيل المثال ، عندما يكون هناك الآلاف وعشرات الآلاف من الإزاحات من أنواع مختلفة في ملف ثنائي مع برنامج ثابت يحتوي على بضعة ميغابايت ، فلماذا تقضي وقتًا في ذلك؟ دع وحدة المعالج تفعل ذلك من أجلنا. بعد كل شيء ، كيف هي الميزات الرائعة للملاحة السريعة من خلال الكود المدروس باستخدام المراجع التبادلية! وهذا يجعل المؤسسة الدولية للتنمية أداة مريحة وممتعة كما نعرفها.نشره أنطون دورمان ، تقنيات إيجابية