ddisasm
1.8.0
DDISASM是一個快速的拆卸器,足夠準確,可以重新組裝結果的裝配代碼。使用DATALOG(SOUFFLE)聲明邏輯編程語言來彙編拆卸規則和啟發式方法來實施DDISASM。拆卸器首先解析Elf/PE文件信息,並解碼一個可能的指令,以創建一組初始的Datalog事實。分析這些事實以識別代碼位置,符號和功能邊界。然後將此分析的結果(一組精緻的數據記錄事實)轉換為GTIRB中間表示,進行二進制分析和反向工程。然後,GTIRB漂亮的打印機可用於將GTIRB精美打印到可重新組裝的裝配代碼。
二進制格式:
指令集體系結構(ISA):
您可以使用Docker運行預構建版本的DDISASM:
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-PPRINTER(包含在Docker Image中)來生成二進制的新版本:
gtirb-pprinter ex.gtirb -b ex_rewritten
在內部, gtirb-pprinter將生成一個彙編文件,並調用編譯器/彙編程序(例如GCC)生成新的二進製文件。 gtirb-pprinter將注意或生成所有必要的命令行選項,以生成新的二進製文件,包括彙編選項,庫依賴項或版本的鏈接器腳本。
您還可以使用gtirb-pprinter生成用於手動修改的程序集列表:
gtirb-pprinter ex.gtirb --asm ex.s然後可以手動重新編譯此組件列表:
gcc -nostartfiles ex.s -o ex_rewritten請查看我們的文檔以獲取更多信息。
參見貢獻
@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}
}