You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Python二进制文件转换为可读格式?

问题

我有一个应为Python函数的二进制文件,想要读取它。当前打开并打印数据时得到如下内容:

b'c\x00\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00C\x00\x00\x00s3\x03\x00\x00d\x01\x00\x01\x03\x03\x03\t\x02\x02\t\x03\x03\x03\t\x02\x02\td\x02\x00d\x00\x00l\x00\x00}\x01\x00d\x02\x00d\x00\x00l\x01\x00}\x02\x00t\x02\x00\x83\x00\x00}\x03\x00d\x03\x00}\x00\x00t\x03\x00|\x03\x00\x83...'

获取该输出的Python代码:

file = open('flag_function', 'rb')
data = file.read()
print(data)
# convert the data to a readable format

请问如何将该格式转换为可读数据?

解决方案

你看到的是Python编译后的字节码,并非明文代码,需要用Python内置的dis模块反编译为可读的指令。具体步骤如下:

  • 导入dis和marshal模块(Python用marshal序列化字节码)
  • 根据文件类型处理:
    1. 如果是完整的.pyc文件:需要先跳过文件头部(Python 3.7及以上版本头部长度为16字节),再加载为代码对象
    2. 如果仅包含函数的字节码片段:直接加载数据即可

示例代码:

import dis
import marshal

with open('flag_function', 'rb') as f:
    # 若是完整pyc文件,取消下面一行注释跳过头部
    # f.seek(16)
    code_obj = marshal.load(f)

# 反编译为可读指令
dis.dis(code_obj)

执行后会输出类似如下的可读指令(示例):

1           0 LOAD_CONST               1 (1)
              3 LOAD_CONST               2 (2)
              6 BINARY_ADD
              7 RETURN_VALUE

这些指令对应原Python代码的执行逻辑,你可以根据指令逆向推导出原函数的功能。

内容的提问来源于stack exchange,提问作者roee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 07:01:21