
واجهة سطر أوامر أصلية للوكيل تغلّف IDA Pro IDALib لتحليل ثنائي عديم الحالة بمخرجات JSON: التفكيك، وفك الترجمة Hex-Rays، وCFG، والمراجع المتقاطعة، والسلاسل النصية، ومعالجة IDB على دفعات أو بالتوازي.
واجهة سطر أوامر أصلية للوكلاء لـ IDA Pro IDALib — كل أمر يأخذ علامة -d/--db واحدة، وكل إجابة بصيغة JSON.
-d/--db <PATH> (ملف ثنائي أو ملف .i64)؛ لا خادم خلفي، ولا تتبع للجلسات.المتطلبات الأساسية: IDA Pro 9.1 (مرخّص، شُغّل مرة واحدة) · IDA 9.1 SDK مفكوك (وقت البناء فقط) · Rust + LLVM/Clang (متطلبات bindgen)
export IDADIR="/Applications/IDA Professional 9.1.app/Contents/MacOS" # IDA install dir
export IDASDKDIR=/path/to/idasdk91 # unpacked SDK (absolute path!)
git clone <this-repo> && cd idalib-cli
cargo install --path .
idalib-cli info # ✅ verify tool version, IDA version, license
الـ SDK مطلوب في وقت البناء فقط؛ يربط الملف التنفيذي مكتبات IDA المحلية لديك في وقت التشغيل. فحوصات التطوير بدون SDK:
cargo test --no-default-features --features stub-idalib.
كل أمر يحتاج -d/--db <PATH> — ملف IDB (.i64) أو ملف ثنائي (يُنشأ
IDB بجانبه عند أول استخدام). تقبل العناوين 0x401000 أو
401000. المخرجات دائمًا مستند JSON واحد؛ تذهب الأخطاء إلى stderr مع
رمز خروج غير صفري.
| الأمر | الوصف |
|---|---|
idalib-cli -d <bin-or-i64> db info | المسارات المُحلَّلة، حالة IDB، الحجم |
| الأمر | الوصف |
|---|---|
idalib-cli -d <db> meta | نوع الملف، المترجم، عدد البتات |
idalib-cli -d <db> processor | معلومات المعالج |
idalib-cli -d <db> segments | جميع المقاطع |
idalib-cli -d <db> segments-by-range -a <ea> | المقطع الذي يحتوي على عنوان |
idalib-cli -d <db> functions [-u] | قائمة الدوال (-u = تخطي المكتبات/thunk) |
idalib-cli -d <db> function -a <ea> | دالة واحدة: CFG، الكتل، المراجع المتقاطعة |
idalib-cli -d <db> disasm -a <ea> [-n N] | فك N تعليمة (الافتراضي 8) |
idalib-cli -d <db> decompile -a <ea> [--all-blocks] | شيفرة Hex-Rays الزائفة |
idalib-cli -d <db> insn -a <ea> | تعليمة واحدة (+ تصنيف group/is_call/is_ret) |
idalib-cli -d <db> strings | قائمة النصوص |
idalib-cli -d <db> names | المواقع المُسمّاة |
idalib-cli -d <db> xrefs [-a <ea>] [--all] [--from] | المراجع المتقاطعة إلى عنوان (افتراضي) أو منه (--from)، أو الكل |
idalib-cli -d <db> find --text <s> | البحث عن مطابقات نصية |
idalib-cli -d <db> find --imm 0x1337 | البحث عن مطابقات قيمة فورية |
idalib-cli -d <db> find --pattern 554889e5 | البحث عن نمط بايتات سداسي |
idalib-cli -d <db> bytes -a <ea> [-n N] [--width byte|word|dword|qword] | بايتات خام (hexdump) أو أعداد صحيحة little-endian |
idalib-cli -d <db> entries | نقاط الدخول |
| الأمر | الوصف |
|---|---|
idalib-cli -d <db> comments get|set|append|remove -a <ea> [-c "text"] | التعليقات |
idalib-cli -d <db> bookmarks list|add|get|remove -a <ea> [-d "desc"] | العلامات المرجعية |
idalib-cli -d <db> rename -a <ea> -n <name> | إعادة تسمية دالة / تسمية بيانات |
idalib-cli -d <db> set-type -a <ea> -t "int f(int, char *);" | تطبيق تعريف نوع C (نموذج دالة / نوع بيانات) |
idalib-cli -d <db> signatures --make [--only-pat] | توليد توقيعات FLIRT |
| الأمر | الوصف |
|---|---|
idalib-cli -d <db> batch -- <op> [<op>...] | عمليات متسلسلة، يُفتح IDB مرة واحدة |
idalib-cli parallel -d <list|glob> [--jobs N] -- <op> | عملية واحدة عبر قواعد بيانات كثيرة، عملية فرعية لكل واحدة |
idalib-cli info [--version|--ida|--all] | إصدار الأداة / IDA، الترخيص |
🔎 فرز ملف ثنائي غير معروف
idalib-cli -d ./sample meta # what is it? (filetype/compiler/bitness)
idalib-cli -d ./sample segments # memory layout
idalib-cli -d ./sample strings # quick hints
idalib-cli -d ./sample functions -u # user code only
🔍 التعمق في دالة
idalib-cli -d ./sample function -a 0x401000 # CFG + blocks + xrefs
idalib-cli -d ./sample decompile -a 0x401000 # read the pseudo-code
idalib-cli -d ./sample disasm -a 0x401000 -n 20 # or the raw instructions
idalib-cli -d ./sample xrefs -a 0x401000 --all # who calls it
📝 تدوين النتائج (تبقى عبر العمليات/الوكلاء)
idalib-cli -d ./sample comments set -a 0x401000 -c "parses config, see 0x402100"
idalib-cli -d ./sample bookmarks add -a 0x401000 -d "entry point"
idalib-cli -d ./sample comments get -a 0x401000 # verify
⚡ تحليل جماعي لعينات كثيرة
# first pass: create IDBs + overview for every sample
idalib-cli parallel -d "./samples/*.bin" -- "batch -- meta functions -u"
# deep pass: decompile one hot function in every IDB
idalib-cli parallel -d "./samples/*.i64" --jobs 8 -- "decompile -a 0x401000"
🔎 البحث وفحص البيانات الخام
idalib-cli -d ./sample find --text "MAGIC" # string hits
idalib-cli -d ./sample find --imm 0x1337 # immediate-value hits
idalib-cli -d ./sample find --pattern 554889e5 # byte pattern (prologue)
idalib-cli -d ./sample bytes -a 0x401000 -n 32 # hexdump
idalib-cli -d ./sample bytes -a 0x401000 --width qword -n 4
idalib-cli -d ./sample xrefs -a 0x401000 --from # outgoing refs (calls)
idalib-cli -d ./sample rename -a 0x401000 -n decrypt # label it
idalib-cli -d ./sample set-type -a 0x401000 -t "int f(const char *, int);" # set prototype
🤖 فحص مجمّع مناسب للوكلاء (مستند JSON واحد)
idalib-cli -d ./sample batch -- "meta" "segments" "functions -u" "decompile -a 0x401000"
دليل سير عمل الوكيل: skills/idalib-cli/SKILL.md؛ مثال
شامل قابل للتشغيل في examples/workflow.sh.
decompile){
"id": 7,
"start": "0x401000",
"end": "0x401080",
"size": 128,
"name": "main",
"blocks": 3,
"decompiled": true,
"pseudocode": "int __cdecl main(...) { ... }"
}
ملف اختياري ~/.idapro/idalib-cli/config.toml (المجلد الأساسي: $IDALIB_CLI_HOME):
| الحقل | الوصف |
|---|---|
| idadir | مجلد تثبيت IDA (الافتراضي: يُكتشف تلقائيًا) |
| idb_dir | مكان إنشاء ملفات IDB الجديدة (الافتراضي: بجانب الملف الثنائي) |
| default_db | يُستخدم عند حذف -d |
| save | حفظ IDB بعد كل أمر (الافتراضي true) |
| auto_analyse | تشغيل التحليل التلقائي الكامل عند إنشاء IDB (الافتراضي true) |
بجانب الملف الثنائي: ./target.bin → ./target.bin.i64. اضبط idb_dir في
الإعدادات لتغيير الموقع.