赞
踩
下载附件得到ea_py.exe文件,放入DIE查看,是由pylnstaller打包的
将pyinstxtractor.py脚本与我们要反编译的.exe文件放入同一个工作目录下,进入该文件夹目录输入命令:
python pyinstxtractor.py xxx.exe
ps:如下图所示,我们会看到编译该代码的python版本,我们同样应该使用相同的python版本来运行这个脚本,但其实这里影响不大,也能正常生产pyc文件;但python版本一致很重要,我们发现自己使用的python版本和要反编译的文件使用的python版本不一致就应该及时下载对应版本
执行完毕,成功之后会生成xxx.exe_extracted文件夹,如图:
进入这个生成的文件夹后,我们应该找到与exe文件同名的文件,并将其文件名后缀更改为.pyc
接下来是重点,重中之重!在十六进制文本编辑器(如010editor)中自行补全ea_py.pyc文件的magic number
Magic Number的格式:
Python3.3 以下版本: 只有Magic Number和四位时间戳
Python3.3(包含) - Python3.7(不包含)版本: 4个字节的magic number + 8个字节的时间戳,这个时间戳可以全是0。
Python3.7(包含)版本以上: 4个字节的magic number + 4个字节的空白数据 + 4个字节的时间戳 + 4个字节的文件长度,除了magic number,其它数据可以全是0。
此时的pyc文件是被抹除掉magic number的,需要找到对应python版本的magic number应插入到第一行中
我能找到的网上的办法都很复杂,后面我发现其实只需要找到名为PYZ-00.pyz_extracted的文件夹(这个文件夹里放的是程序引入的依赖库)中任何一个.pyc文件打开
就可以得到相应python版本的四字节magic number
将magic number四个字节插入到xxx.pyc的文件中,后十二个字节可全为0(注意是插入不是覆盖,可以明显看到E3文件头在第二行第一个字节)
如果python版本magic number不能正确对应,那么后面我们就无法成功将pyc文件反编译
有两种方法
最终通过查找各种资料得知目前uncompyle6只支持反编译python3.9以下版本的代码,故只能放弃这个方法。(其实尝试之前我就知道可能行不通,但我还是不撞南墙不回头)
将pycdc.exe文件跟要还原的pyc文件放入同一个文件夹,在命令行输入命令可以在命令行显示pyc文件内的python源代码
pycdc ea_py.pyc
如果想要保存到一个文件中:
pycdc.exe xxx.pyc > 1.txt
得到字符串:
fW5hVWhjX0lhYl9he2dhbGY=
根据反编译得到的python代码,我们编写一段python代码可以得到flag
- import base64
-
- enflagdata=base64.b64decode('fW5hVWhjX0lhYl9he2dhbGY=')
- enflag=enflagdata.decode('utf-8')
- flag=''
- for i in range(len(enflag)):
- flag+=enflag[len(enflag)-i-1]
- print(flag)
输出结果:
flag{a_baI_chUan}
参考的文章链接:
Python 反编译:pyinstxtractor工具和uncompyle6库的使用-CSDN博客
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。