【逆向 python】反编译pylnstaller打包的exe文件

下载附件得到ea_py.exe文件,放入DIE查看,是由pylnstaller打包的

一、利用pyinstxtractor.py脚本工具将exe程序还原为pyc文件

将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文件反编译

二、将pyc文件还原为py源代码文件

有两种方法

方法一:使用uncompyle6库

最终通过查找各种资料得知目前uncompyle6只支持反编译python3.9以下版本的代码,故只能放弃这个方法。(其实尝试之前我就知道可能行不通,但我还是不撞南墙不回头)

方法二:使用pycdc工具,严格来说无法还原为python文件,但能看到其源代码

将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 反编译:pycdc工具的使用-CSDN博客

Python 反编译:pyinstxtractor工具和uncompyle6库的使用-CSDN博客

[Python逆向] 逆向Pyinstaller打包的exe文件源码及保护_exe逆向分析源码-CSDN博客

Python 反编译:pycdc工具的使用-CSDN博客

  • 18
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值