
IDA Pro IDALib को स्टेटलेस, JSON-आउटपुट बाइनरी विश्लेषण के लिए रैप करने वाला एजेंट-नेटिव CLI: डिसअसेम्बली, Hex-Rays डीकंपाइलेशन, CFG, xrefs, strings, और बैच या समानांतर 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 = lib/thunk छोड़ें) |
idalib-cli -d <db> function -a <ea> | एक फ़ंक्शन: CFG, ब्लॉक, xrefs |
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] | किसी पते के xrefs (डिफ़ॉल्ट) या उससे (--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] | कच्चे बाइट्स (हेक्सडंप) या लिटिल-एंडियन पूर्णांक |
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> | कई DBs पर एक ऑप, प्रत्येक के लिए सबप्रोसेस |
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 | नए IDBs कहाँ बनाए जाते हैं (डिफ़ॉल्ट: बाइनरी के बगल में) |
| 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 कंपाइल समय पर SDK हेडर (bindgen) को पार्स करके अपनी FFI बाइंडिंग्स
जनरेट करता है। 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 होते हैं; प्रति माइनर एक dev + एक release ब्रांच:
| Ref | उद्देश्य | उदाहरण |
|---|---|---|
main | नवीनतम विकास (v*_dev का मर्ज लक्ष्य) | — |
v0.9_dev | टूल 0.9.x के लिए विकास ब्रांच | वर्तमान कार्य |
v0.9_release | टूल 0.9.x के लिए स्थिर ब्रांच (केवल फ़िक्स) | बैकपोर्ट्स |
v0.9.1 (tag) | रिलीज़ पॉइंट | वर्तमान रिलीज़ |
| टूल संस्करण | संगत IDA | idalib-rs |
|---|---|---|
| 0.9.x | 9.1 | 0.6.1 (पिन किया गया =0.6.1) |
अगला (v0.10_*) | नया IDA संस्करण | बंप की गई निर्भरता |
एक नए IDA संस्करण का समर्थन = idalib निर्भरता बंप करें, Cargo.toml में
[package.metadata.ida] अपडेट करें, एक नई ब्रांच लाइन (v0.10_*) खोलें।
Apache License 2.0 के अंतर्गत वितरित। Cargo.toml में license फ़ील्ड
idalib-rs निर्भरताओं के साथ संगतता के लिए
MIT OR Apache-2.0 घोषित करता है; यह रिपॉज़िटरी केवल Apache-2.0 टेक्स्ट शिप करती है।
IDA SDK को कभी कमिट या पुनर्वितरित न करें।