python如何编译为exe,python 写exe

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: