LyScript實現(xiàn)計算片段Hash并寫出Excel的示例代碼
本案例將學習運用LyScript計算特定程序中特定某些片段的Hash特征值,并通過xlsxwriter這個第三方模塊將計算到的hash值存儲成一個excel表格,本例中的知識點可以說已經(jīng)具備了簡單的表格輸出能力,如果時間充裕完全可以實現(xiàn)自動化報告生成。
第一步實現(xiàn)計算特定片段的特征值,此類代碼實現(xiàn)原理用戶傳入一個rva相對地址以及讀入指令長度,并通過內(nèi)置的hashlib庫實現(xiàn)計算內(nèi)存段內(nèi)指令的特征,如下代碼先來實現(xiàn)計算兩段指令特征。
import hashlib import zlib,binascii from LyScript32 import MyDebug # 計算哈希 def calc_hash(dbg, rva,size): read_list = bytearray() ref_hash = { "va": None, "size": None, "md5":None, "sha256":None, "sha512":None, "crc32":None } # 得到基地址 base = dbg.get_local_module_base() # 讀入數(shù)據(jù) for index in range(0,size): readbyte = dbg.read_memory_byte(base + rva + index) read_list.append(readbyte) # 計算特征 md5hash = hashlib.md5(read_list) sha512hash = hashlib.sha512(read_list) sha256hash = hashlib.sha256(read_list) # crc32hash = binascii.crc32(read_list) & 0xffffffff ref_hash["va"] = hex(base+rva) ref_hash["size"] = size ref_hash["md5"] = md5hash.hexdigest() ref_hash["sha256"] = sha256hash.hexdigest() ref_hash["sha512"] = sha512hash.hexdigest() ref_hash["crc32"] = hex(zlib.crc32(read_list)) return ref_hash if __name__ == "__main__": dbg = MyDebug() connect = dbg.connect() # 傳入相對地址,計算計算字節(jié) ref = calc_hash(dbg,0x19fd,10) print(ref) # 計算第二段 ref = calc_hash(dbg,0x1030,26) print(ref) dbg.close()
計算后輸出字典格式:
第二部使用第三方庫,將讀入的hash參數(shù)寫出到表格內(nèi),并在下方生成hash圖例,方便觀察。
import hashlib import time import zlib,binascii from LyScript32 import MyDebug import xlsxwriter # 計算哈希 def calc_hash(dbg, rva,size): read_list = bytearray() ref_hash = { "va": None, "size": None, "md5":None, "sha256":None, "sha512":None, "crc32":None } # 得到基地址 base = dbg.get_local_module_base() # 讀入數(shù)據(jù) for index in range(0,size): readbyte = dbg.read_memory_byte(base + rva + index) read_list.append(readbyte) # 計算特征 md5hash = hashlib.md5(read_list) sha512hash = hashlib.sha512(read_list) sha256hash = hashlib.sha256(read_list) # crc32hash = binascii.crc32(read_list) & 0xffffffff ref_hash["va"] = hex(base+rva) ref_hash["size"] = size ref_hash["md5"] = md5hash.hexdigest() ref_hash["sha256"] = sha256hash.hexdigest() ref_hash["sha512"] = sha512hash.hexdigest() ref_hash["crc32"] = hex(zlib.crc32(read_list)) return ref_hash if __name__ == "__main__": dbg = MyDebug() connect = dbg.connect() # 打開一個被調(diào)試進程 dbg.open_debug("D:\\Win32Project.exe") # 傳入相對地址,計算計算字節(jié) ref = calc_hash(dbg,0x19fd,10) print(ref) ref2 = calc_hash(dbg,0x1030,26) print(ref2) ref3 = calc_hash(dbg,0x15EB,46) print(ref3) ref4 = calc_hash(dbg,0x172B,8) print(ref4) # 寫出表格 workbook = xlsxwriter.Workbook("pe_hash.xlsx") worksheet = workbook.add_worksheet() headings = ["VA地址", "計算長度", "MD5", "SHA256", "SHA512","CRC32"] data = [ [ref.get("va"),ref.get("size"),ref.get("md5"),ref.get("sha256"),ref.get("sha512"),ref.get("crc32")], [ref2.get("va"), ref2.get("size"), ref2.get("md5"), ref2.get("sha256"), ref2.get("sha512"), ref2.get("crc32")], [ref3.get("va"), ref3.get("size"), ref3.get("md5"), ref3.get("sha256"), ref3.get("sha512"), ref3.get("crc32")], [ref4.get("va"), ref4.get("size"), ref4.get("md5"), ref4.get("sha256"), ref4.get("sha512"), ref4.get("crc32")] ] # 定義表格樣式 head_style = workbook.add_format({"bold": True, "align": "center", "fg_color": "#D7E4BC"}) worksheet.set_column("A1:F1", 15) # 逐條寫入數(shù)據(jù) worksheet.write_row("A1", headings, head_style) for i in range(0, len(data)): worksheet.write_row("A{}".format(i + 2), data[i]) # 添加條形圖,顯示前十個元素 chart = workbook.add_chart({"type": "line"}) chart.add_series({ "name": "=Sheet1!$B$1", # 圖例項 "categories": "=Sheet1!$A$2:$A$10", # X軸 Item名稱 "values": "=Sheet1!$B$2:$B$10" # X軸Item值 }) chart.add_series({ "name": "=Sheet1!$C$1", "categories": "=Sheet1!$A$2:$A$10", "values": "=Sheet1!$C$2:$C$10" }) chart.add_series({ "name": "=Sheet1!$D$1", "categories": "=Sheet1!$A$2:$A$10", "values": "=Sheet1!$D$2:$D$10" }) # 添加柱狀圖標題 chart.set_title({"name": "計算HASH統(tǒng)計圖"}) # chart.set_style(8) chart.set_size({'width': 500, 'height': 250}) chart.set_legend({'position': 'top'}) # 在F2處繪制 worksheet.insert_chart("H2", chart) workbook.close() # 關(guān)閉被調(diào)試進程 time.sleep(1) dbg.close_debug() dbg.close()
生成后的圖例效果如下:
到此這篇關(guān)于LyScript實現(xiàn)計算片段Hash并寫出Excel的示例代碼的文章就介紹到這了,更多相關(guān)LyScript算片段Hash內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python靜態(tài)web服務(wù)器實現(xiàn)方法及代碼詳解
在本篇內(nèi)容里小編給大家分享了一篇關(guān)于python靜態(tài)web服務(wù)器實現(xiàn)方法,有需要的朋友們可以參考下。2022-11-11Django?報錯:Broken?pipe?from?('127.0.0.1',?5892
這篇文章主要介紹了Django?報錯:Broken?pipe?from?('127.0.0.1',?58924)的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09python使用htmllib分析網(wǎng)頁內(nèi)容的方法
這篇文章主要介紹了python使用htmllib分析網(wǎng)頁內(nèi)容的方法,涉及Python使用htmllib模塊的相關(guān)技巧,需要的朋友可以參考下2015-05-05