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 10 Python
Python数据类型学习笔记
Jan 13 Python
在python中使用xlrd获取合并单元格的方法
Dec 26 Python
Python语言进阶知识点总结
May 28 Python
PyQt5使用QTimer实现电子时钟
Jul 29 Python
基于python 微信小程序之获取已存在模板消息列表
Aug 05 Python
pytorch 自定义参数不更新方式
Jan 06 Python
如何查看Django ORM执行的SQL语句的实现
Apr 20 Python
基于python tkinter的点名小程序功能的实例代码
Aug 22 Python
python中的unittest框架实例详解
Feb 05 Python
教你怎么用python爬取爱奇艺热门电影
May 20 Python
Python使用pyecharts控件绘制图表
Jun 05 Python
关于Python中进度条的六个实用技巧分享
如何在Python中妥善使用进度条详解
Apr 05 #Python
Python接口自动化之文件上传/下载接口详解
Apr 05 #Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
You might like
php扩展ZF――Validate扩展
2008/01/10 PHP
php求斐波那契数的两种实现方式【递归与递推】
2019/09/09 PHP
laravel 多图上传及图片的存储例子
2019/10/14 PHP
TP5框架请求响应参数实例分析
2019/10/17 PHP
浏览器加载、渲染和解析过程黑箱简析
2012/11/29 Javascript
js去空格技巧分别去字符串前后、左右空格
2013/10/21 Javascript
Jquery使用css方法改变样式实例
2015/05/18 Javascript
基于jquery实现select选择框内容左右移动添加删除代码分享
2015/08/25 Javascript
js将table的每个td的内容自动赋值给其title属性的方法
2016/10/13 Javascript
js实现字符全排列算法的简单方法
2017/05/01 Javascript
AngularJS自定义指令之复制指令实现方法
2017/05/18 Javascript
JavaScript箭头(arrow)函数详解
2017/06/04 Javascript
ionic 自定义弹框效果
2017/06/27 Javascript
详解vue.js之绑定class和style的示例代码
2017/08/24 Javascript
Vue2几种常见开局方式详解
2017/09/09 Javascript
详解vue 兼容IE报错解决方案
2018/12/29 Javascript
vue实现滑动超出指定距离回顶部功能
2019/07/31 Javascript
js实现双人五子棋小游戏
2020/05/28 Javascript
JavaScript中Object、map、weakmap的区别分析
2020/12/15 Javascript
[01:07:19]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第一场 1月19日
2021/03/11 DOTA
Python 自动化表单提交实例代码
2017/06/08 Python
flask入门之文件上传与邮件发送示例
2018/07/18 Python
Python实现提取XML内容并保存到Excel中的方法
2018/09/01 Python
python3使用matplotlib绘制条形图
2020/03/25 Python
Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现
2019/08/13 Python
详解python opencv、scikit-image和PIL图像处理库比较
2019/12/26 Python
Python多进程编程multiprocessing代码实例
2020/03/12 Python
浅谈CSS3特性查询(Feature Query: @supports)功能简介
2017/07/31 HTML / CSS
英国和爱尔兰最大的地毯零售商:Kukoon
2018/12/17 全球购物
Richards网上商店:当代时尚,遍布巴西
2019/11/03 全球购物
信用卡工资证明格式
2014/09/13 职场文书
幼儿园国庆节活动总结
2015/03/23 职场文书
OpenCV3.3+Python3.6实现图片高斯模糊
2021/05/18 Python
Java常用工具类汇总 附示例代码
2021/06/26 Java/Android
python3 字符串str和bytes相互转换
2022/03/23 Python
JS前端监控采集用户行为的N种姿势
2022/07/23 Javascript