逆向工程工具之Reverse
Reverse是一個用來解析二進制文件的逆向工程工具,而且它可以生成更具可讀性的代碼(類C語言)并帶有彩色標識的語法,便于研究人員進行閱讀代碼。目前,其交互模式仍在做進一步開發(fā)。
支撐架構(gòu)
架構(gòu):x86, ARM, MIPS 文件格式:ELF, PE, RAW 在GitHub中,也提供了一個Makefile作為測試之用,詳細請點擊鏈接:Makefile。
使用環(huán)境要求
1、python 版本需要在 3.4及以上版本; 2、具備capstone反匯編框架,其能提供豐富的反匯編指令; 3、具備python-pyelftools模塊,用于解析ELF文件(ELF文件除了機器碼外,還包含其它額外的信息,如段的加載地址,運行地址,重定位表,符號表等)以及DWARF調(diào)試信息,詳細請點擊鏈接:pyelftools; 4、具備python-pefile模塊,以用于解析PE文件(如exe、dll、vxd、sys和vdm等),詳細請點擊鏈接:PEfile; 5、具備python-msgpack模塊,用于序列化運算,詳細請點擊鏈接:msgpack; 6、具備256色終端;
你可以通過運行requirements.sh檢測是否符合所有的要求,requirements.sh。
類反編譯功能
因為二進制文件中包含了符號型的main,所以其中的-x main是可選的。具體使用如下,
$ ./reverse.py tests/server.bin
交互模式
在此模式下有更多的命令可以使用(da,db等),當然我們也可以通過help查看更多的命令。
TODO列表
1、添加命令:setbe/setle rawbase(用于原文件格式); 2、如果從shell獲取的文件為raw文件,則進行加載。
視覺模式
在交互模式中,我們可以通過使用命令 v 來切換到視覺模式。但該模式需要ncurses動態(tài)庫的支持。
其中支持,
1、代碼/功能的定義 2、內(nèi)聯(lián)注釋 3、外部參照
TODO列表
1、當分析器修改代碼時,自動進行重載; 2、多行注釋; 3、創(chuàng)建數(shù)據(jù)/數(shù)組; 4、符號重命名; 5、堆棧變量; 6、結(jié)構(gòu)、枚舉; 7、提高分析器的性能。
Swich-跳轉(zhuǎn)表舉例
Switch語句的使用需要跳轉(zhuǎn)表,但其不能自動檢測。所以我們需要告訴它使用哪一個跳轉(zhuǎn)表。具體操作如下,
$ ./reverse.py -i tests/others/switch.bin >> x ...>> jmptable 0x400526 0x400620 11 8 # A jump-table at 0x400620 is set with 11 entries, an address is on 8 bytes.>> x # Decompilation with switch
分析shellcode
其中對于每一個Int 0×80,該工具都會嘗試通過參數(shù)檢測syscall函數(shù)
$ ./reverse.py --raw x86 tests/shellcode.bin
使用VIM進行編輯function 0x0 {
0x0: eax = 0 # xor eax, eax
0x2: al = '\x0b' # mov al, 0xb
0x4: cdq
0x5: push edx
0x6: push 1752379246 "n/sh"
0xb: push 1768042287 "//bi"
0x10: ebx = esp # mov ebx, esp
0x12: push edx
0x13: push ebx
0x14: ecx = esp # mov ecx, esp
0x16: int 128 ; execve(ebx, ecx, edx) # int 0x80}
***再通過使用VIM進行編輯,具體參考如下,
$ ./reverse tests/dowhile1.bin --vim Run : vim dowhile1.bin.rev -S dowhile1.bin.vim
GitHub 下載鏈接:GitHub。