Python利用capstone實現(xiàn)反匯編
Capstone是Kali Linux自帶的一款輕量級反匯編引擎。它可以支持多種硬件構(gòu)架,如ARM、ARM64、MIPS、X86。該框架使用C語言實現(xiàn),但支持C++、Python、Ruby、OCaml、C#、Java和Go語言,具有很好的擴展性。因此,該框架被256種工具所集成,如Cuckoo、Binwalk、IntelliJ IDEA。滲透測試人員一額可以通過Python、Ruby語言編寫腳本,引入Capstone引擎,從而構(gòu)建自己的反匯編工具。
Capstone作為一個輕量級的多平臺、多架構(gòu)的反匯編框架,該模塊支持目前所有通用操作系統(tǒng),反匯編架構(gòu)幾乎全部支持。
capstone使用起來非常簡單,如果只需要靜態(tài)反匯編,則幾行代碼即可完成該功能了。
from capstone import * # powerby LyShark def Disassembly(path,BaseAddr,FileOffset,ReadByte): with open(path,"rb") as fp: fp.seek(int(FileOffset)) opcode = fp.read(int(ReadByte)) md = Cs(CS_ARCH_X86, CS_MODE_32) for item in md.disasm(opcode, 0): addr = int(BaseAddr) + item.address dic = {"Addr": str(addr) , "OpCode": item.mnemonic + " " + item.op_str} print(dic) if __name__ == "__main__": # 文件名 內(nèi)存地址 開始位置 長度 Disassembly("d://Win32Project.exe",401000,0,1024)
如果需要針對.text節(jié)進行反匯編,則需要通過pefile模塊找到該節(jié)所對應(yīng)到文件中的位置,并從該位置開始向下反編譯即可,代碼如下:
from capstone import * import pefile # 遍歷整個可執(zhí)行文件并返回匯編代碼,有一個小Bug # powerby LyShark def FOA_Disassembly(FilePath): opcode_list = [] pe = pefile.PE(FilePath) ImageBase = pe.OPTIONAL_HEADER.ImageBase for item in pe.sections: if str(item.Name.decode('UTF-8').strip(b'\x00'.decode())) == ".text": # print("虛擬地址: 0x%.8X 虛擬大小: 0x%.8X" %(item.VirtualAddress,item.Misc_VirtualSize)) VirtualAddress = item.VirtualAddress VirtualSize = item.Misc_VirtualSize ActualOffset = item.PointerToRawData StartVA = ImageBase + VirtualAddress StopVA = ImageBase + VirtualAddress + VirtualSize with open(FilePath,"rb") as fp: fp.seek(ActualOffset) HexCode = fp.read(VirtualSize) md = Cs(CS_ARCH_X86, CS_MODE_32) for item in md.disasm(HexCode, 0): addr = hex(int(StartVA) + item.address) dic = {"Addr": str(addr) , "OpCode": item.mnemonic + " " + item.op_str} print("[+] 反匯編地址: {} 參數(shù): {}".format(addr,dic)) opcode_list.append(dic) return opcode_list if __name__ == "__main__": ref = FOA_Disassembly("d://Win32Project.exe") print(ref)
到此這篇關(guān)于Python利用capstone實現(xiàn)反匯編的文章就介紹到這了,更多相關(guān)Python capstone反匯編內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
結(jié)合Python的SimpleHTTPServer源碼來解析socket通信
SimpleHTTPServer是Python中一個現(xiàn)成的HTTP服務(wù)器例子,本文我們將結(jié)合Python的SimpleHTTPServer源碼來解析socket通信,我們先來看一下socket的基本概念:2016-06-06用Python實現(xiàn)一個模仿UP主彈幕控制的直播間功能
up主通過代碼實現(xiàn)了實時讀取直播間里的彈幕內(nèi)容,進而控制自己的電腦,把彈幕翻譯成指令操控《賽博朋克2077》游戲,這篇文章主要介紹了用Python實現(xiàn)一個模仿UP主彈幕控制的直播間功能,需要的朋友可以參考下2021-12-12Python+selenium實現(xiàn)瀏覽器基本操作詳解
這篇文章主要為大家詳細介紹了如何通過python腳本實現(xiàn)瀏覽器的一些基本操作,如:瀏覽器的前進后退、頁面刷新等,感興趣的可以學(xué)習(xí)一下2022-06-06Django使用 Bootstrap 樣式修改書籍列表過程解析
這篇文章主要介紹了Django使用 Bootstrap 樣式修改書籍列表過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-08-08Django Web開發(fā)中django-debug-toolbar的配置以及使用
正在發(fā)愁怎么調(diào)試Django,就遇到了Django Debug Toolbar這個利器。下面這篇文章主要給大家介紹了關(guān)于django web開發(fā)中django-debug-toolbar的配置以及使用的相關(guān)資料,文中通過圖文及示例代碼介紹的非常詳細,需要的朋友可以參考下2018-05-05