
स्केलेबल असेंबली विश्लेषण प्लेटफॉर्म जो इंडेक्सिंग, क्लोन खोज, और एक्जीक्यूटेबल वर्गीकरण के लिए स्थैतिक, गतिशील और मशीन-लर्निंग तकनीकों का उपयोग करता है, विभिन्न आर्किटेक्चर में।
Kam1n0 v2.x एक स्केलेबल असेंबली प्रबंधन और विश्लेषण प्लेटफॉर्म है। यह उपयोगकर्ता को पहले (बड़े) बाइनरी संग्रह को विभिन्न रिपॉजिटरी में अनुक्रमित करने और क्लोन खोज और वर्गीकरण जैसी विभिन्न विश्लेषणात्मक सेवाएँ प्रदान करने की अनुमति देता है। यह एप्लिकेशन की अवधारणा का उपयोग करके असेंबली रिपॉजिटरी के बहु-किरायेदारी पहुँच और प्रबंधन का समर्थन करता है। एक एप्लिकेशन इंस्टेंस में अपना विशिष्ट रिपॉजिटरी होता है और एक विशेष विश्लेषणात्मक सेवा प्रदान करता है। रिवर्स इंजीनियरिंग कार्यों की बहुमुखी प्रतिभा को ध्यान में रखते हुए, Kam1n0 v2.x सर्वर वर्तमान में तीन अलग-अलग प्रकार के क्लोन-खोज एप्लिकेशन प्रदान करता है: Asm-Clone, Sym1n0, और Asm2Vec , और Asm2Vec पर आधारित एक निष्पादन योग्य वर्गीकरण । प्लेटफॉर्म में आगे नए एप्लिकेशन प्रकार जोड़े जा सकते हैं।
एक उपयोगकर्ता कई एप्लिकेशन इंस्टेंस बना सकता है। एक एप्लिकेशन इंस्टेंस को उपयोगकर्ताओं के एक विशिष्ट समूह के बीच साझा किया जा सकता है। एप्लिकेशन रिपॉजिटरी की पढ़ने-लिखने की पहुँच और चालू/बंद स्थिति को एप्लिकेशन स्वामी द्वारा नियंत्रित किया जा सकता है। Kam1n0 v2.x सर्वर कई साझा संसाधन पूल का उपयोग करके एप्लिकेशन को एक साथ सेवा प्रदान कर सकता है।
Kam1n0 को Steven H. H. Ding और Miles Q. Li द्वारा Benjamin C. M. Fung के पर्यवेक्षण में कनाडा के मैकगिल विश्वविद्यालय में डेटा माइनिंग और सुरक्षा प्रयोगशाला में विकसित किया गया था। इसने Hex-Rays प्लग-इन प्रतियोगिता 2015 में द्वितीय पुरस्कार जीता। यदि आप Kam1n0 को उपयोगी पाते हैं, तो कृपया हमारे पेपर का हवाला दें:
S. H. H. Ding, B. C. M. Fung, and P. Charland. Kam1n0: MapReduce-based Assembly Clone Search for Reverse Engineering. In Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (SIGKDD), pages 461-470, San Francisco, CA: ACM Press, August 2016.
S. H. H. Ding, B. C. M. Fung, and P. Charland. Asm2Vec: boosting static representation robustness for binary clone search against code obfuscation and compiler optimization. In Proceedings of the 40th IEEE Symposium on Security and Privacy (S&P), 18 pages, San Francisco, CA: IEEE Computer Society, May 2019.
Asm-Clone एप्लिकेशन असेंबली फ़ंक्शंस के लिए कुशल सबग्राफ़ खोज समस्या (अर्थात् ग्राफ़ आइसोमॉर्फिज्म समस्या) को हल करने का प्रयास करते हैं (2.3M फ़ंक्शंस के साथ <1.3s औसत क्वेरी समय और <30ms औसत इंडेक्स समय)। किसी लक्ष्य फ़ंक्शन (जैसा कि नीचे बाईं ओर दिखाया गया है) को देखते हुए, यह रिपॉजिटरी में अन्य फ़ंक्शंस के बीच क्लोन किए गए सबग्राफ़ की पहचान कर सकता है (जैसा कि नीचे दाईं ओर दिखाया गया है)।
विभेदित फ़ज़ टेस्टिंग और बाधा समाधान द्वारा सिमैंटिक क्लोन खोज। एक कुशल और स्केलेबल डायनामिक-स्टैटिक हाइब्रिड दृष्टिकोण (1.5M फ़ंक्शंस के साथ <1s औसत क्वेरी समय और <100ms औसत इंडेक्स समय)। किसी लक्ष्य फ़ंक्शन (जैसा कि नीचे बाईं ओर दिखाया गया है) को देखते हुए, यह रिपॉजिटरी में अन्य फ़ंक्शंस के बीच क्लोन किए गए सबग्राफ़ की पहचान कर सकता है (जैसा कि नीचे दाईं ओर दिखाया गया है)। अमूर्त सिंटैक्स ग्राफ़ के विज़ुअलाइज़ेशन का समर्थन करता है।
Asm2Vec प्रतिनिधित्व सीखने का लाभ उठाता है। यह असेंबली कोड के शाब्दिक शब्दार्थ संबंध को समझता है। उदाहरण के लिए, xmm* रजिस्टर शब्दार्थ रूप से वेक्टर ऑपरेशंस जैसे addps से संबंधित हैं। memcpy strcpy के समान है। नीचे दिया गया ग्राफ़ libgmp में gmpz_tdiv_r_2exp के समान स्रोत कोड से संकलित विभिन्न असेंबली फ़ंक्शंस दिखाता है। बाएं से दाएं, असेंबली फ़ंक्शंस को GCC O0 विकल्प, GCC O3 विकल्प, O-LLVM अस्पष्टता नियंत्रण प्रवाह ग्राफ़, फ़्लैटनिंग विकल्प, और LLVM अस्पष्टता बोगस नियंत्रण प्रवाह ग्राफ़ विकल्प के साथ संकलित किया गया है। Asm2Vec उन्हें स्टैटिक रूप से क्लोन के रूप में पहचान सकता है।
इस एप्लिकेशन में, उपयोगकर्ता कार्यात्मक संबंधितता के आधार पर सॉफ़्टवेयर वर्गों का एक सेट परिभाषित करता है और प्रत्येक वर्ग से संबंधित बाइनरी प्रदान करता है। फिर सिस्टम स्वचालित रूप से फ़ंक्शंस को क्लस्टर में समूहित करता है जिसमें फ़ंक्शंस सीधे या अप्रत्यक्ष रूप से क्लोन संबंध से जुड़े होते हैं। जो क्लस्टर वर्गीकरण के लिए विवेचनात्मक हैं, उन्हें रखा जाता है और अपने वर्गों के हस्ताक्षर के रूप में काम करते हैं। किसी लक्ष्य बाइनरी को देखते हुए, सिस्टम दिखाता है कि वह प्रत्येक सॉफ़्टवेयर वर्ग से किस हद तक संबंधित है।
अपने फ़ंक्शन समानता गणना मॉडल के रूप में Asm2Vec का उपयोग करता है
नीचे दिया गया चित्र Kam1n0 v2.x के प्रमुख UI घटकों और कार्यक्षमताओं को दर्शाता है। हम एक सामग्री डिज़ाइन अपनाते हैं। सामान्य तौर पर, प्रत्येक उपयोगकर्ता के पास एक एप्लिकेशन सूची, एक चल रहे-कार्य सूची और एक परिणाम फ़ाइल सूची होती है।
Kam1n0 के वर्तमान रिलीज़ में दो इंस्टॉलर शामिल हैं: कोर सर्वर और IDA Pro प्लग-इन।
| इंस्टॉलर | शामिल घटक | विवरण |
|---|---|---|
| Kam1n0-Server.msi | कोर इंजन | इंडेक्सिंग और खोज के लिए सेवा प्रदान करने वाला मुख्य इंजन। |
| वर्कबेंच | रिपॉजिटरी और चल रही सेवा को प्रबंधित करने के लिए एक उपयोगकर्ता इंटरफ़ेस। | |
| वेब उपयोगकर्ता इंटरफ़ेस | बाइनरी फ़ाइलों और असेंबली फ़ंक्शंस को खोजने/अनुक्रमित करने के लिए वेब उपयोगकर्ता इंटरफ़ेस। | |
| VS 15 के लिए Visual C++ पुनर्वितरण योग्य | z3 के लिए निर्भरता। | |
| Kam1n0-IDA-Plugin.msi | प्लग-इन | कनेक्टर और उपयोगकर्ता इंटरफ़ेस। |
| Cefpython के लिए PyPI व्हील्स | उपयोगकर्ता इंटरफ़ेस के लिए रेंडरिंग इंजन। | |
| PyPI और आश्रित व्हील्स | Python के लिए पैकेज प्रबंधन। IDA 6.8 और 6.9 के लिए शामिल। |
Kam1n0 कोर इंजन पूरी तरह से Java में लिखा गया है। आपको निम्नलिखित निर्भरताओं की आवश्यकता है:
हमारे रिलीज़ पेज से Kam1n0-Server.msi फ़ाइल डाउनलोड करें। सर्वर स्थापित करने के लिए निर्देशों का पालन करें। आपको एक स्थापना पथ चुनने के लिए प्रेरित किया जाएगा। यदि सर्वर को किसी डिस्सेम्बली से निपटना नहीं है तो IDA Pro वैकल्पिक है। दूसरे शब्दों में, क्लाइंट पक्ष Kam1n0 प्लग-इन का उपयोग IDA Pro के लिए करता है। यह दृढ़ता से सुझाव दिया जाता है कि IDA Pro को Kam1n0 सर्वर के साथ स्थापित किया जाए। Kam1n0 सर्वर स्वचालित रूप से आपके IDA Pro का पता लगाएगा, जो .i64 फ़ाइल खोलने के लिए उपयोग किए जाने वाले डिफ़ॉल्ट एप्लिकेशन को देखकर।
Kam1n0 IDA Pro प्लग-इन तर्क के लिए Python में और रेंडरिंग के लिए HTML/JavaScript में लिखा गया है। इसकी स्थापना के लिए निम्नलिखित निर्भरताएँ आवश्यक हैं:
अगला, हमारे रिलीज़ पेज से Kam1n0-IDA-Plugin.msi इंस्टॉलर डाउनलोड करें। प्लग-इन और रनटाइम स्थापित करने के लिए निर्देशों का पालन करें। कृपया ध्यान दें कि प्लग-इन को IDA Pro प्लगइन्स फ़ोल्डर में स्थापित किया जाना चाहिए, जो $IDA_PRO_PATH$/plugins पर स्थित है। उदाहरण के लिए, Windows पर, पथ C:/Program Files (x86)/IDA 6.95/plugins हो सकता है। इंस्टॉलर पथ का पता लगाएगा और उसे मान्य करेगा।
सुनिश्चित करें कि आपके पास Java 11 का Oracle संस्करण है। (apt में default-jdk नहीं।)
sudo add-apt-repository ppa:webupd8team/java
~webupd8team not found), यदि आप प्रॉक्सी पर हैं, तो सुनिश्चित करें कि आप अपने http_proxy और https_proxy पर्यावरण चर सेट और निर्यात करते हैं, और फिर sudo पर -E विकल्प के साथ पुनः प्रयास करें। इसके अतिरिक्त, यदि आपको 'add-apt repository command not found' त्रुटि मिल रही है, तो प्रयास करें: sudo apt install -y software-properties-common.sudo apt-get update, और sudo apt-get install oracle-java8-installer
java -version के साथ अपने Java संस्करण को सत्यापित करें; आपको मैन्युअल रूप से JAVA_HOME पर्यावरण चर (/etc/environment में) सेट करने की आवश्यकता हो सकती है, JAVA_HOME=/usr/lib/jvm/java-11-oracleKam1n0-Community से Linux के लिए नवीनतम रिलीज़ डाउनलोड करें (Kam1n0-IDA-Plugin.tar.gz और Kam1n0-Server.tar.gz)।
दोनों टारबॉल निकालें (अर्थात् tar –xvzf Kam1n0-IDA-Plugin.tar.gz और tar –xvzf Kam1n0-Server.tar.gz)
Kam1n0-Server.tar.gz फ़ाइल सर्वर निर्देशिका बनाएगी।
server निर्देशिका के अंदर, आपको kam1n0.properties नामक एक फ़ाइल देखनी चाहिए, जहाँ आप kam1n0 के लिए विभिन्न कॉन्फ़िगरेशन सेट करेंगे; यह बहुत महत्वपूर्ण है।
kam1n0.data.path को उस स्थान पर सेट करें जहाँ आप अपने kam1n0-संबंधित डेटा को लिखा जाना चाहेंगे। हम इसे उसी स्थान पर रखना चुनते हैं जहाँ हम अपना server रखते हैं। kam1n0.ida.home यह संदर्भित करता है कि आपकी IDA स्थापना कहाँ स्थित है। यदि आपके पास IDA नहीं है और आप डिस्सेम्बली के लिए kam1n0 का उपयोग करने की योजना नहीं बनाते हैं तो इस पंक्ति (और kam1n0.ida.batch, उसके बाद की पंक्ति) को टिप्पणी करें। kam1n0.properties फ़ाइल के बारे में अधिक (सटीक) जानकारी के लिए, kam1n0.properties.explained फ़ाइल देखें।
kam1n0-server-workbench चलाएँ: java -jar kam1n0-server-workbench.jar. इससे एक विंडो पॉप अप होनी चाहिए, जो आपको वास्तव में kam1n0 शुरू करने के लिए संकेत देती है। वैकल्पिक रूप से, kam1n0-server चलाएँ: java -jar kam1n0-server.jar --start. यह विंडो के बिना कंसोल से सर्वर शुरू करता है।
कनेक्ट करने और उपयोग करने के लिए, अपने ब्राउज़र में 127.0.0.1:8571 (डिफ़ॉल्ट पोर्ट जिस पर kam1n0 सुनता है, वह 8571 होना चाहिए, लेकिन kam1n0.properties में बदला जा सकता है) पर जाएँ। आपको सुंदर kam1n0 वेब UI देखना चाहिए। वहाँ से, यदि आप नहीं जानते कि kam1n0 का उपयोग कैसे करें, तो Kam1n0-Community रेपो पर ट्यूटोरियल का पालन करें।
पिछले संस्करणों (<2.0.0) में उपयोग की गई असेंबली कोड रिपॉजिटरी और कॉन्फ़िगरेशन फ़ाइलें अब नवीनतम संस्करण द्वारा समर्थित नहीं हैं। यदि आपको अपनी पुरानी रिपॉजिटरी को माइग्रेट करने की आवश्यकता है तो कृपया हमसे संपर्क करें।
नवीनतम स्थिर शाखा को क्लोन करें (--recursive न भूलें!):```bash
git clone --recursive -b master2.x --single-branch https://github.com/McGill-DMaS/Kam1n0-Community
## प्रोजेक्ट आयात करना।
IntelliJ: रूट /kam1n0/kam1n0/ को एक मेवेन प्रोजेक्ट के रूप में आयात करें। सभी उप-मॉड्यूल तदनुसार लोड हो जाएंगे।
EclipseEE: क्लोन किए गए git रिपॉजिटरी को git व्यू में जोड़ें। git रिपॉजिटरी से सभी मेवेन प्रोजेक्ट आयात करें।
किसी भी त्रुटि को दूर करने के लिए आपको classpath को संशोधित करने की आवश्यकता हो सकती है।
IDE के अंदर चलने पर सभी संसाधन पथ गतिशील रूप से संशोधित होते हैं
(kam1n0-resources उप-मॉड्यूल के माध्यम से)।
प्रोजेक्ट बनाने के लिए:```
cd /kam1n0/kam1n0
mvn -DskipTests clean package
mvn -DskipTests package
The resulting binaries can be found in /kam1n0/build-bins/
परीक्षण कोड चलाने के लिए, आपको पहले chromedriver.exe को http://chromedriver.chromium.org/ से डाउनलोड करना होगा और इसका पूर्ण पथ webdriver.chrome.driver नामक एक पर्यावरण चर में जोड़ना होगा। यह भी आवश्यक है कि सिस्टम में क्रोम ब्राउज़र स्थापित हो। परीक्षण कोड यूआई इंटरफ़ेस का परीक्षण करने के लिए एक ब्राउज़र इंस्टेंस लॉन्च करेगा। पूरी परीक्षण प्रक्रिया में लगभग 3 घंटे लगेंगे।```
cd /kam1n0/kam1n0
mvn -DskipTests clean package # you can skip this one if you already built the package
mvn -DskipTests package # you can skip this one if you already built the package
mvn -DforkMode=never test
ये कमांड्स केवल libvex और z3 के प्री-कम्पाइल्ड व्हील्स के साथ जावा को कंपाइल करते हैं। यह आउट-ऑफ-द-बॉक्स काम करता है।
libvex और z3 का बिल्ड प्लेटफॉर्म-निर्भर है। हम Angr से libvex का एक फोर्क उपयोग करते हैं।
अधिक गंभीर बिल्ड स्क्रिप्ट्स और विंडोज/लिनक्स के लिए इंस्टॉलर /kam1n0-builds/ के अंतर्गत पाए जा सकते हैं।
* kam1n0: सर्वर का स्रोत कोड।
* kam1n0-builds: वितरण बनाने के लिए इंस्टॉलर स्रोत कोड और स्क्रिप्ट्स।
* kam1n0-clients: क्लाइंट का स्रोत कोड।
## बाइनरी रिलीज़
हमारे पास निरंतर विकास और वितरण के लिए एक जेनकिन सर्वर है। नवीनतम स्थिर रिलीज़ यहाँ पोस्ट की जाएगी। समय-समय पर हम अपनी आंतरिक प्रायोगिक शाखा को इस भंडार के साथ सिंक्रनाइज़ करेंगे।
## लाइसेंसिंग
यह सॉफ्टवेयर [Steven H. H. Ding](http://stevending.net/), [Miles Q. Li](http://milesqli.github.io/), और [Benjamin C. M. Fung](http://dmas.lab.mcgill.ca/fung/) द्वारा [McGill Data Mining and Security Lab](http://dmas.lab.mcgill.ca/) और कनाडा के [Queen's L1NNA Research Laboratory](https://l1nna.com/) में विकसित किया गया है। यह Apache License Version 2.0 के तहत वितरित किया गया है। कृपया विवरण के लिए [LICENSE.txt](https://github.com/mcgill-dmas/kam1n0-community/blob/master2.x/LICENSE.txt) देखें।
कॉपीराइट 2014-2021 McGill University और शोधकर्ता। सर्वाधिकार सुरक्षित।
## आभार
-orange.svg?style=for-the-badge)




