最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python利用capstone實(shí)現(xiàn)反匯編

 更新時(shí)間:2022年04月06日 08:39:54   作者:lyshark  
Capstone是一個(gè)輕量級(jí)的多平臺(tái)、多架構(gòu)的反匯編框架,該模塊支持目前所有通用操作系統(tǒng),反匯編架構(gòu)幾乎全部支持。本文就將利用他實(shí)現(xiàn)反匯編,感興趣的可以了解下

Capstone是Kali Linux自帶的一款輕量級(jí)反匯編引擎。它可以支持多種硬件構(gòu)架,如ARM、ARM64、MIPS、X86。該框架使用C語(yǔ)言實(shí)現(xiàn),但支持C++、Python、Ruby、OCaml、C#、Java和Go語(yǔ)言,具有很好的擴(kuò)展性。因此,該框架被256種工具所集成,如Cuckoo、Binwalk、IntelliJ IDEA。滲透測(cè)試人員一額可以通過Python、Ruby語(yǔ)言編寫腳本,引入Capstone引擎,從而構(gòu)建自己的反匯編工具。

Capstone作為一個(gè)輕量級(jí)的多平臺(tái)、多架構(gòu)的反匯編框架,該模塊支持目前所有通用操作系統(tǒng),反匯編架構(gòu)幾乎全部支持。

capstone使用起來非常簡(jiǎn)單,如果只需要靜態(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)存地址 開始位置 長(zhǎng)度
    Disassembly("d://Win32Project.exe",401000,0,1024)

如果需要針對(duì).text節(jié)進(jìn)行反匯編,則需要通過pefile模塊找到該節(jié)所對(duì)應(yīng)到文件中的位置,并從該位置開始向下反編譯即可,代碼如下:

from capstone import *
import pefile

# 遍歷整個(gè)可執(zhí)行文件并返回匯編代碼,有一個(gè)小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實(shí)現(xiàn)反匯編的文章就介紹到這了,更多相關(guān)Python capstone反匯編內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python數(shù)據(jù)可視化之Pyecharts使用詳解

    Python數(shù)據(jù)可視化之Pyecharts使用詳解

    Pyecharts是一個(gè)由百度開源的、用于生成Echarts圖表的類庫(kù),可以用來進(jìn)行數(shù)據(jù)可視化分析。本文將詳細(xì)講解一下Pyecharts的使用,需要的可以參考一下
    2022-04-04
  • Python兩個(gè)內(nèi)置函數(shù) locals 和globals(學(xué)習(xí)筆記)

    Python兩個(gè)內(nèi)置函數(shù) locals 和globals(學(xué)習(xí)筆記)

    這篇文章主要介紹了Python兩個(gè)內(nèi)置函數(shù) locals 和globals(學(xué)習(xí)筆記),需要的朋友可以參考下
    2016-08-08
  • python中使用多線程改進(jìn)flask案例

    python中使用多線程改進(jìn)flask案例

    這篇文章主要介紹了使用多線程改進(jìn)flask案例,線程是指進(jìn)程內(nèi)的一個(gè)執(zhí)行單元,也是進(jìn)程內(nèi)的可調(diào)度實(shí)體.線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性高,更多具體內(nèi)容,需要的小伙伴可以參考下面文章相關(guān)資料,希望對(duì)你有所幫助
    2022-03-03
  • 解決python報(bào)錯(cuò)MemoryError的問題

    解決python報(bào)錯(cuò)MemoryError的問題

    今天小編就為大家分享一篇解決python報(bào)錯(cuò)MemoryError的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python視頻爬蟲實(shí)現(xiàn)下載頭條視頻功能示例

    Python視頻爬蟲實(shí)現(xiàn)下載頭條視頻功能示例

    這篇文章主要介紹了Python視頻爬蟲實(shí)現(xiàn)下載頭條視頻功能,涉及Python正則匹配、網(wǎng)絡(luò)傳輸及文件讀寫等相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • python matplotlib保存圖片不全問題及解決

    python matplotlib保存圖片不全問題及解決

    這篇文章主要介紹了python matplotlib保存圖片不全問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python設(shè)置默認(rèn)編碼為utf8的方法

    Python設(shè)置默認(rèn)編碼為utf8的方法

    這篇文章主要介紹了Python設(shè)置默認(rèn)編碼為utf8的方法,結(jié)合實(shí)例形式分析了Python針對(duì)文件編碼的設(shè)置方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2016-07-07
  • 使用python實(shí)現(xiàn)excel的Vlookup功能

    使用python實(shí)現(xiàn)excel的Vlookup功能

    這篇文章主要介紹了使用python實(shí)現(xiàn)excel的Vlookup功能,當(dāng)我們想要查找的數(shù)據(jù)量較大時(shí),這時(shí)則有請(qǐng)我們的主角VLookup函數(shù)出場(chǎng),那么如何用python實(shí)現(xiàn)VLookup呢,需要的朋友可以參考下
    2023-04-04
  • Python繪圖之桃花盛開

    Python繪圖之桃花盛開

    這篇文章主要介紹了如何用python繪制桃花樹,幫助大家更好的使用python處理圖片,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • 嘗試使用Python多線程抓取代理服務(wù)器IP地址的示例

    嘗試使用Python多線程抓取代理服務(wù)器IP地址的示例

    這篇文章主要介紹了嘗試使用Python多線程抓取代理服務(wù)器IP地址的示例,盡管有GIL的存在使得Python并不能真正實(shí)現(xiàn)多線程并行,需要的朋友可以參考下
    2015-11-11

最新評(píng)論

乌拉特前旗| 金川县| 长宁县| 枣庄市| 宜章县| 双流县| 金门县| 永嘉县| 昌吉市| 井研县| 沂源县| 古交市| 乌鲁木齐县| 南召县| 彰化县| 广饶县| 建水县| 红安县| 肥乡县| 嘉禾县| 同仁县| 长丰县| 瑞丽市| 榆社县| 滨州市| 资中县| 紫阳县| 乐陵市| 丽江市| 秦皇岛市| 龙山县| 东兰县| 农安县| 宁化县| 晋宁县| 喜德县| 出国| 辽阳市| 抚顺县| 乌审旗| 闽侯县|