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实用技巧两则
Aug 29 Python
python实现汉诺塔递归算法经典案例
Mar 01 Python
python实现rsa加密实例详解
Jul 19 Python
详解Python核心编程中的浅拷贝与深拷贝
Jan 07 Python
python实现微信远程控制电脑
Feb 22 Python
Python实现正则表达式匹配任意的邮箱方法
Dec 20 Python
Python 给屏幕打印信息加上颜色的实现方法
Apr 24 Python
python文档字符串(函数使用说明)使用详解
Jul 30 Python
Python中私有属性的定义方式
Mar 05 Python
python同时遍历两个list用法说明
May 02 Python
Python爬虫抓取指定网页图片代码实例
Jul 24 Python
Python如何批量生成和调用变量
Nov 21 Python
关于Python中进度条的六个实用技巧分享
如何在Python中妥善使用进度条详解
Apr 05 #Python
Python接口自动化之文件上传/下载接口详解
Apr 05 #Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
You might like
SONY ICF-F10中波修复记
2021/03/02 无线电
对squid中refresh_pattern的一些理解和建议
2009/04/17 PHP
php下保存远程图片到本地的办法
2010/08/08 PHP
让Json更懂中文(JSON_UNESCAPED_UNICODE)
2011/10/27 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
2016/09/30 PHP
php中的依赖注入实例详解
2019/08/14 PHP
nodejs的10个性能优化技巧
2014/07/15 NodeJs
原生的html元素选择器类似jquery选择器
2014/10/15 Javascript
JavaScript实现向setTimeout执行代码传递参数的方法
2015/04/16 Javascript
JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍
2016/11/10 Javascript
JavaScript贪吃蛇小组件实例代码
2017/08/20 Javascript
AngularJS实现动态切换样式的方法分析
2018/06/26 Javascript
原生JS实现的轮播图功能详解
2018/08/06 Javascript
vue debug 二种方法
2018/09/16 Javascript
详解基于原生JS验证表单组件xy-form
2019/08/20 Javascript
json解析大全 双引号、键值对不在一起的情况
2019/12/06 Javascript
创建与框架无关的JavaScript插件
2020/12/01 Javascript
[11:44]Ti9 OG夺冠时刻
2019/08/25 DOTA
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
python和shell变量互相传递的几种方法
2013/11/20 Python
python paramiko实现ssh远程访问的方法
2013/12/03 Python
Python随机数用法实例详解【基于random模块】
2017/04/18 Python
Python反转序列的方法实例分析
2018/03/21 Python
Python2和Python3之间的str处理方式导致乱码的讲解
2019/01/03 Python
TensorFlow自定义损失函数来预测商品销售量
2020/02/05 Python
python列表删除和多重循环退出原理详解
2020/03/26 Python
详解css3使用transform出现字体模糊的解决办法
2020/10/16 HTML / CSS
eDreams意大利:南欧领先的在线旅行社
2018/11/23 全球购物
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
艺术应用与设计专业个人的自我评价
2013/11/19 职场文书
材料采购员岗位职责
2013/12/17 职场文书
法学专业自我鉴定
2014/02/05 职场文书
祖国在我心中演讲稿600字
2014/09/23 职场文书
python函数指定默认值的实例讲解
2021/03/29 Python
QT与javascript交互数据的实现
2021/05/26 Javascript
十大冰系宝可梦排名,颜值最高的阿罗拉九尾,第三使用率第一
2022/03/18 日漫