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使用Beautiful Soup包编写爬虫时的一些关键点
Jan 20 Python
在MAC上搭建python数据分析开发环境
Jan 26 Python
Python实现的多线程同步与互斥锁功能示例
Nov 30 Python
浅谈Python中的作用域规则和闭包
Mar 20 Python
python 读取DICOM头文件的实例
May 07 Python
用Python实现筛选文件脚本的方法
Oct 27 Python
浅析Python 中几种字符串格式化方法及其比较
Jul 02 Python
python 判断字符串中是否含有汉字或非汉字的实例
Jul 15 Python
通过实例了解python property属性
Nov 01 Python
python文件排序的方法总结
Sep 13 Python
如何使用Python进行PDF图片识别OCR
Jan 22 Python
python 如何执行控制台命令与操作剪切板
May 20 Python
关于Python中进度条的六个实用技巧分享
如何在Python中妥善使用进度条详解
Apr 05 #Python
Python接口自动化之文件上传/下载接口详解
Apr 05 #Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
You might like
PHP模块 Memcached功能多于Memcache
2011/06/14 PHP
PHP 数据结构 算法 三元组 Triplet
2011/07/02 PHP
php中防止SQL注入的最佳解决方法
2013/04/25 PHP
php封装好的人民币数值转中文大写类
2015/12/20 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
利用javascript/jquery对上传文件格式过滤的方法
2009/07/25 Javascript
javascript setAttribute, getAttribute 在不同浏览器上的不同表现
2010/08/05 Javascript
判断多个input type=file是否有已经选择好文件的代码
2012/05/23 Javascript
js同比例缩放图片的小例子
2013/10/30 Javascript
JavaScript实现班级随机点名小应用需求的具体分析
2014/05/12 Javascript
JS控制输入框内字符串长度
2014/05/21 Javascript
jQuery带箭头提示框tooltips插件集锦
2014/11/17 Javascript
node.js中的http.response.setHeader方法使用说明
2014/12/14 Javascript
javascript实现的简单计时器
2015/07/19 Javascript
跟我学习javascript的arguments对象
2015/11/16 Javascript
JS组件Bootstrap Table使用实例分享
2016/05/30 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
2016/12/03 Javascript
微信小程序 弹幕功能简单实例
2017/02/14 Javascript
vue项目实现记住密码到cookie功能示例(附源码)
2018/01/31 Javascript
基于React+Redux的SSR实现方法
2018/07/03 Javascript
解决微信小程序中转换时间格式IOS不兼容的问题
2019/02/15 Javascript
JS实现点餐自动选择框(案例分析)
2019/12/10 Javascript
python基于windows平台锁定键盘输入的方法
2015/03/05 Python
Python实现批量读取word中表格信息的方法
2015/07/30 Python
详解Python里使用正则表达式的ASCII模式
2017/11/02 Python
Python学习笔记之pandas索引列、过滤、分组、求和功能示例
2019/06/03 Python
如何在Django项目中引入静态文件
2019/07/26 Python
python3获取控制台输入的数据的具体实例
2020/08/16 Python
canvas实现飞机打怪兽射击小游戏的示例代码
2018/07/09 HTML / CSS
打架检讨书100字
2014/01/08 职场文书
关于安全的演讲稿
2014/05/09 职场文书
贫困证明书格式及范文
2014/10/15 职场文书
优秀班主任主要事迹材料
2014/12/16 职场文书
故宫导游词
2015/01/31 职场文书
PHP 对接美团大众点评团购券(门票)的开发步骤
2021/04/03 PHP
Python FuzzyWuzzy实现模糊匹配
2022/04/28 Python