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操作时间和日期之asctime()方法的使用
May 22 Python
python基础教程之分支、循环简单用法
Jun 16 Python
Python使用PDFMiner解析PDF代码实例
Mar 27 Python
python学习必备知识汇总
Sep 08 Python
Tensorflow实现卷积神经网络的详细代码
May 24 Python
Django项目中包含多个应用时对url的配置方法
May 30 Python
Python下调用Linux的Shell命令的方法
Jun 12 Python
解决PyCharm同目录下导入模块会报错的问题
Oct 13 Python
Django对接支付宝实现支付宝充值金币功能示例
Dec 17 Python
Django操作session 的方法
Mar 09 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
Oct 20 Python
利用python实时刷新基金估值(摸鱼小工具)
Sep 15 Python
关于Python中进度条的六个实用技巧分享
如何在Python中妥善使用进度条详解
Apr 05 #Python
Python接口自动化之文件上传/下载接口详解
Apr 05 #Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
You might like
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
php中替换字符串函数strtr()和str_repalce()的用法与区别
2016/11/25 PHP
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
jQuery toggle()设置CSS样式
2009/11/05 Javascript
一个轻量级的javascript库 pj介绍
2010/12/19 Javascript
基于jQuery的图片剪切插件
2011/08/03 Javascript
jQuery AjaxQueue改进步骤
2011/10/06 Javascript
juery框架写的弹窗效果适合新手
2013/11/27 Javascript
原生JS绑定滑轮滚动事件兼容常见浏览器
2014/06/30 Javascript
javascript查询字符串参数的方法
2015/01/28 Javascript
JQuery用户名校验的具体实现
2016/03/18 Javascript
angular 基于ng-messages的表单验证实例
2017/05/04 Javascript
微信小程序 跳转传递数据的实例
2017/07/06 Javascript
深入浅析Node.js单线程模型
2017/07/10 Javascript
详解使用angular的HttpClient搭配rxjs
2017/09/01 Javascript
Nodejs+express+ejs简单使用实例代码
2017/09/18 NodeJs
快速处理vue渲染前的显示问题
2018/03/05 Javascript
Vue实现动态创建和删除数据的方法
2018/03/17 Javascript
微信小程序template模版的使用方法
2019/04/13 Javascript
vue中的过滤器实例代码详解
2019/06/06 Javascript
ES6的异步终极解决方案分享
2019/07/11 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
2019/09/09 Javascript
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
Python异常学习笔记
2015/02/03 Python
Python计算一个文件里字数的方法
2015/06/15 Python
使用Python判断质数(素数)的简单方法讲解
2016/05/05 Python
用十张图详解TensorFlow数据读取机制(附代码)
2018/02/06 Python
python两个list[]相加的实现方法
2020/09/23 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
2020/11/17 Python
简单的JAVA编程面试题
2013/03/19 面试题
80后职场人的职业生涯规划
2014/03/08 职场文书
校园安全演讲稿
2014/05/09 职场文书
2015幼儿园新学期寄语
2015/02/27 职场文书
《7的乘法口诀》教学反思
2016/02/18 职场文书
致创业您:正能量激励人心句子(48条)
2019/08/15 职场文书
OpenCV图像变换之傅里叶变换的一些应用
2021/07/26 Python