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获取apk文件URL地址实例
Nov 01 Python
DJANGO-ALLAUTH社交用户系统的安装配置
Nov 18 Python
python中django框架通过正则搜索页面上email地址的方法
Mar 21 Python
Python实现感知机(PLA)算法
Dec 20 Python
解决pycharm安装后代码区不能编辑的问题
Oct 28 Python
python 重命名轴索引的方法
Nov 10 Python
Python OpenCV对本地视频文件进行分帧保存的实例
Jan 08 Python
Python 实现交换矩阵的行示例
Jun 26 Python
Python中生成一个指定长度的随机字符串实现示例
Nov 06 Python
Flask项目中实现短信验证码和邮箱验证码功能
Dec 05 Python
Python如何把多个PDF文件合并代码实例
Feb 13 Python
详解Python3中的 input() 函数
Mar 18 Python
关于Python中进度条的六个实用技巧分享
如何在Python中妥善使用进度条详解
Apr 05 #Python
Python接口自动化之文件上传/下载接口详解
Apr 05 #Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
You might like
php skymvc 一款轻量、简单的php
2011/06/28 PHP
探讨如何把session存入数据库
2013/06/07 PHP
typecho插件编写教程(四):插件挂载
2015/05/28 PHP
PHP查找与搜索数组元素方法总结
2015/06/12 PHP
利用php_imagick实现复古效果的方法
2016/10/18 PHP
PHP调用接口用post方法传送json数据的实例
2018/05/31 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
2020/04/26 PHP
jquery鼠标滑过提示title具体实现代码
2013/08/06 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2013/10/24 Javascript
jQuery EasyUI 菜单与按钮之创建简单的菜单和链接按钮
2015/11/18 Javascript
详述JavaScript实现继承的几种方式(推荐)
2016/03/22 Javascript
jQuery实例—选项卡的简单实现(js源码和jQuery)
2016/06/14 Javascript
基于JavaScript实现熔岩灯效果导航菜单
2017/01/04 Javascript
详解vue嵌套路由-query传递参数
2017/05/23 Javascript
JavaScript寄生组合式继承实例详解
2018/01/06 Javascript
JavaScript实现简单的文本逐字打印效果示例
2018/04/12 Javascript
JavaScript 生成唯一ID的几种方式
2021/02/19 Javascript
[50:04]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第二局
2016/02/28 DOTA
[01:18:36]LGD vs VP Supermajor 败者组决赛 BO3 第一场 6.10
2018/07/04 DOTA
Python实现快速排序和插入排序算法及自定义排序的示例
2016/02/16 Python
Python操作Access数据库基本步骤分析
2016/09/19 Python
Python中用psycopg2模块操作PostgreSQL方法
2017/11/28 Python
python链接oracle数据库以及数据库的增删改查实例
2018/01/30 Python
win10下python3.8的PIL库安装过程
2020/06/08 Python
简单了解Python变量作用域正确使用方法
2020/06/12 Python
Nike香港官网:Nike HK
2019/03/23 全球购物
自荐信怎么写好
2013/11/11 职场文书
两只小狮子教学反思
2014/02/05 职场文书
元旦晚会活动总结
2014/07/09 职场文书
培训科主任岗位职责
2014/08/08 职场文书
地球物理学专业推荐信
2014/09/08 职场文书
农民工工资支付承诺书
2015/05/04 职场文书
会计岗位工作总结
2015/08/12 职场文书
Javascript中的解构赋值语法详解
2021/04/02 Javascript
pytorch中Schedule与warmup_steps的用法说明
2021/05/24 Python
django 认证类配置实现
2021/11/11 Python