E9Patch เป็นเครื่องมือเขียนไบนารีแบบคงที่ที่ทรงพลังสำหรับไบนารี x86_64
Linux ELF E9Patch คือ:
การเขียนไบนารี่แบบคงที่ใหม่ จะใช้ไบนารี่อินพุต (ไฟล์ปฏิบัติการของ ELF หรือออบเจ็กต์ที่ใช้ร่วมกัน) และสร้างไบนารีเอาต์พุตพร้อมกับแพตช์/การแก้ไขบางอย่างที่ใช้กับมัน ไบนารีที่ได้รับการแก้ไขแล้วสามารถใช้เป็นการแทนที่แบบดรอปอินของต้นฉบับได้
สำหรับข้อมูลเพิ่มเติม โปรดดูเอกสาร PLDI'2020 ของเรา:
สามารถดาวน์โหลดไบนารี E9Patch ที่สร้างไว้ล่วงหน้าได้ที่นี่:
การสร้าง E9Patch นั้นง่ายมาก เพียงเรียกใช้สคริปต์ build.sh
สิ่งนี้จะสร้างเครื่องมือสองอย่างโดยอัตโนมัติ:
e9patch
: แบ็กเอนด์ตัวเขียนซ้ำไบนารี; และe9tool
: ส่วนหน้าการแยกส่วนเชิงเส้นสำหรับ E9Patch E9Patch สามารถใช้งานได้ผ่านส่วนหน้าของ E9Tool
ตัวอย่างเช่น ในการเพิ่มเครื่องมือการพิมพ์คำสั่งให้กับคำสั่ง xor
ทั้งหมดใน xterm
เราสามารถใช้คำสั่งต่อไปนี้:
$ ./e9tool -M 'asm=/xor.*/' -P print xterm
สิ่งนี้จะสร้าง xterm
เวอร์ชันแก้ไขที่เขียนลงในไฟล์ a.out
xterm
ที่แก้ไขแล้วสามารถทำงานได้ตามปกติ แต่จะพิมพ์สตริงแอสเซมบลีของคำสั่ง xor
ที่ดำเนินการแต่ละรายการไปที่ stderr
:
$ ./a.out
xorl %ebp, %ebp
xorl %ebx, %ebx
xorl %eax, %eax
xorl %edx, %edx
xorl %edi, %edi
...
สำหรับรายการตัวเลือกและโหมดที่รองรับทั้งหมด โปรดดู:
$ ./e9tool --help
แก้ไขคำสั่งการกระโดดทั้งหมดด้วยเครื่องมือ "ว่าง":
$ ./e9tool -M 'asm=/j.*/' -P empty xterm
$ ./a.out
พิมพ์คำสั่งการข้ามทั้งหมดด้วยเครื่องมือ "พิมพ์":
$ ./e9tool -M 'asm=/j.*/' -P print xterm
$ ./a.out
เช่นเดียวกับข้างต้น แต่ใช้ไวยากรณ์ "Intel":
$ ./e9tool -M 'asm=/j.*/' -P print xterm --syntax=intel
$ ./a.out
แก้ไขคำสั่งการกระโดดทั้งหมดด้วยการเรียกไปยังฟังก์ชันว่าง:
$ ./e9compile.sh examples/nop.c
$ ./e9tool -M 'asm=/j.*/' -P 'entry()@nop' xterm
$ ./a.out
แก้ไขคำสั่งการกระโดดทั้งหมดด้วยเครื่องมือนับคำสั่ง:
$ ./e9compile.sh examples/counter.c
$ ./e9tool -M 'asm=/j.*/' -P 'entry()@counter' xterm
$ FREQ=10000 ./a.out
แก้ไขคำแนะนำการกระโดดทั้งหมดด้วยเครื่องมือการพิมพ์ที่สวยงาม:
$ ./e9compile.sh examples/print.c
$ ./e9tool -M 'asm=/j.*/' -P 'entry(addr,instr,size,asm)@print' xterm
$ ./a.out
แก้ไขคำสั่งการกระโดดทั้งหมดด้วยเครื่องมือ "ดีเลย์" เพื่อทำให้โปรแกรมช้าลง:
$ ./e9compile.sh examples/delay.c
$ ./e9tool -M 'asm=/j.*/' -P 'entry()@delay' xterm
$ DELAY=100000 ./a.out
หมายเหตุ :
XTerm(322)
โครงการอื่น ๆ บางส่วนที่ใช้ E9Patch ได้แก่ :
libc.so
E9Patch เป็นเครื่องมือระดับต่ำที่ออกแบบมาเพื่อให้สามารถรวมเข้ากับโปรเจ็กต์อื่นได้ หากต้องการข้อมูลเพิ่มเติม โปรดดูเอกสารต่อไปนี้:
สามารถรายงานข้อบกพร่องได้ที่นี่:
E9Patch เวอร์ชันปัจจุบันได้รับการปรับปรุงอย่างมีนัยสำคัญเมื่อเทียบกับต้นแบบดั้งเดิมที่ประเมินในรายงาน PLDI'2020 โดยเฉพาะ:
-O2
ไปยัง E9Toolซอฟต์แวร์นี้เผยแพร่ภายใต้ GNU Public License (GPL) เวอร์ชัน 3
ไฟล์เฉพาะบางไฟล์ได้รับการเผยแพร่ภายใต้ใบอนุญาต MIT (ตรวจสอบคำนำของไฟล์)
งานนี้ได้รับการสนับสนุนบางส่วนโดย National Satellite of Excellence in Trustworthy Software Systems ซึ่งได้รับทุนจาก National Research Foundation (NRF) Singapore ภายใต้โครงการ National Cybersecurity R&D (NCR)