
बाइनरी कंट्रोल फ्लो ग्राफ्स में उपयोगकर्ता-परिभाषित ग्राफ पैटर्न को परिभाषित और मिलाएं, एक Capstone-आधारित डिसअसेंबलर का उपयोग करके, CLI, Python bindings और IDA प्लगइन समर्थन के साथ।
grap पैटर्न और बाइनरी फ़ाइलें लेता है, बाइनरी से नियंत्रण प्रवाह ग्राफ़ प्राप्त करने के लिए एक Capstone-आधारित डिसअसेंबलर का उपयोग करता है, फिर उनके विरुद्ध पैटर्न का मिलान करता है।
पैटर्न उपयोगकर्ता-परिभाषित ग्राफ़ होते हैं जिनमें निर्देश शर्तें ("opcode xor है और arg1 eax है") और पुनरावृत्ति शर्तें (3 समान निर्देश, मूल ब्लॉक...) शामिल होते हैं।
grap एक डिसअसेंबलर और पायथन बाइंडिंग के साथ एक स्टैंडअलोन टूल के रूप में उपलब्ध है, और एक IDA प्लगइन के रूप में भी जो IDA और रिवर्सर द्वारा किए गए डिसअसेंबली का लाभ उठाता है।
समर्थन:




यह दस्तावेज़ बताता है कि Linux वितरण पर grap को कैसे बनाया और स्थापित किया जाए।
आप यह भी पढ़ सकते हैं:
कंपाइलरों (build-essential) के अलावा, निम्नलिखित निर्भरताएँ स्थापित होनी चाहिए:
इस प्रकार Ubuntu / Debian पर, यह काम करना चाहिए:
sudo apt-get install build-essential cmake bison flex libboost-regex-dev libboost-system-dev libboost-filesystem-dev libseccomp-dev python3-dev python3-pefile python3-pyelftools python3-capstone swig
कृपया ध्यान दें कि इनका परीक्षण नवीनतम Ubuntu LTS (18.04.3) के लिए किया गया था। पैकेज आपके वितरण के आधार पर भिन्न हो सकते हैं।
निम्नलिखित कमांड परियोजना का निर्माण और स्थापना करेंगे:
mkdir build; cd build/ जैसा कि हम आपको सलाह देते हैं कि परियोजना को एक समर्पित निर्देशिका में बनाएँcmake ../src/; make cmake और make के साथ निर्माण करेगाsudo make install grap को /usr/local/bin/ में स्थापित करेगाSWIG python3 को खोजने में विफल हो सकता है यदि आपका डिफ़ॉल्ट संस्करण python2 है, इसे डिफ़ॉल्ट रूप से python3 पर स्विच करके हल किया जा सकता है। उदाहरण के लिए Ubuntu पर:
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
टूल को निम्नलिखित कमांड का उपयोग करके लॉन्च किया जा सकता है:
$ grap [options] pattern test_paths
नीचे समर्थित विकल्पों के कुछ उदाहरण दिए गए हैं:
grap -h: समर्थित विकल्पों का वर्णन करता हैकोई grap को एक स्ट्रिंग से पैटर्न अनुमानित करने दे सकता है। केवल कुछ विकल्प समर्थित हैं लेकिन यह प्रोटोटाइप के लिए उपयोगी है:
grap "opcode is xor and arg1 contains '['" (test.exe): मेमोरी राइट के साथ xor की तलाश करेंgrap -v "sub->xor->sub" (test.exe): -v अनुमानित पैटर्न का पथ आउटपुट करेगाचुनें कि बाइनरी को कैसे डिसअसेंबल किया जाए:
grap -od (pattern.grapp) samples/*: फ़ोल्डर samples/ में फ़ाइलों को बिना मिलान प्रयास के डिसअसेंबल करेंgrap -f (pattern.grapp) (test.exe): बाइनरी को पुनः डिसअसेंबल करने के लिए बाध्य करें, फिर इसे pattern.grapp के विरुद्ध मिलान करेंgrap --raw (pattern.grapp) (test.bin): रॉ फ़ाइल को डिसअसेंबल करना (64 बिट बाइनरी के लिए --raw-64 का उपयोग करें)आउटपुट की वर्बोसिटी को नियंत्रित करें:
grap -q -sa (pattern.grapp) (samples/*.grapcfg): डिसअसेंबल की गई फ़ाइलों का मिलान करें, मिलान और गैर-मिलान फ़ाइलों को दिखाएं, प्रति पंक्ति एकgrap -m (pattern.grapp) (test.grapcfg): सभी मिलान किए गए नोड दिखाएंचुनें कि डिसअसेंबल की गई फ़ाइल(एँ) (.grapcfg) कहाँ लिखी जाएँ; एकाधिक फ़ाइलों का एकाधिक पैटर्न के विरुद्ध मिलान करें:
grap patterns/basic_block_loop.grapp -o ls.grapcfg /bin/ls: ls को ls.grapp में डिसअसेंबल करें और बेसिक ब्लॉक लूप की तलाश करेंgrap (pattern1.grapp) -p (pattern2.grapp) (test.exe): एकाधिक पैटर्न फ़ाइलों के विरुद्ध मिलान करेंgrap -r -q patterns/ /bin/ -o /tmp/ : /bin/ से सभी फ़ाइलों को /tmp/ में डिसअसेंबल करें और उन्हें patterns/ से सभी .grapp पैटर्न के विरुद्ध मिलान करें (पुनरावर्ती विकल्प -r /bin/ पर लागू होता है, patterns/ पर नहीं)निम्नलिखित पैटर्न एक डिक्रिप्शन लूप का पता लगाता है जिसमें Backspace नमूने में पाए गए xor के बाद sub शामिल है:
digraph decryption_md5_4ee00c46da143ba70f7e6270960823be {
A [cond=true, repeat=3]
B [cond="opcode is xor and arg2 is 0x11"]
C [cond="opcode is sub and arg2 is 0x25"]
D [cond=true, repeat=3]
E [cond="opcode beginswith j and nchildren == 2"]
A -> B
B -> C
C -> D
D -> E
E -> A [childnumber=2]
}
ध्यान दें कि पैटर्न फ़ाइलों में एकाधिक पैटर्न ग्राफ़ हो सकते हैं।
आप दो निर्देशिकाओं में अतिरिक्त पैटर्न उदाहरण पा सकते हैं:
मैलवेयर नमूनों पर:
पायथन बाइंडिंग का उपयोग:
आपको doc/ फ़ोल्डर में अधिक दस्तावेज़ीकरण मिलेगा:
पैटर्न और परीक्षण ग्राफ़ का सिंटैक्स रिलीज़ अनुभाग में फ़ाइल grap_graphs.pdf में विस्तृत है।
grap MIT लाइसेंस के तहत लाइसेंस प्राप्त है। पूर्ण लाइसेंस पाठ LICENSE में पाया जा सकता है।