E9Patch adalah alat penulisan ulang biner statis yang kuat untuk binari Linux ELF x86_64
. E9Patch adalah:
Penulisan ulang biner statis mengambil biner masukan (objek yang dapat dieksekusi atau dibagikan ELF) dan menghasilkan biner keluaran dengan beberapa patch/modifikasi yang diterapkan padanya. Biner yang ditambal dapat digunakan sebagai pengganti biner asli.
Untuk informasi lebih lanjut, silakan lihat makalah PLDI'2020 kami:
Biner E9Patch yang dibuat sebelumnya dapat diunduh di sini:
Membangun E9Patch sangat mudah: cukup jalankan skrip build.sh
.
Ini secara otomatis akan membangun dua alat:
e9patch
: backend penulis ulang biner; Dane9tool
: antarmuka pembongkaran linier untuk E9Patch. E9Patch dapat digunakan melalui frontend E9Tool.
Misalnya, untuk menambahkan instrumentasi pencetakan instruksi ke semua instruksi xor
di xterm
, kita dapat menggunakan perintah berikut:
$ ./e9tool -M 'asm=/xor.*/' -P print xterm
Ini akan menghasilkan versi xterm
yang dimodifikasi yang ditulis ke file a.out
.
xterm
yang dimodifikasi dapat dijalankan seperti biasa, tetapi akan mencetak string perakitan dari setiap instruksi xor
yang dijalankan ke stderr
:
$ ./a.out
xorl %ebp, %ebp
xorl %ebx, %ebx
xorl %eax, %eax
xorl %edx, %edx
xorl %edi, %edi
...
Untuk daftar lengkap opsi dan mode yang didukung, lihat:
$ ./e9tool --help
Tambal semua instruksi lompat dengan instrumentasi "kosong":
$ ./e9tool -M 'asm=/j.*/' -P empty xterm
$ ./a.out
Cetak semua instruksi lompat dengan instrumentasi "cetak":
$ ./e9tool -M 'asm=/j.*/' -P print xterm
$ ./a.out
Sama seperti di atas, tetapi gunakan sintaks "Intel":
$ ./e9tool -M 'asm=/j.*/' -P print xterm --syntax=intel
$ ./a.out
Tambal semua instruksi lompatan dengan panggilan ke fungsi kosong:
$ ./e9compile.sh examples/nop.c
$ ./e9tool -M 'asm=/j.*/' -P 'entry()@nop' xterm
$ ./a.out
Tambal semua instruksi lompat dengan instrumentasi penghitungan instruksi:
$ ./e9compile.sh examples/counter.c
$ ./e9tool -M 'asm=/j.*/' -P 'entry()@counter' xterm
$ FREQ=10000 ./a.out
Tambal semua instruksi lompatan dengan instrumentasi cetak cantik:
$ ./e9compile.sh examples/print.c
$ ./e9tool -M 'asm=/j.*/' -P 'entry(addr,instr,size,asm)@print' xterm
$ ./a.out
Tambal semua instruksi lompat dengan instrumentasi "penundaan" untuk memperlambat program:
$ ./e9compile.sh examples/delay.c
$ ./e9tool -M 'asm=/j.*/' -P 'entry()@delay' xterm
$ DELAY=100000 ./a.out
Catatan :
XTerm(322)
Beberapa proyek lain yang menggunakan E9Patch antara lain:
libc.so
.E9Patch adalah alat tingkat rendah yang dirancang untuk dapat diintegrasikan ke dalam proyek lain. Untuk mengetahui lebih lanjut, silakan lihat dokumentasi berikut:
Bug dapat dilaporkan di sini:
Versi E9Patch saat ini mengalami peningkatan yang signifikan dibandingkan dengan prototipe asli yang dievaluasi dalam makalah PLDI'2020. Secara khusus:
-O2
ke E9Tool.Perangkat lunak ini telah dirilis di bawah GNU Public License (GPL) Versi 3.
Beberapa file tertentu dirilis di bawah lisensi MIT (periksa pembukaan file).
Pekerjaan ini sebagian didukung oleh National Satellite of Excellence in Trustworthy Software Systems, yang didanai oleh National Research Foundation (NRF) Singapura di bawah program National Cybersecurity R&D (NCR).