python反编译
.exe → .pyc
pyinstxtractor
https://github.com/extremecoders-re/pyinstxtractor
https://github.com/countercept/python-exe-unpacker
命令:
pyinstxtractor-ng [filename]
python pyinstxtractor.py [filename]
转换出来的主程序格式不对,还需要对其进行手动修复。
需要在该文件起始位置加上8个字节的pyc头,由4字节的magic和4字节的时间戳组成,其中magic会因为python版本的不同而不同,有个技巧就是,查看struct文件的magic,直接复制过去,保存为.pyc文件。
Pyinstaller
https://github.com/pyinstaller/pyinstaller
命令:
pyi-archive_viewer [filename]
python archive_viewer.py [filename]
两者对比文件头,添加12字节:
? x src
? x struct
打开文件夹:
? o PYZ-00.pyz
.pyc → .py
在线工具
pycdc
命令:
./pycdc [filename].pyc > [output-filename].py
uncompyle6
https://github.com/rocky/python-uncompyle6/
命令:
uncompyle6 [filename].pyc > [output-filename].py
(python < 3.9)pydumpck
https://github.com/serfend/pydumpck
命令:
1
2
3
4
5
6pydumpck xxx.exe
pydumpck xxx.elf
pydumpck xxx.pyc
pydumpck xxx.pyz
pydumpck xxx.exe --output ./output --thread 8 --timeout 10
pydumpck xxx.exe -p pycdc uncompyle6
pyc文件恢复(去混淆)
https://www.52pojie.cn/thread-912103-1-1.html
常见版本幻数
1 | Python 2.7: 03 f3 0d 0a |
恢复bytecode
1 | #安装环境 |
pyc文件解密
在反编译python生成可执行文件exe时,引用的类库文件经常遇到使用Crypto模块AES算法加密,解包生成的并不是pyc文件,而是加密的pyc.encrypted文件,它无法查看编译。
第一步,获取Crypto的key,这是打包时由开发者指定的。解包完成后将在根目录形成名为 pyimod00_crypto_key.pyc
的文件,将它转为py文件即可查看key文件。
第二步,编写解密处理的脚本代码
1 | import glob |
在前一步中获取的key是必须文件,否则无法进行解密;对于不同python版本头文件(header)也不相同,2.7~3.10如下:
1 | Python 2.7: \x03\xf3\x0d\x0a\0\0\0\0 |
第三步,执行脚本文件,即可将加密的pyc.encrypted文件转成不加密的pyc文件。