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 相关文章推荐
pycharm 使用心得(六)进行简单的数据库管理
Jun 06 Python
用Python的Tornado框架结合memcached页面改善博客性能
Apr 24 Python
Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
May 22 Python
Python内建模块struct实例详解
Feb 02 Python
python 中字典嵌套列表的方法
Jul 03 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
Aug 02 Python
python 重命名轴索引的方法
Nov 10 Python
Django unittest 设置跳过某些case的方法
Dec 26 Python
Python实现括号匹配方法详解
Feb 10 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
Mar 16 Python
Python监听剪切板实现方法代码实例
Nov 11 Python
解决python存数据库速度太慢的问题
Apr 23 Python
关于Python中进度条的六个实用技巧分享
如何在Python中妥善使用进度条详解
Apr 05 #Python
Python接口自动化之文件上传/下载接口详解
Apr 05 #Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
You might like
收音机的保养
2021/03/01 无线电
PHP GD 图像处理组件的常用函数总结
2010/04/28 PHP
php笔记之:数据类型与常量的使用分析
2013/05/14 PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
2013/06/26 PHP
Thinkphp微信公众号支付接口
2016/08/04 PHP
PHP版微信第三方实现一键登录及获取用户信息的方法
2016/10/14 PHP
PHP文件操作详解
2016/12/30 PHP
PHP基于进程控制函数实现多线程
2020/12/09 PHP
js实现带有介绍的Select列表菜单实例
2015/08/18 Javascript
Jquery检验手机号是否符合规则并根据手机号检测结果将提交按钮设为不同状态
2015/11/26 Javascript
Bootstrap CSS组件之导航条(navbar)
2016/12/17 Javascript
angularjs 实现带查找筛选功能的select下拉框实例
2017/01/11 Javascript
超简单的Vue.js环境搭建教程
2017/03/17 Javascript
javascript实现滑动解锁功能
2017/03/22 Javascript
浅谈webpack对样式的处理
2018/01/05 Javascript
JS+HTML5 Canvas实现简单的写字板功能示例
2018/08/30 Javascript
详解webpack-dev-middleware 源码解读
2020/03/23 Javascript
微信小程序自定义modal弹窗组件的方法详解
2020/12/20 Javascript
Python实现的石头剪子布代码分享
2014/08/22 Python
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
利用Python实现命令行版的火车票查看器
2016/08/05 Python
深入理解Python中的super()方法
2017/11/20 Python
python判断所输入的任意一个正整数是否为素数的两种方法
2019/06/27 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
2019/07/11 Python
tensorboard显示空白的解决
2020/02/15 Python
Jupyter Notebook安装及使用方法解析
2020/11/12 Python
详解css3中的伪类before和after常见用法
2020/11/17 HTML / CSS
地球上最先进的胡子和头发修剪器:Bevel
2018/01/23 全球购物
什么是托管函数?托管函数有什么用?
2014/06/15 面试题
高中毕业自我鉴定范文
2013/10/02 职场文书
编辑找工作求职信范文
2013/12/16 职场文书
单位领导证婚词
2014/01/14 职场文书
一夜的工作教学反思
2014/02/08 职场文书
家长会标语
2014/06/24 职场文书
党的群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
幼儿园2016年感恩节活动总结
2016/04/01 职场文书