python生成的exe文件反编译
今天整理电脑时发现了一个由python生成的exe文件,打开后疯狂弹窗,不禁产生想要将其反编译的想法
首先需要使用pyinstxtractor.py
文件将其从exe反编译pyc文件,在cmd中输入
1 | python pyinstxtractor.py Game_001.exe |
运行截图如下
生成了一个文件夹
内部文件如下,大多是dll和pyd文件,PYZ-00.pyz_extracted
文件夹,里面为引入的依赖库。我们接下来需要的是Game_001
文件和struct
文件
用记事本打开可以发现大部分字符为乱码,不过也能从中获取到一部分信息,我们从中看见了B站网页和tkinter的踪迹
经过对比Game_001
和struct
两个文件可以发现,Game_001缺少了第一行的16个字节,这16个字节表示这python编译的版本和时间信息,我们需要在Game_001中将这16个字节补上,并且加上后缀pyc,由此得到Game_001.pyc
文件。
一般python文件的魔法头如下
python 2.7 - 03 F3 0D 0A
python 3.6 - 33 0D 0D 0A
python 3.7 - 42 0D 0D 0A
python 3.8 - 55 0D 0D 0A
python 3.9+ - 61 0D 0D 0A
使用uncompyle6反编译发现失败
使用pycdc反编译发现成功了
首先在github中下载pycdc源码zrax/pycdc: C++ python bytecode disassembler and decompiler (github.com),之后使用vscode cmake构建
cmake构建成功后会在./build下生成pycdc.exe文件
在命令行中输入pycdc.exe Game_001.pyc > Game_001.py
即可得到编译后的源码
或者使用在线反编译工具python反编译 - 在线工具 (tool.lu)(该工具由pycdc构建),发现成功了
得到的代码如下
1 | #!/usr/bin/env python |