अपडेट पर वापस जाएँ
New releaseAug 20, 2026

rhabdomancer v0.10.0

भेद्यता अनुसंधान सहायक जो बाइनरी फ़ाइल में संभावित रूप से असुरक्षित API फ़ंक्शंस के कॉल्स का पता लगाता है।

साझा करें

rhabdomancer

build doc

"शोषणयोग्य बग तक का रास्ता अशोषणयोग्य बगों से पटा हुआ है।"

-- Mark Dowd

Rhabdomancer एक अत्यंत तेज़ IDA हेडलेस प्लगइन है जो किसी बाइनरी फ़ाइल में संभावित रूप से असुरक्षित API फ़ंक्शनों के कॉल का पता लगाता है। ऑडिटर इन उम्मीदवार बिंदुओं से बैकट्रेस करके ऐसे मार्ग खोज सकते हैं जो अविश्वसनीय इनपुट तक पहुँच की अनुमति देते हैं।

विशेषताएँ

  • IDA 9.x और idalib-rs Rust बाइंडिंग्स के कारण अत्यंत तेज़, हेडलेस उपयोगकर्ता अनुभव।
  • IDA द्वारा कार्यान्वित किसी भी आर्किटेक्चर के लिए कंपाइल किए गए C/C++ बाइनरी लक्ष्यों का समर्थन।
  • खराब API फ़ंक्शन कॉल स्थान stdout पर प्रिंट किए जाते हैं और IDB में चिह्नित किए जाते हैं।
    • IDA द्वारा पहचाने गए लाइब्रेरी कोड में कॉल स्थान (जैसे, FLIRT सिग्नेचर से मेल खाने वाला स्टैटिकली लिंक्ड रनटाइम) (lib) के रूप में लेबल किए जाते हैं।
    • स्टब्स के माध्यम से कॉल (जैसे, ELF बाइनरी के .plt एंट्री या PE और Mach-O बाइनरी के इम्पोर्ट स्टब्स, जो थंक्स के रूप में सूचीबद्ध होते हैं) को उनके कॉलर्स तक ट्रेस किया जाता है।
    • ELF बाइनरी में, एक फ़ंक्शन को जानबूझकर समान कॉल स्थानों के साथ दो बार सूचीबद्ध किया जाता है: एक बार इसके .plt स्टब के रूप में (थंक के रूप में चिह्नित) और एक बार इसके इम्पोर्ट के रूप में। प्रत्येक कॉल स्थान IDB में केवल एक बार चिह्नित किया जाता है।
  • ज्ञात खराब API फ़ंक्शन ऑडिट कार्य को प्राथमिकता देने में मदद करने के लिए खराबी के स्तरों में समूहीकृत हैं।
    • [BAD 0] उच्च प्राथमिकता - वे फ़ंक्शन जिन्हें आम तौर पर असुरक्षित माना जाता है।
    • [BAD 1] मध्यम प्राथमिकता - रोचक फ़ंक्शन जिन्हें असुरक्षित उपयोग मामलों के लिए जाँचा जाना चाहिए।
    • [BAD 2] निम्न प्राथमिकता - इन फ़ंक्शनों से जुड़े कोड पथों की सावधानीपूर्वक जाँच की जानी चाहिए।
  • ज्ञात खराब API फ़ंक्शनों की सूची अंतर्निहित है और इसे conf/rhabdomancer.toml पर आधारित कॉन्फ़िगरेशन फ़ाइल के साथ आसानी से अनुकूलित किया जा सकता है।
  • फ़ंक्शन नाम इन सजावटों के बिना मिलाए जाते हैं: अग्रणी बिंदु और अंडरस्कोर (जैसे, _strcpy), लाइब्रेरी उपनामों के उपसर्ग (जैसे, Universal CRT में __o_malloc, glibc में __libc_system और __GI___snprintf), और, केवल स्टब्स और ऐसे उपनामों के लिए, वह संख्यात्मक प्रत्यय जो IDA पहले से उपयोग में आने वाले नामों में जोड़ता है (जैसे, memset_0)।

[!NOTE] फ़ोर्टिफाइड फ़ंक्शन (जैसे, __strcpy_chk, जिसका उपयोग _FORTIFY_SOURCE के साथ बिल्ड करते समय strcpy के बजाय किया जाता है) जानबूझकर मिलाए नहीं जाते, क्योंकि वे सूचीबद्ध फ़ंक्शनों के चेक किए गए संस्करण हैं। उनके कॉल को भी चिह्नित करने के लिए, उन्हें स्पष्ट रूप से कस्टम कॉन्फ़िगरेशन में जोड़ें (जैसे, "__strcpy_chk" को strcpy के समान प्राथमिकता के साथ)।

लेख

यह भी देखें

इंस्टॉल करना

नवीनतम रिलीज़ प्राप्त करने का सबसे आसान तरीका crates.io के माध्यम से है:

  1. IDA डाउनलोड करें, इंस्टॉल करें और कॉन्फ़िगर करें (देखें https://hex-rays.com/ida-pro)।
  2. LLVM/Clang इंस्टॉल करें (देखें https://rust-lang.github.io/rust-bindgen/requirements.html)।
  3. Linux/macOS पर, निम्नानुसार इंस्टॉल करें:
    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
    

संकलन

वैकल्पिक रूप से, आप स्रोत से बना सकते हैं:

  1. IDA डाउनलोड, इंस्टॉल और कॉन्फ़िगर करें (देखें https://hex-rays.com/ida-pro)।
  2. LLVM/Clang इंस्टॉल करें (देखें https://rust-lang.github.io/rust-bindgen/requirements.html)।
  3. Linux/macOS पर, इस प्रकार संकलित करें:
    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
    

उपयोग

  1. सुनिश्चित करें कि IDA एक वैध लाइसेंस के साथ ठीक से कॉन्फ़िगर किया गया है।
  2. वैकल्पिक रूप से ज्ञात बुरे API फ़ंक्शनों की सूची को अनुकूलित करें: conf/rhabdomancer.toml की प्रतिलिपि बनाएँ (इसकी सटीक अंतर्निहित सूची के लिए वह टैग चुनें जो आपके इंस्टॉल किए गए संस्करण से मेल खाता हो), प्रतिलिपि को संपादित करें, और RHABDOMANCER_CONFIG पर्यावरण चर को उसके पथ पर सेट करें। फ़ाइल में high, medium, और low सरणियाँ परिभाषित होनी चाहिए, और कोई अन्य कुंजी नहीं। अन्यथा, अंतर्निहित सूची का उपयोग किया जाता है, जो बिल्ड समय पर conf/rhabdomancer.toml से बाइनरी में एम्बेड की जाती है (उस फ़ाइल को संपादित करने के लिए पुनर्निर्माण आवश्यक है)।
  3. सुनिश्चित करें कि यदि आपकी IDA स्थापना किसी गैर-मानक स्थान में है तो IDADIR पर्यावरण चर सेट है।
  4. निम्नानुसार चलाएँ:
    rhabdomancer <binary_file>
    
    कोई भी मौजूदा .i64 IDB फ़ाइल अपडेट की जाएगी; अन्यथा, एक नई IDB फ़ाइल बनाई जाएगी।
  5. परिणामी .i64 IDB फ़ाइल को IDA के साथ खोलें।
  6. View > Open subviews > Bookmarks चुनें
  7. अपने परिणामों का आनंद लें जो सुविधाजनक रूप से एक IDA विंडो में एकत्र किए गए हैं।

[!NOTE] Rhabdomancer चिह्नित कॉल स्थानों पर टिप्पणियाँ भी जोड़ता है। बुकमार्क और टिप्पणियाँ दोनों को [BAD n] <function_name> के रूप में टैग किया जाता है, जहाँ n प्राथमिकता स्तर है (0 = उच्च, 1 = मध्यम, 2 = निम्न), ताकि स्क्रिप्ट्स उनके लिए IDB में खोज कर सकें। यह प्रारूप रिलीज़ के अनुसार स्थिर है।

संगतता

केवल नवीनतम IDA रिलीज़ आधिकारिक रूप से समर्थित है, लेकिन पुराने संस्करण भी काम कर सकते हैं। निम्नलिखित तालिका प्रत्येक IDA संस्करण के लिए नवीनतम संगत रिलीज़ का सारांश प्रस्तुत करती है:

IDA संस्करणनवीनतम संगत रिलीज़
v9.0.240925v0.2.4
v9.0.241217v0.3.5
v9.1.250226v0.6.2
v9.2.250908v0.7.6
v9.3.260213v0.8.1
v9.3.260327v0.9.0
v9.3.260421v0.9.3
v9.4.260714वर्तमान रिलीज़
v9.4.260915वर्तमान रिलीज़

श्रेणियाँ