LyScript实现计算片段Hash并写出Excel的示例代码

作者:lyshark 时间:2021-11-20 18:41:45 

本案例将学习运用LyScript计算特定程序 * 定某些片段的Hash特征值,并通过xlsxwriter这个第三方模块将计算到的hash值存储成一个excel表格,本例中的知识点可以说已经具备了简单的表格输出能力,如果时间充裕完全可以实现自动化报告生成。

第一步实现计算特定片段的特征值,此类代码实现原理用户传入一个rva相对地址以及读入指令长度,并通过内置的hashlib库实现计算内存段内指令的特征,如下代码先来实现计算两段指令特征。

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()

# 读入数据
   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()

# 传入相对地址,计算计算字节
   ref = calc_hash(dbg,0x19fd,10)
   print(ref)

# 计算第二段
   ref = calc_hash(dbg,0x1030,26)
   print(ref)

dbg.close()

计算后输出字典格式:

LyScript实现计算片段Hash并写出Excel的示例代码

第二部使用第三方库,将读入的hash参数写出到表格内,并在下方生成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()

# 读入数据
   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()

# 打开一个被调试进程
   dbg.open_debug("D:\\Win32Project.exe")

# 传入相对地址,计算计算字节
   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)

# 逐条写入数据
   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统计图"})
   # chart.set_style(8)

chart.set_size({'width': 500, 'height': 250})
   chart.set_legend({'position': 'top'})

# 在F2处绘制
   worksheet.insert_chart("H2", chart)
   workbook.close()

# 关闭被调试进程
   time.sleep(1)
   dbg.close_debug()
   dbg.close()

生成后的图例效果如下:

LyScript实现计算片段Hash并写出Excel的示例代码

来源:https://www.cnblogs.com/LyShark/p/16686670.html

标签:LyScript,计算,Hash
0
投稿

猜你喜欢

  • ASP强制刷新和判断文件地址是否存在

    2007-09-16 17:11:00
  • asp如何让页面过时并指定一个过时时间?

    2010-05-13 16:40:00
  • 一个js自动完成功能源码

    2011-06-06 07:42:00
  • Python将字符串常量转化为变量方法总结

    2023-07-14 00:36:58
  • 详解Python中的type和object

    2021-03-25 13:00:58
  • Python合并多个装饰器小技巧

    2022-05-31 04:51:45
  • Google谷歌的CSS前景图片合并技术

    2009-07-13 12:21:00
  • python中global用法实例分析

    2023-09-16 08:33:47
  • WEB2.0网页制作标准教程(3)定义语言编码

    2007-11-13 13:23:00
  • python如何快速生成时间戳

    2022-10-26 08:15:41
  • Python 多核并行计算的示例代码

    2022-08-18 11:20:36
  • 状态机的概念和在Python下使用状态机的教程

    2023-03-24 14:06:11
  • 将mysql转换到oracle必须了解的50件事

    2010-07-05 12:15:00
  • Python利用随机函数生成变化图形详解

    2021-07-02 06:54:54
  • Python使用re模块实现正则表达式操作指南

    2022-03-14 18:11:11
  • python3批量删除豆瓣分组下的好友的实现代码

    2022-02-14 22:27:13
  • FileUpload上传图片预览不变形

    2010-08-05 21:25:00
  • python装饰器代替set get方法实例

    2023-01-25 15:40:37
  • CSS改变字体而不影响网页

    2010-10-20 20:11:00
  • HTML 5 V.S. XHTML 2:HTML5倍受青睐,XHTML2处境尴尬

    2009-06-08 12:57:00
  • asp之家 网络编程 m.aspxhome.com