找回密码
 会员注册
查看: 36|回复: 0

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

[复制链接]

11

主题

0

回帖

34

积分

新手上路

积分
34
发表于 2024-9-13 14:40:20 | 显示全部楼层 |阅读模式
下载附件得到ea_py.exe文件,放入DIE查看,是由pylnstaller打包的一、利用pyinstxtractor.py脚本工具将exe程序还原为pyc文件将pyinstxtractor.py脚本与我们要反编译的.exe文件放入同一个工作目录下,进入该文件夹目录输入命令:pythonpyinstxtractor.pyxxx.exeps:如下图所示,我们会看到编译该代码的python版本,我们同样应该使用相同的python版本来运行这个脚本,但其实这里影响不大,也能正常生产pyc文件;但python版本一致很重要,我们发现自己使用的python版本和要反编译的文件使用的python版本不一致就应该及时下载对应版本执行完毕,成功之后会生成xxx.exe_extracted文件夹,如图:进入这个生成的文件夹后,我们应该找到与exe文件同名的文件,并将其文件名后缀更改为.pyc接下来是重点,重中之重!在十六进制文本编辑器(如010editor)中自行补全ea_py.pyc文件的magicnumberMagicNumber的格式:Python3.3以下版本:只有MagicNumber和四位时间戳Python3.3(包含)-Python3.7(不包含)版本:4个字节的magicnumber+8个字节的时间戳,这个时间戳可以全是0。Python3.7(包含)版本以上:4个字节的magicnumber+4个字节的空白数据+4个字节的时间戳+4个字节的文件长度,除了magicnumber,其它数据可以全是0。此时的pyc文件是被抹除掉magicnumber的,需要找到对应python版本的magicnumber应插入到第一行中我能找到的网上的办法都很复杂,后面我发现其实只需要找到名为PYZ-00.pyz_extracted的文件夹(这个文件夹里放的是程序引入的依赖库)中任何一个.pyc文件打开就可以得到相应python版本的四字节magicnumber将magicnumber四个字节插入到xxx.pyc的文件中,后十二个字节可全为0(注意是插入不是覆盖,可以明显看到E3文件头在第二行第一个字节)如果python版本magicnumber不能正确对应,那么后面我们就无法成功将pyc文件反编译二、将pyc文件还原为py源代码文件有两种方法方法一:使用uncompyle6库最终通过查找各种资料得知目前uncompyle6只支持反编译python3.9以下版本的代码,故只能放弃这个方法。(其实尝试之前我就知道可能行不通,但我还是不撞南墙不回头)方法二:使用pycdc工具,严格来说无法还原为python文件,但能看到其源代码将pycdc.exe文件跟要还原的pyc文件放入同一个文件夹,在命令行输入命令可以在命令行显示pyc文件内的python源代码pycdcea_py.pyc如果想要保存到一个文件中:pycdc.exexxx.pyc>1.txt得到字符串:fW5hVWhjX0lhYl9he2dhbGY=根据反编译得到的python代码,我们编写一段python代码可以得到flagimportbase64enflagdata=base64.b64decode('fW5hVWhjX0lhYl9he2dhbGY=')enflag=enflagdata.decode('utf-8')flag=''foriinrange(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博客
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-25 13:06 , Processed in 0.293789 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表