python如何编译为exe,python 写exe
注意:
除非另有说明,否则下面使用的所有python版本都是3.8.6。
文章中提到的相关工具包含在附件中。
一.步骤
1.exe pyc
方法1: pyinstxtractor.py
执行python pyinstxtractor.py如果成功,可以得到_extracted文件夹。
注意:执行时会提示python版本。如果想正常解包,必须使用正确的python版本。
方法2: archive _ viewer.py
执行python archive_viewer.py将打印EXE文件中包含的所有文件信息。
使用x命令提取您想要提取的文件,使用q命令退出。
两者的区别
方法1可以一次性提取所有文件,方法2只能逐个提取文件。但在个人使用中,方法2的成功率相对较高。可以先试试方法1,失败后再用方法2。
2.pyc py
第一步得到的文件是pyc文件,需要进一步反编译得到py文件。
注意:我遇到过直接获取py文件的情况,可以在反编译前检查一下是否已经成功。
2.1 pyc文件恢复
注意:pyinstxtractor.py最新版本支持pyc自动恢复,但精度无法通过实验保证。或者需要使用准确的python版本。
在将python文件打包成exe文件的过程中,pyc文件前面的一些信息会被擦除,所以反编译前需要检查并添加这些信息。
擦除的信息内容可以从结构文件中获得:
结构文件:
Pyc文件:
Q1:你需要添加多少字节?
几篇参考文章中提到的添加字节数不一致,应该和使用的python版本有关。但是在一些已知的例子中,可以看到pyc文件的前几个字节和struct文件中的是一样的。例如,上图中的pyc文件以E3 00 00 00开头,这部分字节与struct文件第二行的起始字节相同。
因此,在本例中,需要复制和添加的字节是结构文件中第一行的16个字节。
Q2:加法的方法是什么?
在010editor中,选择编辑插入/覆盖插入字节,起始地址填写0,大小填写16。
然后将字节复制到。
2.2反编译
反编译工具
简单的Python反编译器
这是一个GUI界面的可执行文件。可以下载直接用,但不一定能成功。有些魔法值是不能被认可的。
未编译6
这个工具需要通过pip安装,通过脚本执行。成功率很高。
反编译提示魔值有问题怎么办?
在我们上面添加的16个字节中,前四个字节代表magic value,前两个字节代表python的版本号。一般来说,magic value的问题是版本号有问题,编译器不识别这个版本号代表的python版本。
如果你用的是Easy Python Decompiler,可以直接切换到un comple 6。
如果你已经在使用uncompyle6,你需要先看看它能识别的版本号。这些信息可以在xdis包的magics.py文件中找到。具体方法如下:
输入命令行pip install xdis查看其安装位置。
转到该目录,打开xdis文件夹中的magics.py文件。
确定要识别的版本号。
它是前面添加的16个字节的前两个字节,在本例中为0D42,需要转换为十进制,即3394。
检查magics.py中是否有这个版本号
一开始在这里没有找到这个版本号。
我的解决方案
我在Google上搜索int2magic(3394),找到了这个Github项目。
下载并按照说明安装。
当我执行pip install -e时,系统提示xdis和un prooyed 6的版本不匹配,于是我卸载了un prooyed 6,重新安装了一次。
当前版本:xdis 5.0.5未编译6 3.7.4
检查此版本xdis的magics.py文件:
可以看到已经有3394个了。
反编译:
成功!
注意:pyc文件必须有后缀pyc,否则将报告错误。
第二,PYZ文件的加密
有时候在step 1 exepyc的过程中,PYZ中的文件无法正常提取(archive_viewer.py),或者提取后会显示加密(pyinstxtractor.py)。
这个问题可以通过使用参考文献2和3中的方法来解决:
PYZ文件的加密密钥保存在pyimod00_crypto_key文件中,这也是一个pyc文件,可以通过上面介绍的方法进行反编译,然后就可以得到密钥了:
之后有三个解密脚本可供选择,都在参考文章3中。根据pyinstaller的不同版本选择不同的脚本。使用它们时,需要替换密钥、头、要解密的文件名和目标文件名。执行后可以得到解密后的pyc文件,然后用Uncomployer6反编译。
注意:这三个脚本中,第一个脚本适用于PyInstaller4.0,由python2执行;第二个和第三个脚本适用于PyInstaller4.0,在python3中执行。
参考文章
最后一次2020年12月15日15: 01
拉里编辑
原因:添加原logo,调试反向分类。
上传的附件:
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。