Kam1n0 v2.x เป็นแพลตฟอร์มการจัดการและการวิเคราะห์แอสเซมบลีที่ปรับขนาดได้ ช่วยให้ผู้ใช้สามารถจัดทำดัชนีคอลเลกชันไบนารี (ขนาดใหญ่) ลงในที่เก็บที่แตกต่างกันก่อน และให้บริการการวิเคราะห์ที่แตกต่างกัน เช่น การค้นหาและการจำแนกประเภทโคลน รองรับการเข้าถึงและการจัดการพื้นที่เก็บข้อมูลแอสเซมบลีหลายผู้เช่าโดยใช้แนวคิดของ Application อินสแตนซ์ของแอปพลิเคชันมีพื้นที่เก็บข้อมูลเฉพาะของตัวเองและให้บริการการวิเคราะห์เฉพาะทาง เมื่อพิจารณาถึงความอเนกประสงค์ของงานวิศวกรรมย้อนกลับ ปัจจุบันเซิร์ฟเวอร์ Kam1n0 v2.x มีแอปพลิเคชันการค้นหาโคลนสามประเภทที่แตกต่างกัน: Asm-Clone , Sym1n0 และ Asm2Vec และ การจำแนกประเภทปฏิบัติการ ตาม Asm2Vec สามารถเพิ่มประเภทแอปพลิเคชันใหม่ลงในแพลตฟอร์มเพิ่มเติมได้
ผู้ใช้สามารถสร้างอินสแตนซ์ของแอปพลิเคชันได้หลายรายการ สามารถแชร์อินสแตนซ์ของแอปพลิเคชันระหว่างกลุ่มผู้ใช้เฉพาะได้ เจ้าของแอปพลิเคชันสามารถควบคุมการเข้าถึงแบบอ่าน-เขียนและสถานะการเปิด-ปิดที่เก็บแอปพลิเคชันได้ เซิร์ฟเวอร์ Kam1n0 v2.x สามารถให้บริการแอปพลิเคชันพร้อมกันโดยใช้พูลทรัพยากรที่ใช้ร่วมกันหลายรายการ
Kam1n0 ได้รับการพัฒนาโดย Steven HH Ding และ Miles Q. Li ภายใต้การดูแลของ Benjamin CM Fung จาก Data Mining and Security Lab ที่ McGill University ในแคนาดา ได้รับรางวัลที่สองจากการแข่งขัน Plug-In Hex-Rays ปี 2015 หากคุณพบว่า Kam1n0 มีประโยชน์ โปรดอ้างอิงเอกสารของเรา:
SHH Ding, BCM Fung และพี. ชาร์แลนด์ Kam1n0: การค้นหาโคลนแอสเซมบลีที่ใช้ MapReduce สำหรับวิศวกรรมย้อนกลับ ใน Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (SIGKDD) , หน้า 461-470, ซานฟรานซิสโก, แคลิฟอร์เนีย: ACM Press, สิงหาคม 2016
SHH Ding, BCM Fung และพี. ชาร์แลนด์ Asm2Vec: เพิ่มความคงทนในการแสดงแบบคงที่สำหรับการค้นหาโคลนแบบไบนารีเทียบกับโค้ดที่สับสนและการปรับให้เหมาะสมของคอมไพเลอร์ ใน Proceedings of the 40th IEEE Symposium on Security and Privacy (S&P) , 18 หน้า, ซานฟรานซิสโก, แคลิฟอร์เนีย: IEEE Computer Society, พฤษภาคม 2019
แอปพลิเคชัน Asm-Clone พยายามแก้ปัญหาการค้นหากราฟย่อยที่มีประสิทธิภาพ (เช่น ปัญหากราฟมอร์ฟิซึม) สำหรับฟังก์ชันแอสเซมบลี (เวลาสืบค้นเฉลี่ย <1.3 วินาที และเวลาดัชนีเฉลี่ย <30ms พร้อมฟังก์ชัน 2.3M) ด้วยฟังก์ชันเป้าหมาย (อันทางซ้ายดังที่แสดงด้านล่าง) มันสามารถระบุกราฟย่อยที่โคลนไว้ท่ามกลางฟังก์ชันอื่น ๆ ในพื้นที่เก็บข้อมูล (อันทางขวาดังที่แสดงด้านล่าง)
การค้นหาโคลนเชิงความหมายโดยการทดสอบฟัซซีที่แตกต่างและการแก้ไขข้อจำกัด วิธีการไฮบริดสถิตแบบไดนามิกที่มีประสิทธิภาพและปรับขนาดได้ (เวลาสืบค้นเฉลี่ย <1 วินาที และเวลาดัชนีเฉลี่ย <100 มิลลิวินาที พร้อมฟังก์ชัน 1.5M) ด้วยฟังก์ชันเป้าหมาย (อันทางซ้ายดังที่แสดงด้านล่าง) มันสามารถระบุกราฟย่อยที่โคลนไว้ท่ามกลางฟังก์ชันอื่น ๆ ในพื้นที่เก็บข้อมูล (อันทางขวาดังที่แสดงด้านล่าง) รองรับการสร้างภาพของกราฟไวยากรณ์นามธรรม
Asm2Vec ใช้ประโยชน์จากการเรียนรู้แบบเป็นตัวแทน เข้าใจความสัมพันธ์เชิงความหมายของคำศัพท์ของรหัสแอสเซมบลี ตัวอย่างเช่น รีจิสเตอร์ xmm*
มีความสัมพันธ์ทางความหมายกับการดำเนินการเวกเตอร์ เช่น addps
memcpy
คล้ายกับ strcpy
กราฟด้านล่างแสดงฟังก์ชันแอสเซมบลีต่างๆ ที่คอมไพล์จากซอร์สโค้ดเดียวกันของ gmpz_tdiv_r_2exp
ใน libgmp จากซ้ายไปขวา ฟังก์ชันการประกอบจะถูกคอมไพล์ด้วยตัวเลือก GCC O0, ตัวเลือก GCC O3, กราฟโฟลว์ควบคุม O-LLVM obfuscator, ตัวเลือก Flattening และตัวเลือก LLVM obfuscator Bogus Control Flow Graph Asm2Vec สามารถระบุ ได้ ว่าเป็นโคลน
ในแอปพลิเคชันนี้ ผู้ใช้กำหนดชุดของคลาสซอฟต์แวร์ซึ่งขึ้นอยู่กับความเกี่ยวข้องของฟังก์ชันและจัดเตรียมไบนารีของแต่ละคลาส จากนั้นระบบจะจัดกลุ่มฟังก์ชันออกเป็นคลัสเตอร์โดยอัตโนมัติ โดยที่ฟังก์ชันจะเชื่อมต่อโดยตรงหรือโดยอ้อมด้วยความสัมพันธ์แบบโคลน คลัสเตอร์ที่เลือกปฏิบัติสำหรับการจำแนกประเภทจะถูกเก็บไว้และทำหน้าที่เป็นลายเซ็นของคลาสของพวกเขา เมื่อพิจารณาไบนารี่เป้าหมาย ระบบจะแสดงระดับที่เป็นของซอฟต์แวร์แต่ละคลาส
ใช้ Asm2Vec เป็นแบบจำลองการคำนวณความคล้ายคลึงของฟังก์ชัน
รูปด้านล่างแสดงส่วนประกอบ UI หลักและฟังก์ชันการทำงานของ Kam1n0 v2.x เราใช้การออกแบบวัสดุ โดยทั่วไป ผู้ใช้แต่ละคนจะมีรายการแอปพลิเคชัน รายการงานที่กำลังทำงานอยู่ และรายการไฟล์ผลลัพธ์
Kam1n0 รุ่นปัจจุบันประกอบด้วยตัวติดตั้งสองตัว: เซิร์ฟเวอร์หลักและปลั๊กอิน IDA Pro
โปรแกรมติดตั้ง | ส่วนประกอบที่รวมอยู่ | คำอธิบาย |
---|---|---|
Kam1n0-Server.msi | เครื่องยนต์หลัก | เอ็นจิ้นหลักที่ให้บริการจัดทำดัชนีและค้นหา |
โต๊ะทำงาน | ส่วนต่อประสานกับผู้ใช้เพื่อจัดการที่เก็บข้อมูลและบริการที่รันอยู่ | |
ส่วนติดต่อผู้ใช้เว็บ | ส่วนติดต่อผู้ใช้แบบเว็บสำหรับการค้นหา/จัดทำดัชนีไฟล์ไบนารีและฟังก์ชันการประกอบ | |
Visual C++ สามารถแจกจ่ายต่อได้สำหรับ VS 15 | การพึ่งพาสำหรับ z3 | |
Kam1n0-IDA-Plugin.msi | ปลั๊กอิน | ตัวเชื่อมต่อและอินเทอร์เฟซผู้ใช้ |
ล้อ PyPI สำหรับ Cefpython | เอ็นจิ้นการเรนเดอร์สำหรับส่วนต่อประสานผู้ใช้ | |
PyPI และล้อที่ขึ้นต่อกัน | การจัดการแพ็คเกจสำหรับ Python รวมอยู่ด้วยสำหรับ IDA 6.8 และ 6.9 |
เอ็นจิ้นหลัก Kam1n0 เขียนด้วยภาษาจาวาล้วนๆ คุณต้องมีการอ้างอิงต่อไปนี้:
ดาวน์โหลดไฟล์ 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 (ไม่ใช่ default-jdk ใน apt)
sudo add-apt-repository ppa:webupd8team/java
~webupd8team not found
) หากคุณอยู่บนพรอกซี ตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่าและส่งออกตัวแปรสภาพแวดล้อม http_proxy
และ https_proxy
แล้วลองอีกครั้งโดยใช้ตัวเลือก -E
บน sudo นอกจากนี้ หากคุณได้รับข้อผิดพลาด '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_HOME ด้วยตนเอง (ใน /etc/environment
), JAVA_HOME=/usr/lib/jvm/java-11-oracle
ดาวน์โหลดรีลีสล่าสุดสำหรับ Linux (Kam1n0-IDA-Plugin.tar.gz และ Kam1n0-Server.tar.gz) จาก Kam1n0-Community
แยก tarball สองตัว (เช่น 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 ของคุณ แสดงความคิดเห็นบรรทัดนี้ (และ kam1n0.ida.batch
บรรทัดต่อไปนี้) หากคุณไม่มี IDA และไม่ได้วางแผนที่จะใช้ kam1n0 สำหรับการถอดแยกชิ้นส่วน สำหรับข้อมูลเพิ่มเติม (ถูกต้อง) เกี่ยวกับไฟล์ 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) ในเบราว์เซอร์ของคุณ คุณควรเห็น UI เว็บ kam1n0 ที่สวยงาม จากนั้น ปฏิบัติตามบทช่วยสอนบน repo ชุมชน Kam1n0 หากคุณไม่ทราบวิธีใช้ kam1n0
ที่เก็บโค้ดแอสเซมบลีและไฟล์การกำหนดค่าที่ใช้ในเวอร์ชันก่อนหน้า (<2.0.0) ไม่รองรับเวอร์ชันล่าสุดอีกต่อไป โปรดติดต่อเราหากคุณต้องการย้ายที่เก็บข้อมูลเก่าของคุณ
โคลนสาขาที่เสถียรล่าสุด (อย่าลืม --recursive
!):
git clone --recursive -b master2.x --single-branch https://github.com/McGill-DMaS/Kam1n0-Community
IntelliJ: อิมพอร์ตรูท /kam1n0/kam1n0/ เป็นโปรเจ็กต์ maven โมดูลย่อยทั้งหมดจะถูกโหลดตามลำดับ EclipseEE: เพิ่มพื้นที่เก็บข้อมูล git ที่โคลนไปยังมุมมอง git นำเข้าโปรเจ็กต์ Maven ทั้งหมดจากที่เก็บ git คุณอาจต้องแก้ไข classpath เพื่อแก้ไขข้อผิดพลาด เส้นทางทรัพยากรทั้งหมดได้รับการแก้ไขแบบไดนามิกเมื่อทำงานภายใน IDE (ผ่านโมดูลย่อยทรัพยากร kam1n0)
เพื่อสร้างโครงการ:
cd /kam1n0/kam1n0
mvn -DskipTests clean package
mvn -DskipTests package
ไบนารีผลลัพธ์สามารถพบได้ใน /kam1n0/build-bins/
หากต้องการเรียกใช้โค้ดทดสอบ คุณจะต้องดาวน์โหลด chromedriver.exe
จาก http://chromedriver.chromium.org/ ก่อน และเพิ่มเส้นทาง สัมบูรณ์ ลงในตัวแปรสภาพแวดล้อมชื่อ webdriver.chrome.driver
จำเป็นต้องมีการติดตั้งเบราว์เซอร์ Chrome ในระบบด้วย โค้ดทดสอบจะเปิดอินสแตนซ์ของเบราว์เซอร์เพื่อทดสอบอินเทอร์เฟซ UI ขั้นตอนการทดสอบทั้งหมดจะใช้เวลาประมาณ 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
คำสั่งเหล่านี้คอมไพล์เฉพาะ Java ที่มีวงล้อที่คอมไพล์ไว้ล่วงหน้าของ libvex และ z3 มันทำงานนอกกรอบ บิลด์ของ libvex และ z3 ขึ้นอยู่กับแพลตฟอร์ม เราใช้ทางแยกของ libvex จาก Angr สคริปต์บิลด์ที่จริงจังยิ่งขึ้นรวมถึงตัวติดตั้งสำหรับ windows/linux สามารถพบได้ภายใต้ /kam1n0-builds/
เรามีเซิร์ฟเวอร์ Jenkin สำหรับการพัฒนาและส่งมอบอย่างต่อเนื่อง เวอร์ชันเสถียรล่าสุดจะถูกโพสต์ที่นี่ เราจะซิงโครไนซ์สาขาการทดลองภายในของเรากับพื้นที่เก็บข้อมูลนี้เป็นระยะ
ซอฟต์แวร์นี้ได้รับการพัฒนาโดย Steven HH Ding, Miles Q. Li และ Benjamin CM Fung ใน McGill Data Mining and Security Lab และ Queen's L1NNA Research Laboratory ในแคนาดา เผยแพร่ภายใต้ Apache License เวอร์ชัน 2.0 โปรดดูรายละเอียดที่ LICENSE.txt
ลิขสิทธิ์ 2014-2021 McGill University และนักวิจัย สงวนลิขสิทธิ์.