Python利用capstone实现反汇编


Posted in Python onApril 06, 2022

Capstone是Kali Linux自带的一款轻量级反汇编引擎。它可以支持多种硬件构架,如ARM、ARM64、MIPS、X86。该框架使用C语言实现,但支持C++、Python、Ruby、OCaml、C#、Java和Go语言,具有很好的扩展性。因此,该框架被256种工具所集成,如Cuckoo、Binwalk、IntelliJ IDEA。渗透测试人员一额可以通过Python、Ruby语言编写脚本,引入Capstone引擎,从而构建自己的反汇编工具。

Capstone作为一个轻量级的多平台、多架构的反汇编框架,该模块支持目前所有通用操作系统,反汇编架构几乎全部支持。

capstone使用起来非常简单,如果只需要静态反汇编,则几行代码即可完成该功能了。

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__":
    # 文件名 内存地址 开始位置 长度
    Disassembly("d://Win32Project.exe",401000,0,1024)

如果需要针对.text节进行反汇编,则需要通过pefile模块找到该节所对应到文件中的位置,并从该位置开始向下反编译即可,代码如下:

from capstone import *
import pefile

# 遍历整个可执行文件并返回汇编代码,有一个小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("[+] 反汇编地址: {} 参数: {}".format(addr,dic))
        opcode_list.append(dic)
    return opcode_list

if __name__ == "__main__":
    ref = FOA_Disassembly("d://Win32Project.exe")
    print(ref)

Python利用capstone实现反汇编

到此这篇关于Python利用capstone实现反汇编的文章就介绍到这了,更多相关Python capstone反汇编内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python采集腾讯新闻实例
Jul 10 Python
Python实现的RSS阅读器实例
Jul 25 Python
wxPython之解决闪烁的问题
Jan 15 Python
python如何实现int函数的方法示例
Feb 19 Python
Python 读取指定文件夹下的所有图像方法
Apr 27 Python
Sanic框架流式传输操作示例
Jul 18 Python
解决sublime+python3无法输出中文的问题
Dec 12 Python
Python程序包的构建和发布过程示例详解
Jun 09 Python
python中的函数递归和迭代原理解析
Nov 14 Python
使用Python构造hive insert语句说明
Jun 06 Python
python 发送get请求接口详解
Nov 17 Python
python urllib库的使用详解
Apr 13 Python
关于Python中进度条的六个实用技巧分享
如何在Python中妥善使用进度条详解
Apr 05 #Python
Python接口自动化之文件上传/下载接口详解
Apr 05 #Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
You might like
php 文章采集正则代码
2009/12/28 PHP
php中Socket创建与监听实现方法
2015/01/05 PHP
完美的php分页类
2017/10/24 PHP
Laravel下生成验证码的类
2017/11/15 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
通过代码实例解析PHP session工作原理
2020/12/11 PHP
JS实现打开本地文件或文件夹
2021/03/09 Javascript
在IE模态窗口中自由查看HTML源码的方法
2007/03/08 Javascript
JS注册/移除事件处理程序(ExtJS应用程序设计实战)
2013/05/07 Javascript
AngularJS 单元测试(一)详解
2016/09/21 Javascript
JavaScript表单验证开发
2016/11/23 Javascript
利用Bootstrap实现表格复选框checkbox全选
2016/12/21 Javascript
浅谈js for循环输出i为同一值的问题
2017/03/01 Javascript
利用Vue2.x开发实现JSON树的方法
2018/01/04 Javascript
vue 中引用gojs绘制E-R图的方法示例
2018/08/24 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
2018/12/06 Javascript
Jquery如何使用animation动画效果改变背景色的代码
2020/07/20 jQuery
前端性能优化建议
2020/09/17 Javascript
从零开始用webpack构建一个vue3.0项目工程的实现
2020/09/24 Javascript
零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版
2014/11/06 Python
Python编程实现粒子群算法(PSO)详解
2017/11/13 Python
python构建深度神经网络(续)
2018/03/10 Python
解决Python网页爬虫之中文乱码问题
2018/05/11 Python
pyqt5 从本地选择图片 并显示在label上的实例
2019/06/13 Python
Python之——生成动态路由轨迹图的实例
2019/11/22 Python
python实现将range()函数生成的数字存储在一个列表中
2020/04/02 Python
用canvas做一个DVD待机动画的实现代码
2019/04/12 HTML / CSS
HTML5 video进入全屏和退出全屏的实现方法
2020/07/28 HTML / CSS
施华洛世奇日本官网:SWAROVSKI日本
2018/05/04 全球购物
应用服务器有那些
2012/01/19 面试题
英文感谢信格式
2015/01/21 职场文书
个人原因辞职信模板
2015/05/13 职场文书
行政处罚事先告知书
2015/07/01 职场文书
创业计划书之儿童理发店
2019/09/27 职场文书
SpringBoot 集成Redis 过程
2021/06/02 Redis
JavaScript正则表达式实现注册信息校验功能
2022/05/30 Java/Android