
واجهة سطر أوامر أصلية للوكيل تغلّف IDA Pro IDALib لتحليل ثنائي عديم الحالة بمخرجات JSON: التفكيك، وفك الترجمة Hex-Rays، وCFG، والمراجع المتقاطعة، والسلاسل النصية، ومعالجة IDB على دفعات أو بالتوازي.
المتطلبات الأساسية: 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 في
الإعدادات لتغيير الموقع.
يفتح batch ملف IDB مرة واحدة ويشغّل كل عملية على ذلك المقبض (يحفظ مرة واحدة
في النهاية) — الأفضل عندما تحتاج عدة حقائق عن قاعدة بيانات واحدة. أما parallel
فيولّد عملية فرعية واحدة لكل قاعدة بيانات (IDALib ليس آمنًا للخيوط، لذا العزل
عبر العمليات) مع مجموعة عمال محدودة بـ --jobs — الأفضل للعينات الكثيرة.
يقبل -d مسارًا واحدًا، أو قائمة مفصولة بفواصل، أو glob (*.i64).
لا. عملية واحدة لكل IDB في المرة الواحدة. يحترم parallel ذلك بتوليد عملية
فرعية واحدة لكل قاعدة بيانات؛ للعمل اليدوي متعدد الوكلاء، امنح كل وكيل هدف
-d خاصًا به.
يولّد idalib-rs ارتباطات FFI الخاصة به في وقت الترجمة عبر تحليل ترويسات SDK
(bindgen). يُشحن SDK فقط مع ترخيص Hex-Rays الخاص بك ولا يُعاد توزيعه أو تضمينه
أبدًا — يربط الملف التنفيذي المبني تثبيت IDA الخاص بك في وقت التشغيل.
idalib-cli/
├── src/
│ ├── cli.rs # clap definitions; every command + -d/--db
│ ├── ops/ # metadata, comments, bookmarks, db, batch, parallel, ...
│ ├── session/ # config.toml handling
│ └── helpers/ # JSON output views
├── stubs/idalib/ # dev-only API stub (SDK-free checks, never shipped)
├── tests/ # integration tests
├── skills/idalib-cli/ # single agent skill (workflow guide)
└── examples/workflow.sh # runnable end-to-end example
إصدارات الأداة بصيغة x.y.z؛ فرع تطوير واحد وفرع إصدار واحد لكل إصدار فرعي:
| المرجع | الغرض | مثال |
|---|---|---|
main | أحدث تطوير (هدف دمج v*_dev) | — |
v0.9_dev | فرع التطوير للأداة 0.9.x | العمل الحالي |
v0.9_release | فرع مستقر للأداة 0.9.x (إصلاحات فقط) | backports |
v0.9.1 (tag) | نقطة الإصدار | الإصدار الحالي |
| إصدار الأداة | IDA المتوافق | idalib-rs |
|---|---|---|
| 0.9.x | 9.1 | 0.6.1 (مثبّت =0.6.1) |
التالي (v0.10_*) | إصدار IDA جديد | تبعية محدّثة |
دعم إصدار IDA جديد = ترقية تبعية idalib، وتحديث
[package.metadata.ida] في Cargo.toml، وفتح خط فرع جديد (v0.10_*).
يُوزَّع بموجب Apache License 2.0. يعلن حقل license في
Cargo.toml عن MIT OR Apache-2.0 للتوافق مع
تبعيات idalib-rs؛ يشحن هذا المستودع
نص Apache-2.0 فقط. لا تُودِع أو تُعِد توزيع IDA SDK أبدًا.