
مساعد أبحاث الثغرات الأمنية الذي يحدد مواقع استدعاءات دوال API التي قد تكون غير آمنة في ملف ثنائي.
"الطريق إلى الثغرات القابلة للاستغلال مفروش بالثغرات غير القابلة للاستغلال."
-- Mark Dowd
Rhabdomancer هي إضافة IDA سريعة للغاية تعمل بدون واجهة رسومية (headless) وتحدد مواقع استدعاءات دوال API التي قد تكون غير آمنة في ملف ثنائي. يمكن للمدققين تتبع الأثر عكسيًا من هذه النقاط المرشحة للعثور على المسارات التي تسمح بالوصول إلى مدخلات غير موثوقة.

(lib)..plt في الملفات الثنائية ELF أو stubs الاستيراد في الملفات الثنائية PE وMach-O،
والمدرجة كـ thunks) تُتبَّع عكسيًا إلى مستدعيها..plt
(موسوم كـ thunk) ومرة كاستيراد لها. يُعلَّم كل موقع استدعاء مرة واحدة فقط في IDB.conf/rhabdomancer.toml._strcpy)، وبادئات
أسماء المكتبات المستعارة (مثل __o_malloc في Universal CRT، و__libc_system و__GI___snprintf في glibc)، و،
بالنسبة للـ stubs وهذه الأسماء المستعارة فقط، اللاحقة الرقمية التي يضيفها IDA إلى الأسماء المستخدمة بالفعل (مثل memset_0).[!NOTE] الدوال المحصَّنة (مثل
__strcpy_chk، المستخدمة بدلًا منstrcpyعند البناء باستخدام_FORTIFY_SOURCE) لا تُطابَق عمدًا، لأنها النسخ المفحوصة من الدوال المدرجة. لتحديد استدعاءاتها أيضًا، أضفها صراحةً إلى إعدادات مخصصة (مثل"__strcpy_chk"بنفس أولويةstrcpy).
أسهل طريقة للحصول على أحدث إصدار هي عبر crates.io:
export IDADIR=/path/to/ida # if not set, the build script will check common locations
cargo install rhabdomancer --locked
على Windows، بدلاً من ذلك، استخدم الأوامر التالية:
$env:LIBCLANG_PATH="\path\to\clang+llvm\bin"
$env:PATH="\path\to\ida;$env:PATH"
$env:IDADIR="\path\to\ida" # if not set, the build script will check common locations
cargo install rhabdomancer --locked
بدلاً من ذلك، يمكنك البناء من المصدر:
git clone --depth 1 https://github.com/0xdea/rhabdomancer
cd rhabdomancer
export IDADIR=/path/to/ida # if not set, the build script will check common locations
cargo build --release --locked
على Windows، بدلاً من ذلك، استخدم الأوامر التالية:
git clone --depth 1 https://github.com/0xdea/rhabdomancer
cd rhabdomancer
$env:LIBCLANG_PATH="\path\to\clang+llvm\bin"
$env:PATH="\path\to\ida;$env:PATH"
$env:IDADIR="\path\to\ida" # if not set, the build script will check common locations
cargo build --release --locked
conf/rhabdomancer.toml (اختر الوسم
الذي يطابق نسختك المثبّتة للحصول على قائمته المدمجة الدقيقة)، وحرّر النسخة، واضبط متغير البيئة RHABDOMANCER_CONFIG
على مساره. يجب أن يعرّف الملف المصفوفات high وmedium وlow، دون أي مفاتيح أخرى.
وإلا، تُستخدم القائمة المدمجة، وهي مضمّنة في الملف الثنائي وقت البناء من conf/rhabdomancer.toml
(تحرير ذلك الملف يتطلب إعادة البناء).IDADIR إذا كان تثبيت IDA لديك في موقع غير قياسي.rhabdomancer <binary_file>
سيتم تحديث أي ملف IDB .i64 موجود؛ وإلا، سيتم إنشاء ملف IDB جديد..i64 الناتج باستخدام IDA.View > Open subviews > Bookmarks[!NOTE] يضيف Rhabdomancer أيضًا تعليقات عند مواقع الاستدعاء المحددة. يتم وسم كل من الإشارات المرجعية والتعليقات بـ
[BAD n] <function_name>، حيثnهو مستوى الأولوية (0 = عالٍ، 1 = متوسط، 2 = منخفض)، حتى تتمكن السكربتات من البحث عنها في قواعد بيانات IDB. هذا التنسيق مستقر عبر الإصدارات.
يُدعم رسميًا أحدث إصدار من IDA فقط، لكن الإصدارات الأقدم قد تعمل أيضًا. يلخص الجدول التالي أحدث إصدار متوافق مع كل إصدار من IDA:
| إصدار IDA | أحدث إصدار متوافق |
|---|---|
| v9.0.240925 | v0.2.4 |
| v9.0.241217 | v0.3.5 |
| v9.1.250226 | v0.6.2 |
| v9.2.250908 | v0.7.6 |
| v9.3.260213 | v0.8.1 |
| v9.3.260327 | v0.9.0 |
| v9.3.260421 | v0.9.3 |
| v9.4.260714 | الإصدار الحالي |
| v9.4.260915 | الإصدار الحالي |
[!NOTE] راجع وثائق idalib-rs للحصول على معلومات إضافية.
حظي تطوير هذا المشروع بدعم المنظمات التالية: