DDISASM เป็นตัวแยกชิ้นส่วนที่ รวดเร็ว ซึ่ง แม่นยำ เพียงพอสำหรับรหัสประกอบผลลัพธ์ที่จะประกอบใหม่ DDISASM ถูกนำมาใช้โดยใช้ภาษา Datalog (Souffle) Declarative Logic Programming Language เพื่อรวบรวมกฎการแยกชิ้นส่วนและฮิวริสติก การถอดรหัสข้อมูลไฟล์ ELF/PE ครั้งแรกและถอดรหัสคำแนะนำที่เป็นไปได้เพื่อสร้างชุดข้อมูลข้อมูลเริ่มต้นของข้อมูลข้อมูล ข้อเท็จจริงเหล่านี้ได้รับการวิเคราะห์เพื่อระบุ ตำแหน่งรหัส สัญลักษณ์ และ ขอบเขตฟังก์ชัน ผลลัพธ์ของการวิเคราะห์นี้ชุดข้อมูล Datalog ที่ได้รับการปรับปรุงจะถูกแปลเป็นตัวแทน GTIRB ระดับกลางสำหรับการวิเคราะห์ไบนารีและวิศวกรรมย้อนกลับ เครื่องพิมพ์ Pretty GTIRB อาจถูกใช้เพื่อพิมพ์ GTIRB เพื่อให้ได้รหัสแอสเซมบลีอีกครั้ง
รูปแบบไบนารี:
สถาปัตยกรรมชุดคำสั่ง (ISAS):
คุณสามารถเรียกใช้ ddisasm เวอร์ชัน prebuilt โดยใช้ Docker:
docker pull grammatech/ddisasm:latestDDISASM สามารถใช้ในการถอดชิ้นส่วนไบนารีลงในการเป็นตัวแทน GTIRB เราสามารถลองด้วยตัวอย่างหนึ่งที่รวมอยู่ในที่เก็บ
ก่อนอื่นให้เริ่มคอนเทนเนอร์ Ddisasm Docker:
docker run -v $PWD /examples:/examples -it grammatech/ddisasm:latestภายในคอนเทนเนอร์ Docker ให้เราสร้างหนึ่งในตัวอย่าง:
apt update && apt install gcc -y
cd /examples/ex1
gcc ex.c -o exตอนนี้เราสามารถแยกชิ้นส่วนไบนารี:
ddisasm ex --ir ex.gtirbเมื่อคุณมีการเป็นตัวแทน GTIRB คุณสามารถทำการเปลี่ยนแปลงโปรแกรมเป็นไบนารีโดยใช้ GTIRB หรือ GTIRB การเขียนใหม่
จากนั้นคุณสามารถใช้ GTIRB-Sprinter (รวมอยู่ในอิมเมจนักเทียบท่า) เพื่อสร้างไบนารีเวอร์ชันใหม่:
gtirb-pprinter ex.gtirb -b ex_rewritten
ภายใน gtirb-pprinter จะสร้างไฟล์แอสเซมบลีและเรียกใช้คอมไพเลอร์/แอสเซมเบลอร์ (เช่น GCC) เพื่อสร้างไบนารีใหม่ gtirb-pprinter จะดูแลหรือสร้างตัวเลือกบรรทัดคำสั่งที่จำเป็นทั้งหมดเพื่อสร้างไบนารีใหม่รวมถึงตัวเลือกการรวบรวมการพึ่งพาไลบรารีหรือสคริปต์ Linker เวอร์ชัน
นอกจากนี้คุณยังสามารถใช้ gtirb-pprinter เพื่อสร้างรายการแอสเซมบลีสำหรับการดัดแปลงด้วยตนเอง:
gtirb-pprinter ex.gtirb --asm ex.sรายชื่อแอสเซมบลีนี้สามารถคอมไพล์ได้ด้วยตนเอง:
gcc -nostartfiles ex.s -o ex_rewrittenโปรดดูเอกสารของเราสำหรับข้อมูลเพิ่มเติม
ดูการสนับสนุน. md
@inproceedings {flores-montoya2020,
author = {Antonio Flores-Montoya and Eric Schulte},
title = {Datalog Disassembly},
booktitle = {29th USENIX Security Symposium (USENIX Security 20)},
year = {2020},
isbn = {978-1-939133-17-5},
pages = {1075--1092},
url = {https://www.usenix.org/conference/usenixsecurity20/presentation/flores-montoya},
publisher = {USENIX Association},
month = aug,
}
@misc{schulte2020gtirb,
title={GTIRB: Intermediate Representation for Binaries},
author={Eric Schulte and Jonathan Dorn and Antonio Flores-Montoya and Aaron Ballman and Tom Johnson},
year={2020},
eprint={1907.02859},
archivePrefix={arXiv},
primaryClass={cs.PL}
}