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实现杨辉三角思路
Jul 14 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
Sep 08 Python
python不换行之end=与逗号的意思及用途
Nov 21 Python
tensorflow训练中出现nan问题的解决
Feb 10 Python
python使用循环打印所有三位数水仙花数的实例
Nov 13 Python
python 定时器每天就执行一次的实现代码
Aug 14 Python
django重新生成数据库中的某张表方法
Aug 28 Python
Python @property原理解析和用法实例
Feb 11 Python
python解析xml文件方式(解析、更新、写入)
Mar 05 Python
解决PyCharm无法使用lxml库的问题(图解)
Dec 22 Python
python中str内置函数用法总结
Dec 27 Python
判断Python中的Nonetype类型
May 25 Python
关于Python中进度条的六个实用技巧分享
如何在Python中妥善使用进度条详解
Apr 05 #Python
Python接口自动化之文件上传/下载接口详解
Apr 05 #Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
You might like
php 安全过滤函数代码
2011/05/07 PHP
一个好用的PHP验证码类实例分享
2013/12/27 PHP
PHP连接MySQL的2种方法小结以及防止乱码
2014/03/11 PHP
php统计数组元素个数的方法
2015/07/02 PHP
php基于PDO实现功能强大的MYSQL封装类实例
2017/02/27 PHP
javascript自动给文本url地址增加链接的方法分享
2014/01/20 Javascript
使用JQuery FancyBox插件实现图片展示特效
2015/11/16 Javascript
使用Bootstrap typeahead插件实现搜索框自动补全的方法
2016/07/07 Javascript
在js里怎么实现Xcode里的callFuncN方法(详解)
2016/11/05 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
Angular.JS中指令ng-if的注意事项小结
2017/06/21 Javascript
详解node服务器中打开html文件的两种方法
2017/09/18 Javascript
jQuery Datatables表头不对齐的解决办法
2017/11/27 jQuery
vue组件挂载到全局方法的示例代码
2018/08/02 Javascript
vue-cli2.0转3.0之项目搭建的详细步骤
2018/12/11 Javascript
小程序实现抽奖动画
2020/04/16 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
2019/08/12 Javascript
python文件比较示例分享
2014/01/10 Python
matplotlib绘图实例演示标记路径
2018/01/23 Python
基于Python中求和函数sum的用法详解
2018/06/28 Python
windows下安装Python虚拟环境virtualenvwrapper-win
2019/06/14 Python
Django中间件基础用法详解
2019/07/18 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
2019/08/27 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
python对文件的操作方法汇总
2020/02/28 Python
Python3之乱码\xe6\x97\xa0\xe6\xb3\x95处理方式
2020/05/11 Python
python如何利用paramiko执行服务器命令
2020/11/07 Python
Python 利用Entrez库筛选下载PubMed文献摘要的示例
2020/11/24 Python
在C语言中实现抽象数据类型什么方法最好
2014/06/26 面试题
UNIX特点都有哪些
2016/04/05 面试题
毕业学生推荐信
2013/12/01 职场文书
员工拾金不昧表扬信
2014/01/09 职场文书
《在家里》教后反思
2014/03/01 职场文书
优质服务演讲稿
2014/05/14 职场文书
解约证明模板
2015/06/19 职场文书
pnpm对npm及yarn降维打击详解
2022/08/05 Javascript