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、惡意代碼分析工具、二進制插樁、加密算法分析等。