E9Patch 是一個強大的靜態二進位重寫工具,適用於x86_64
Linux ELF 二進位。 E9補丁是:
靜態二進位重寫採用輸入二進位檔案(ELF 執行檔或共用物件)並產生應用了一些修補程式/修改的輸出二進位檔案。修補後的二進位檔案可以用作原始二進位檔案的直接替代品。
欲了解更多信息,請參閱我們的 PLDI'2020 論文:
預先建置的 E9Patch 二進位檔案可以在此處下載:
建置 E9Patch 非常簡單:只需執行build.sh
腳本即可。
這將自動建立兩個工具:
e9patch
:二進位重寫器後端;和e9tool
:E9Patch 的線性反組譯前端。 E9Patch 可透過 E9Tool 前端使用。
例如,要為xterm
中的所有xor
指令新增指令列印偵測,我們可以使用下列命令:
$ ./e9tool -M 'asm=/xor.*/' -P print xterm
這將產生寫入a.out
檔案的xterm
的修改版本。
修改後的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 是一個低階工具,旨在可整合到其他專案中。要了解更多信息,請參閱以下文件:
可以在此處報告錯誤:
與 PLDI'2020 論文中評估的原始原型相比,目前版本的 E9Patch 有了顯著改進。具體來說:
-O2
選項傳遞給 E9Tool。該軟體已根據 GNU 公共授權 (GPL) 第 3 版發布。
一些特定文件是在 MIT 許可證下發布的(檢查文件前導碼)。
這項工作得到了國家可信賴軟體系統卓越衛星的部分支持,該衛星由新加坡國家研究基金會 (NRF) 國家網路安全研發 (NCR) 計畫資助。