python pyinstaller打包的exe 反编译问题记录 破解加密
首先是用pyinstxtractor
这个网上很多教程,不详说了。
生成一个xxx.exe_extracted目录
生成过程中,如果pyinstaller用key加密了,会
[!] Error: Failed to decompress PYZ-00.pyz_extracted\Cython\__init__.pyc, probably encrypted. Extracting as is.
这个说是fail了,其实可以解决,后面详说。
这个目录里,一堆xxx.pyc文件和一个PYZ-00.pyz_extracted目录
反编译.pyc和.pyc.encrypted
Unsupported Python version, 3.9.0, for decompilation
这堆xxx.pyc文件是没有加密的,直接用uncompyle6(也叫decompile3)(仅支持到python3.8,而我这个是3.9)或者pycdc(部分支持3.9及以上)
而PYZ-00.pyz_extracted里的.pyc.encrypted是加密了的,需要解密。(这里看情况,一些的程序不需要研究PYZ-00.pyz_extracted里加密了的库文件)
pycdc(也叫Decompyle++)
(有个在线支持3.9的网站,https://tool.lu/pyc,我怀疑也是用的pycdc。要会员才能多次用,我就没继续用。)
据说Windows上编译比较麻烦,我直接用的编译好的。
https://github.com/serfend/pydumpck
pip安装之后
site-packages\pydumpck\pyc_checker\lib_pycdc\pycdc.exe
我是把pycdc.exe复制出来单独运行的,因为我嫌pydumpck生成了几个单独的目录看着麻烦。
[System.Console]::OutputEncoding = [System.Text.Encoding]::UTF8
.\pycdc.exe .\a.pyc > .\a.py
这里注意,部分.pyc文件会处理发编译部分代码缺失的情况,会出现报错,因为pycdc并没有完善地支持python3.9+(Unsupported opcode )
struct magic number
https://github.com/MrWQ/reverse_pyinstaller
https://bbs.kanxue.com/thread-277811.htm
多个博客中说需要给.pyc文件前边加几个字节的魔数。不过我没加也用pycdc成功反编译了。不知道为什么
(这两个文件是否带.pyc后缀和你使用的pyinstxtractor.py工具版本有关系。V2.0以前的版本,会生成两个不带.pyc后缀的文件,手动为它添加.pyc后缀即可。如下图所示:)
加密的key隐藏在哪:pyimod00_crypto_key.pyc
解密逻辑参考:
https://tylinux.com/post/2023-09-05-decrypt-pyinstaller-generated-executable-file/
https://blog.csdn.net/GalaxySpaceX/article/details/130591614