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中的__slots__缓存资源以节省内存开销的方法
Apr 02 Python
pygame学习笔记(5):游戏精灵
Apr 15 Python
python类装饰器用法实例
Jun 04 Python
Python反转序列的方法实例分析
Mar 21 Python
使用Python写一个小游戏
Apr 02 Python
对numpy中布尔型数组的处理方法详解
Apr 17 Python
对python3标准库httpclient的使用详解
Dec 18 Python
Python基于plotly模块实现的画图操作示例
Jan 23 Python
OpenCV+face++实现实时人脸识别解锁功能
Aug 28 Python
python中的逆序遍历实例
Dec 25 Python
详解KMP算法以及python如何实现
Sep 18 Python
详解用 python-docx 创建浮动图片
Jan 24 Python
关于Python中进度条的六个实用技巧分享
如何在Python中妥善使用进度条详解
Apr 05 #Python
Python接口自动化之文件上传/下载接口详解
Apr 05 #Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
You might like
可定制的PHP缩略图生成程式(需要GD库支持)
2007/03/06 PHP
PHP XML error parsing SOAP payload on line 1
2010/06/17 PHP
探讨:如何通过stats命令分析Memcached的内部状态
2013/06/14 PHP
PHP编程风格规范分享
2014/01/15 PHP
在win系统安装配置 Memcached for PHP 5.3 图文教程
2015/03/03 PHP
使用PHP如何实现高效安全的ftp服务器(二)
2015/12/30 PHP
基于thinkphp6.0的success、error实现方法
2019/11/05 PHP
laravel7学习之无限级分类的最新实现方法
2020/09/30 PHP
IE8下关于querySelectorAll()的问题
2010/05/13 Javascript
ASP.NET中使用后端代码注册脚本 生成JQUERY-EASYUI的界面错位的解决方法
2010/06/12 Javascript
使用jQuery动态加载js脚本文件的方法
2014/04/03 Javascript
jQuery 获取、设置HTML或TEXT内容的两种方法
2014/05/23 Javascript
Javascript将数值转换为金额格式(分隔千分位和自动增加小数点)
2016/06/22 Javascript
JS仿淘宝搜索框用户输入事件的实现
2017/06/19 Javascript
php 解压zip压缩包内容到指定目录的实例
2018/01/23 Javascript
node.js部署之启动后台运行forever的方法
2018/05/23 Javascript
浅析java线程中断的办法
2018/07/29 Javascript
js实现简单音乐播放器
2020/06/30 Javascript
[03:23]我的刀塔你不可能这么可爱 第一期金萌萌的故事
2014/06/20 DOTA
Python实现的异步代理爬虫及代理池
2017/03/17 Python
Python 网页解析HTMLParse的实例详解
2017/08/10 Python
Python实现字符串的逆序 C++字符串逆序算法
2020/05/28 Python
Puppeteer使用示例详解
2019/06/20 Python
python单线程下实现多个socket并发过程详解
2019/07/27 Python
numpy矩阵数值太多不能全部显示的解决
2020/05/14 Python
IE浏览器单独写CSS样式的几种方法
2014/10/14 HTML / CSS
HTML5 创建canvas元素示例代码
2014/06/04 HTML / CSS
OSPREY LONDON官网:英国本土皮具品牌
2019/05/31 全球购物
西班牙宠物用品和食品网上商店:Tiendanimal
2019/06/06 全球购物
精选干货:Java精选笔试题附答案
2014/01/18 面试题
大学生2014全国两会学习心得体会
2014/03/10 职场文书
解除财产保全担保书
2014/05/20 职场文书
房产销售独家委托书范本
2014/10/01 职场文书
政审证明材料
2015/06/19 职场文书
golang 实现时间戳和时间的转化
2021/05/07 Golang
pytorch Dropout过拟合的操作
2021/05/27 Python