天天看點

Fuzz前置技能-unicorn模拟執行

Unicorn是一個輕量級, 多平台, 多架構的CPU模拟器架構,基于qemu開發,它可以代替CPU模拟代碼的執行,常用于惡意代碼分析,Fuzz等,該項目被用于Radare2逆向分析架構,GEF(gdb的pwn分析插件),Pwndbg,Angr符号執行架構等多個著名項目。

Unicorn

安裝提供了兩種方式:

從源安裝

OSX(homebrew)

Linux參考官方安裝手冊

Winodws參考官方安裝手冊

從源碼建構

下載下傳源碼包:

Download

其他交叉編譯(如IOS、ARM、Android)參考官方文檔

安裝好unicorn後,可以用下面的測試用例來檢測unicorn的功能是否可用

以下為Python調用unicorn架構測試代碼

最終輸出結果:

看到結果,ECX被加了1,并且EDX被減去1,表示python可以成功調用unicorn

以下為C調用unicorn架構測試代碼

編輯Makefile進行編譯:

上面的Makefile等同于指令:

運作結果如下:

Go語言需要安裝packge

示例代碼如下

最終輸出結果:1234。注意這裡是十進制

還有其他更多的python示例,也包含其他程式設計語言的示例,其中Go、Java、ruby、rust、pascal等的示例代碼,可以參考連結:

unicorn/bindings at master · unicorn-engine/unicorn

C語言函數定義在unicorn.h頭檔案中,Python函數定義在unicorn_const.py和unicorn.py中,函數和定義簡短,用時再看也來得及。

簡單來說,可以把unicorn了解成一個CPU,把需要執行的代碼片段和記憶體空間布局好,unicorn會執行代碼片段,并傳回結果。unicorn可以模拟執行多種架構的指令,比如ARM、x86、MIPS等,并且有多種語言的API接口,其中我比較喜歡用的是Python、C和Go,可以根據自己喜歡的語言基于unicorn進行開發,寫出自己的一些工具,比如fuzzer、惡意代碼分析工具、二進制插樁、加密算法分析等。