IDA Pro / IDA Free
الأداة القياسية والأكثر دقة في عالم الهندسة العكسية، تتميز بسرعتها الفائقة في تحليل الأكواد الضخمة ودعمها الواسع للمعالجات.
دليل IDA Pro / IDA Free — الدليل الشامل للمهندسين العكسيين
يُعد IDA (Interactive Disassembler) من شركة Hex-Rays المعيار الصناعي والاحترافي في مجال الهندسة العكسية للملفات الثنائية (Binary Reverse Engineering). تتوفر نسخة IDA Free مجاناً بدون مُعيد بناء كود (Decompiler)، بينما تضيف نسخ IDA Home / Pro معيد بناء الكود Hex-Rays، ومصحح أخطاء (Debugger)، ودعماً أوسع لمختلف المعماريات.
الإصدارات (Editions)
| الإصدار | التكلفة | معيد بناء الكود (Decompiler) | المعماريات المدعومة |
|---|---|---|---|
| Free | $0 | لا يوجد | x86 / x64 |
| Home | $365 سنويًا | نعم (معمارية واحدة) | x86 / x64 / ARM |
| Pro | $4–10k+ | نعم (الكل) | جميع المعماريات المدعومة |
في معظم المهام الاحترافية التي تتطلب استخدام Hex-Rays، يُعتبر إصدار Pro ضرورياً.
تحميل الملف الثنائي (Loading a binary)
- سحب الملف وإفلاته داخل IDA ← سيتعرف المحلل تلقائياً على النوع (PE, ELF, Mach-O, COFF, IntelHEX, raw, …).
- نافذة خيارات المحلل (Loader options) — عادة ما نضغط OK.
- يبدأ التحليل التلقائي (Auto-analysis) ويستغرق من ثوانٍ إلى دقائق حسب حجم الملف.
الواجهة الافتراضية (Layout)
| اللوحة | الغرض |
|---|---|
| IDA View-A | وضع المخطط الانسيابي (Graph mode) — اضغط Space للتحول للوضع النصي |
| Hex View | عرض الملف بنظام الستة عشر (Hex) |
| Strings | جميع النصوص المستخرجة من الملف |
| Imports / Exports | الدوال المستوردة والمصدرة |
| Functions | قائمة الدوال الموجودة في الملف |
| Structures / Local Types | محرر الأنواع والبيانات الهيكلية |
| Output | سجل العمليات (Log) |
Pseudocode (F5) | الكود المصدري المعاد بناؤه (عبر Hex-Rays) |
اختصارات لوحة المفاتيح الأساسية
| المفتاح | الإجراء |
|---|---|
Tab | التنقّل بين لغة التجميع (ASM) والكود المُعاد بناؤه |
F5 | إعادة بناء الكود للدالة الحالية (Decompile) |
N | إعادة تسمية (دالة، متغير، عنوان) |
Y | تحديد النوع (Set type) |
; | إضافة تعليق |
: | إضافة تعليق متكرر |
G | الانتقال إلى عنوان محدد |
H | التحويل بين النظام الست عشري والعشري |
X | عرض المراجع المتصالبة (Cross references) للرمز الحالي |
Ctrl+E | تحديد نقطة الدخول (Entry point) |
O | تحويل البايت إلى إزاحة (Offset) |
D | تحويل البايت إلى بيانات (Data) |
C | تحويل البايت إلى كود (Code) |
U | إلغاء التعريف (Undefine) |
Alt+P | تعديل خصائص الدالة |
Ctrl+S | حفظ قاعدة البيانات IDB (ينصح به باستمرار) |
Ctrl+L | مدير تواقيع المكتبات (FLIRT) |
سير عمل الكود المعاد بناؤه (Hex-Rays Workflow)
int __cdecl encrypt(char *data, int len) {
int v3; // edx
char v4; // dl
// انقر بزر الفأرة الأيمن ← Edit function: لإعادة التسمية وتحديد نوع القيمة المعادة
// اضغط Y على `len` ← لتغيير النوع إلى size_t
// اضغط `/` لإضافة تعليق على السطر
// اضغط F2 في وضع الكود المعاد بناؤه: لتعيين نقطة توقف (Break point) عند التصحيح
...
}
استخدم Ctrl+→ / Ctrl+← للتنقل في تاريخ القفزات. انقر بزر الفأرة الأيمن واختر Show pseudocode for ALL لإعادة بناء الكود للملف كاملاً في تبويبات متعددة.
تواقيع FLIRT — التعرف على دوال المكتبات
يأتي IDA مزوداً بتواقيع FLIRT signatures لمكتبات شهيرة مثل libc وMSVCRT وOpenSSL. تقوم هذه الميزة بإعادة تسمية دوال المكتبات تلقائياً عند التحميل. لإنشاء تواقيع مخصصة:
البرمجة والتطوير (Pro)
يدعم IDA لغتين للبرمجة النصية:
- IDC — لغة الماكرو الأصلية في IDA (تشبه C).
- IDAPython — مكتبة ربط للغة Python 3.
# مثال IDAPython — سرد جميع عمليات الاستدعاء لـ malloc
import idautils, idc, idaapi
malloc = idc.get_name_ea_simple("malloc")
for ref in idautils.CodeRefsTo(malloc, 0):
print(hex(ref), idc.GetDisasm(ref))
إضافات (Plugins) ينصح بها
- HexRaysCodeXplorer — تحسين التنقل في الكود المعاد بناؤه.
- Lighthouse — تغطية الكود (Code coverage) عبر تتبع DynamoRIO / PIN.
- Diaphora — مقارنة الملفات الثنائية (Binary diffing).
- Capa explorer — قواعد Mandiant لاكتشاف قدرات الملف الثنائي.
- ret-sync — مزامنة مؤشر IDA مع x64dbg / gdb / windbg.
- IDArling — العمل الجماعي لعدة مستخدمين على نفس الملف.
مصحح الأخطاء (Debugger)
يتضمن إصدار Pro مصحح أخطاء محلي (x64 / x86 / ARM)، وعن بُعد عبر ida-server أو windbg-remote.
| الإجراء | الاختصار |
|---|---|
| تشغيل (Run) | F9 |
| الخطوة التالية للداخل (Step into) | F7 |
| الخطوة التالية للأعلى (Step over) | F8 |
| تشغيل حتى المؤشر | F4 |
| تعيين نقطة توقف | F2 |
سير العمل عند تحليل عينة برمجية خبيثة (Malware)
- سحب الملف وقبول الإعدادات الافتراضية.
- تبويب النصوص (Strings) — ملاحظة روابط URL، مسارات الملفات، وأسماء الـ Mutex.
- الموارد المستوردة (Imports) — فحص دوال مثل
CryptEncryptوWriteProcessMemoryوCreateRemoteThread. - البحث عن الدوال الرئيسية مثل
mainأوWinMainأوDllMain. - اضغط F5 لإعادة بناء الكود، وحلل الدوال من الأعلى إلى الأسفل.
- أعد التسمية وحدد الأنواع كلما فهمت جزءاً من الكود؛ لتتحول قاعدة بيانات IDB إلى مستند توثيقي.
- شغل Capa Explorer: لتصنيف الدوال حسب قدراتها (مثل "اتصال HTTP" أو "تشفير بيانات").
- تصحيح الأخطاء (Debugging) اختيارياً في بيئة معزولة ومتحكم بها.
المشكلات الشائعة وحلولها (Bad output / fixes)
| العرض | الحل |
|---|---|
دالة غير محللة (تظهر علامة استفهام حمراء ?) | اضغط P عند بداية الدالة، أو D لتعريفها كبيانات ثم C لتحويلها لكود |
| الكود المعاد بناؤه غير منطقي | خطأ في نوع القيمة المعادة أو اتفاقية الاستدعاء (Calling convention)؛ استخدم Y لتصحيح التوقيع |
| ميزة FLIRT لم تعمل | لا يوجد توقيع مطابق؛ قم ببناء واحد أو استخدم lumina (بحث سحابي لإصدار Pro) |
| الأسماء المستوردة تظهر كأرقام فقط (Ordinals) | طبق قاعدة بيانات الـ API عبر File → Load file → Type Library |
منظور المحلل والدفاع
يُعد IDA المعيار الذهبي لمختبرات تحليل البرمجيات الخبيثة. يُفضل استخدامه بجانب:
- صناديق الرمل (Sandboxes) مثل ANY.RUN للتحليل الديناميكي.
- أداة Capa لاكتشاف القدرات الثابتة.
- قواعد YARA لتعريف مؤشرات الاختراق (IOCs).
الأمن العملياتي (OPSEC)
- رخصة IDA Pro شخصية لكل مستخدم — هناك اعتبارات قانونية حسب نطاق العمل.
- لا ترسل عينات برمجيات خبيثة حساسة إلى "Lumina" إذا كان نطاق المهمة يمنع الرفع السحابي.
أدوات ذات صلة
| الأداة | الفرق الجوهري |
|---|---|
| Ghidra | البديل المجاني المفتوح من وكالة الأمن القومي (NSA) — سير عمل مشابه وممتاز |
| Binary Ninja | واجهة أحدث، قابلة للبرمجة بسهولة، وسعر متوسط |
| radare2 / Cutter | مفتوح المصدر، يركز على واجهة السطر الأوامر |
| angr | للتنفيذ الرمزي (Symbolic execution) برمجياً |
| BinDiff | مقارنة الملفات الثنائية (مجاني من Google) |