
إضافة تفاعلية لتعديل الملفات الثنائية لـ IDA Pro

ليس من غير المألوف تعديل كود التجميع لتغيير سلوك برنامج قائم في تحليل البرمجيات الضارة وهندسة البرمجيات العكسية ومجالات أوسع من أبحاث الأمان. يمتد هذا المشروع من برنامج التفكيك الشهير IDA Pro لإنشاء سير عمل تفاعلي أكثر متانة للتصحيح الثنائي مصمم للتكرار السريع.
هذا المشروع حاليًا مدعوم بواسطة fork صغير من محرك Keystone الشائع، ويدعم تصحيح x86/x64 و Arm/Arm64 مع خطط لتمكين بنيات Keystone المتبقية في إصدار مستقبلي.
شكر خاص لـ Hex-Rays لدعم تطوير هذه الإضافة.
تتطلب هذه الإضافة IDA 7.6 و Python 3. وهي تدعم Windows و Linux و macOS.
يرجى ملاحظة أن الإصدارات الأقدم من IDA (8.2 وما دون) غير متوافقة مع Python 3.11 وما فوق.
قم بتشغيل السطر التالي في وحدة تحكم IDA لتثبيت الإضافة تلقائيًا:
import urllib.request as r; exec(r.urlopen('https://github.com/gaasedelen/patching/raw/main/install.py').read())
import urllib.request as r; exec(r.urlopen('https://github.com/gaasedelen/patching/raw/main/install.py', cafile='/etc/ssl/cert.pem').read())
بدلاً من ذلك، يمكن تثبيت الإضافة يدويًا عن طريق تنزيل حزمة الإضافة القابلة للتوزيع لمنصتك من صفحة الإصدارات وفك ضغطها إلى مجلد الإضافات الخاص بك.
يوصى بشدة بتثبيت هذه الإضافة في دليل إضافات المستخدم في IDA:
import ida_diskio, os; print(os.path.join(ida_diskio.get_user_idadir(), "plugins"))
سيتم تحميل إضافة التصحيح تلقائيًا للبنيات المدعومة (x86/x64/Arm/Arm64) وحقن إجراءات التصحيح ذات الصلة في قائمة السياق بزر الفأرة الأيمن لطرق عرض التفكيك في IDA:

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

سطر التجميع هو حقل قابل للتحرير يمكن استخدامه لتعديل التعليمات في الوقت الفعلي. سيؤدي الضغط على Enter إلى تأكيد (تصحيح) التعليمة المُدخلة في قاعدة البيانات.
سيتم تمييز موقعك الحالي (أي المؤشر) دائمًا باللون الأخضر. سيتم تمييز التعليمات التي ستتم الكتابة فوقها نتيجة للتصحيح / التحرير باللون الأحمر قبل تأكيد التصحيح.

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

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

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

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

بينما من 'السهل' إعادة البايتات إلى قيمتها الأصلية، قد يكون من 'الصعب' استعادة التحليل إلى حالته السابقة. قد يتطلب التراجع عن التصحيح أحيانًا إصلاحات يدوية إضافية.
إذا سمح الوقت والدافع، فقد يتضمن العمل المستقبلي:
xor eax, eax; ret;)Pretty: mov [rsp+48h+dwCreationDisposition], 3
Raw: mov [rsp+20h], 3
أرحب بالمساهمات الخارجية، والإبلاغ عن المشكلات، وطلبات الميزات. يرجى تقديم أي طلبات سحب إلى فرع develop من هذا المستودع إذا كنت ترغب في النظر فيها لإصدار مستقبلي.