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抓取网页正文的源码
Jun 11 Python
Python写入CSV文件的方法
Jul 08 Python
Python中对元组和列表按条件进行排序的方法示例
Nov 10 Python
Python中规范定义命名空间的一些建议
Jun 04 Python
一篇文章弄懂Python中所有数组数据类型
Jun 23 Python
python 计算平均平方误差(MSE)的实例
Jun 29 Python
python中时间转换datetime和pd.to_datetime详析
Aug 11 Python
基于Python实现剪切板实时监控方法解析
Sep 11 Python
Python分割训练集和测试集的方法示例
Sep 19 Python
python 循环数据赋值实例
Dec 02 Python
使用 Python 遍历目录树的方法
Feb 29 Python
Django admin 实现search_fields精确查询实例
Mar 30 Python
关于Python中进度条的六个实用技巧分享
如何在Python中妥善使用进度条详解
Apr 05 #Python
Python接口自动化之文件上传/下载接口详解
Apr 05 #Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
You might like
使用php shell命令合并图片的代码
2011/06/23 PHP
PHP中读写文件实现代码
2011/10/20 PHP
PHP容易被忽略而出错陷阱 数字与字符串比较
2011/11/10 PHP
PHP整数取余返回负数的相关解决方法
2014/05/15 PHP
成为好程序员必须避免的5个坏习惯
2014/07/04 PHP
php对象和数组相互转换的方法
2015/05/12 PHP
PHP获取当前相对于域名目录的方法
2015/06/26 PHP
PHP常用的排序和查找算法
2015/08/06 PHP
php实现的中秋博饼游戏之掷骰子并输出结果功能详解
2017/11/06 PHP
php微信开发之谷歌测距
2018/06/14 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
基于Asp.net与Javascript控制的日期控件
2010/05/22 Javascript
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
jQuery 对Select的操作备忘记录
2011/07/04 Javascript
JS方法调用括号的问题探讨
2014/01/24 Javascript
js监听滚动条滚动事件使得某个标签内容始终位于同一位置
2014/01/24 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
2015/08/06 Javascript
浅谈angular.js中实现双向绑定的方法$watch $digest $apply
2015/10/14 Javascript
基于Jquery制作图片文字排版预览效果附源码下载
2015/11/18 Javascript
jquery+css3实现会动的小圆圈效果
2016/01/27 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
2016/05/25 Javascript
分享bootstrap学习笔记心得(组件及其属性)
2017/01/11 Javascript
JS面向对象之多选框实现
2020/01/17 Javascript
vue路由传参的基本实现方式小结【三种方式】
2020/02/05 Javascript
python回溯法实现数组全排列输出实例分析
2015/03/17 Python
Cpy和Python的效率对比
2015/03/20 Python
Python如何获取系统iops示例代码
2016/09/06 Python
FLIR美国官网:热成像, 夜视和红外摄像系统
2018/07/13 全球购物
北京银河万佳Java面试题
2012/03/21 面试题
这段代码难道不该打印出56吗
2013/02/27 面试题
学生感冒英文请假条
2014/02/04 职场文书
学校读书活动总结
2014/06/30 职场文书
给老婆的保证书怎么写
2015/05/08 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
Redis如何使用乐观锁(CAS)保证数据一致性
2022/03/25 Redis
spring 项目实现限流方法示例
2022/07/15 Java/Android