逆向工程:Python反编译工具的一点介绍(如何还原pyc文件)
1、什么是pyc 文件?
pyc是一种二进制文件,是由py文件经过编译后,生成的可执行的字节码文件。
pyc文件是可以跨平台部署的,类似Java的.class文件。
1.1 产生pyc文件
两种编译生成pyc文件的方法:
1、编译时选用 -m py_compile
# python -m py_compile test0.py
a = int(input())
b = int(input())
c = int(input())
print(a+b)
for i in range(c):
print(i)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
2、使用代码编译
import py_compile
py_compile.compile(r'test0.py')
- 1
- 2
3、使用-O选项,将.pyc文件优化为.pyo文件(体积更小)
# python -O -m py_compile test0.py
- 1
1.2 pyc文件结构
pyc 文件由三大部分组成
- 最开始 4 个字节是一个 Maigc int, 标识此 pyc 的版本信息
- 接下来四个字节还是个 int, 是 pyc 产生的时间
- 序列化的 PyCodeObject
PyObject的序列化格式结构
- 参考资料:https://kdr2.com/tech/python/pyc-format.html
2、将pyc反编译为py
2.1 uncompyle(win / linux)
uncompyle6 input.pyc > output.py
uncompyle6 test2.pyc > test2.py
下载:https://github.com/rocky/python-uncompyle6
安装:pip install uncompyle
报错:ValueError: check_hostname requires server_hostname
解决:需要断开代理服务器
2.2 pycdc(linux)
将 python 字节码转换为可读的 python 源代码, 包含了反汇编 (pycads) 和反编译 (pycdc) 两种工具
使用
./pycdc xxxx.pyc
# 得到py代码
./pycdas xxxx.pyc
# 得到字节码
下载:https://github.com/zrax/pycdc
安装:
sudo apt install git #安装git
sudo apt install cmake #安装cmake
git clone https://github.com/zrax/pycdc.git #下载pycdc到桌面
cd pycdc #进入到pycdc的目录
cmake .
make #安装pycdc工具
- 1
- 2
- 3
- 4
- 5
- 6
- 7
3、将exe反编译为pyc
python pyinstxtractor.py xxx.exe
下载:https://github.com/extremecoders-re/pyinstxtractor
备注:
1.0会去掉头部的struct,2.0已经解决了这个bug
注意: 需要将解包出来的pyc头部加上33 0d 0d 0a 00 00 00 00 00 00 00 00 e3 00 00 00
才能反编译出py
文章来源: gwj1314.blog.csdn.net,作者:小哈里,版权归原作者所有,如需转载,请联系作者。
原文链接:gwj1314.blog.csdn.net/article/details/126929263
- 点赞
- 收藏
- 关注作者
评论(0)