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中的元组概念
May 21 Python
使用python在本地电脑上快速处理数据
Jun 22 Python
Python实现的文本编辑器功能示例
Jun 30 Python
python绘制双柱形图代码实例
Dec 14 Python
Python3实现汉语转换为汉语拼音
Jul 08 Python
Python3实现二叉树的最大深度
Sep 30 Python
flask框架渲染Jinja模板与传入模板变量操作详解
Jan 25 Python
python字符串,元组,列表,字典互转代码实例详解
Feb 14 Python
使用Pyhton 分析酒店针孔摄像头
Mar 04 Python
Python ini文件常用操作方法解析
Apr 26 Python
keras处理欠拟合和过拟合的实例讲解
May 25 Python
容易被忽略的Python内置类型
Sep 03 Python
关于Python中进度条的六个实用技巧分享
如何在Python中妥善使用进度条详解
Apr 05 #Python
Python接口自动化之文件上传/下载接口详解
Apr 05 #Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
You might like
php 修改zen-cart下单和付款流程以防止漏单
2010/03/08 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
2013/06/03 PHP
php模仿asp Application对象在线人数统计实现方法
2015/01/04 PHP
php输出xml属性的方法
2015/03/19 PHP
PHP版QQ互联OAuth示例代码分享
2015/07/05 PHP
PHP实现文件上传与下载实例与总结
2016/03/13 PHP
js的闭包的一个示例说明
2008/11/18 Javascript
IE6 弹出Iframe层中的文本框“经常”无法获得输入焦点
2009/12/27 Javascript
javascript插入样式实现代码
2012/02/22 Javascript
Jquery实现的tab效果可以指定默认显示第几页
2013/10/16 Javascript
javascript性能优化之DOM交互操作实例分析
2015/12/12 Javascript
jQuery树形插件jquery.simpleTree.js用法分析
2016/09/05 Javascript
jQuery tagsinput在h5邮件客户端中应用详解
2016/09/26 Javascript
原生js实现简单的焦点图效果实例
2017/12/14 Javascript
浅谈Vue网络请求之interceptors实际应用
2018/02/28 Javascript
Vue3 源码导读(推荐)
2019/10/14 Javascript
Vue监听滚动实现锚点定位(双向)示例
2019/11/13 Javascript
vue中keep-alive,include的缓存问题
2019/11/26 Javascript
jQuery实现的分页插件完整示例
2020/05/26 jQuery
vue 内联样式style中的background用法说明
2020/08/05 Javascript
vue动态设置页面title的方法实例
2020/08/23 Javascript
Python 实现一个颜色色值转换的小工具
2016/12/06 Python
简述Python2与Python3的不同点
2018/01/21 Python
Python IDLE清空窗口的实例
2018/06/25 Python
Python List cmp()知识点总结
2019/02/18 Python
python生成13位或16位时间戳以及反向解析时间戳的实例
2020/03/03 Python
Python文件时间操作步骤代码详解
2020/04/13 Python
Django ORM filter() 的运用详解
2020/05/14 Python
python 实现百度网盘非会员上传超过500个文件的方法
2021/01/07 Python
法人授权委托书格式
2014/04/08 职场文书
岗位竞聘演讲稿范文
2014/04/24 职场文书
英语教育专业自荐信
2014/05/29 职场文书
2014年信用社工作总结
2014/11/25 职场文书
退货证明模板
2015/06/23 职场文书
Mysql - 常用函数 每天积极向上
2021/04/05 MySQL
剧场版《转生恶役只好拔除破灭旗标》公开最新视觉图 2023年上映
2022/04/02 日漫