python pyc文件解析_pyc文件
code object¶
在我们导入 python 脚本时在目录下会生成个一个相应的 pyc 文件,是pythoncodeobj的持久化储存形式,加速下一次的装载。
文件结构¶
pyc文件由三大部分组成
最开始4个字节是一个Maigc int, 标识此pyc的版本信息
接下来四个字节还是个int,是pyc产生的时间
序列化的 PyCodeObject,结构参照include/code.h,序列化方法python/marshal
pyc完整的文件解析可以参照
关于co_code
由
python3.6 以上参数永远占1字节,如果指令不带参数的话则以0x00代替,在运行过程中被解释器忽略,也是Stegosaurus技术原理;而低于python3.5的版本中指令不带参数的话却没有0x00填充
例题¶
首先尝试pycdc反编译失败
# Source Generated with Decompyle++
# File: imgenc.pyc (Python 2.7)
import sys
import numpy as np
from scipy.misc import imread, imsave
def doit(input_file, output_file, f):
Unsupported opcode: STOP_CODE
img = imread(input_file, flatten = True)
img /= 255
size = img.shape[0]
# WARNING: Decompyle incomplete
注意到是python2.7,也就是说指令序列共占1字节或3字节(有参数无参数)
使用pcads得到
imgenc.pyc (Python 2.7)
...
67 STOP_CODE
68 STOP_CODE
69 BINARY_DIVIDE
70 JUMP_IF_TRUE_OR_POP 5
73 LOAD_CONST 3: 0
76 LOAD_CONST 3: 0
79 BINARY_DIVIDE
定位到出错的地方,观察发现 LOAD_CONST LOAD_CONST BINARY_DIVIDE STORE_FAST opcodes (64 03 00 64 03 00 15 7d 05 00)被破坏了,根据上下文线索修复后
00000120 64 04 00 6b 00 00 72 ce 00 64 03 00 64 03 00 15 |d..k..r..d..d...|
00000130 7d 05 00 64 03 00 64 03 00 15 7d 05 00 64 03 00 |}..d..d...}..d..|
00000140 64 03 00 15 7d 05 00 64 03 00 64 03 00 15 7d 05 |d...}..d..d...}.|
00000150 00 64 03 00 64 03 00 15 7d 05 00 64 03 00 64 03 |.d..d...}..d..d.|
00000160 00 15 7d 05 00 64 03 00 64 03 00 15 7d 05 00 64 |..}..d..d...}..d|
00000170 03 00 64 03 00 15 7d 05 00 64 03 00 64 03 00 15 |..d...}..d..d...|
00000180 7d 05 00 64 03 00 64 03 00 15 7d 05 00 64 03 00 |}..d..d...}..d..|
00000190 64 03 00 15 7d 05 00 64 03 00 64 03 00 15 7d 05 |d...}..d..d...}.|
000001a0 00 64 03 00 64 03 00 15 7d 05 00 64 03 00 64 03 |.d..d...}..d..d.|
000001b0 00 15 7d 05 00 64 03 00 64 03 00 15 7d 05 00 6e |..}..d..d...}..n|
接下来根据修复好的python源代码得到flag即可
延伸:
Tools¶
将python字节码转换为可读的python 源代码,包含了反汇编(pycads)和反编译(pycdc)两种工具
允许我们在Python字节码文件(pyc或pyo)中嵌入任意Payload。由于编码密度较低,因此我们嵌入Payload的过程既不会改变源代码的运行行为,也不会改变源文件的文件大小
原理是在python的字节码文件中,利用冗余空间,将完整的payload代码分散隐藏到这些零零碎碎的空间中.
评论
python pyc文件解析_pyc文件相关推荐
- python分析pcap文件_利用Python库Scapy解析pcap文件的方法
每次写博客都是源于纳闷,python解析pcap这么常用的例子网上竟然没有,全是一堆命令行执行的python,能用吗?玩呢? pip安装scapy,然后解析pcap: import scapy fro ...
- [299]python实现批量解析PDF文件提取内容并写入到Excel中
摘要:最近需要将一批PDF文件中的某些数据整理到Excel中,因为文件数量接近20w+,手动更新几乎不现实,于是就提取关键词和内容动手写了个Python小工具,以实现自动完成上述目标. 要求: 读取P ...
- python 使用sax 解析xml 文件
这里不是说xml 的所以如果xml 不了解,可以百度大致看下即可, SAX知识了解 SAX (simple API for XML ) 有解析器和事件处理器 解析器负责读取XML文档,并向事件处理器 ...
- python使用ElementTree解析XML文件
一.将XML网页保存到本地 要加载XML文件首先应该将网页上的信息提取出来,保存为本地XML文件.抓取网页信息可以python的urllib模块. 代码如下: from urllib import u ...
- python xml etree_python解析xml文件之xml.etree.cElementTree和xml.etree.ElementTree区别和基本使用...
1.解析速度:ElementTree在 Python 标准库中有两种实现.一种是纯 Python 实现例如 xml.etree.ElementTree ,另外一种是速度快一点的 xml.etree.c ...
- python读取xml_python解析xml文件
加载和读取xml文件 import xml.dom.minidom doc = xml.dom.minidom.parse(xmlfile) 获取xml文档对象(对子节点和节点node都适用) roo ...
- grib1文件解析 python_grib文件解析
一.grib文件简介 WMO是世界气象组织,world meteorology organization. GRIB是WMO开发的一种用于交换和存储规则分布数据的二进制文件格式.最初GRIB表示&qu ...
- xpath修复html错误,【python】xpath解析html文件报错:lxml.etree.XPathEvalError: Invalid expression...
使用xpath解析一个简单的html文件,想获取href属性的值: html = etree.parse('test.html',etree.HTMLParser()) print(html.xpat ...
- 【Python实现】解析Drugbank文件中的XML
目录 1 样例一:xml直接提取 2 样例二:xml转json格式 3 提取drug-target信息 4 参考文献 1 样例一:xml直接提取 在做Drugbank数据处理时,发现的一个能够解决 ...
最新文章
- 第一次使用VS Code时你应该知道的一切配置
- boost::fusion::pop_back用法的测试程序
- tcp文件上传--多个客户端
- python开发的一些tips
- [html] 使用svg画一个爱心
- 遇见好链接(我还并没有看)
- Asp.net开发之旅--简单的引用母版页
- Linux Man手册的使用示例
- Kaggle比赛(二)House Prices: Advanced Regression Techniques
- mysql sslcipher_解决mysql数据库创建用户报错Field 'ssl_cipher' doesn't have a default value...
- 文本分析用GUI界面显示
- 弹幕服务器维护,分布式弹幕服务架构
- 那是飞扬的青春—小评《DOOM启示录》
- 【100个 Unity小知识点】☀️ | Unity 可以在编辑器中读取Excel,打包成exe后就无法读取的问题
- AllenNLP2.2.0:入门篇
- php解析shapefile,Fiona简介及Shapefile数据读取
- ASPEN.HYSYS.V7.1,Thermoflow软件分享下载
- NLPCC2013中文微博细粒度情感识别(二)
- RAW和QCOW2 两种存储设备格式区别
- 关于RFID电感耦合方式的射频前端工作原理,你了解吗?
热门文章
- android 课程表 ui,UICollectionViewLayout实现课程表布局
- 最新标准法规-涉及欧盟、沙特、巴西、南非市场
- linux串口返回条件,c – Linux – 串口读取返回EAGAIN
- 【LSSVM回归预测】基于自适应粒子群优化最小支持向量机优化实现数据回归预测附matlab代码...
- 计算几何学 | 圆与直线的交点 | Cross Points of a Circle and a Line | C/C++实现
- 领域建模应对软件复杂性初体验
- AspectJ中JoinPoint和ProceedingJoinPoint注解的使用
- buuctf-misc-小明的保险箱
- unc 目录不受支持_DOS批处理不支持将UNC 路径作为当前目录的解决方法
- 编程实现企业发放的奖金根据利润提成问题