反编译python编写的exe文件的详细方法

反编译python编写的exe文件的详细方法,第1张

接下来具体说一下步骤:

这个文件在pyinstaller库里,还没有安装的需要安装一下(已经安装的跳过安装)

安装完成后在python安装路径下的\Lib\site-packages文件夹搜索archive_viewer.py文件

找到文件后可以复制到你想要放置的位置(不复制也行)

这一步会把编译出的文件都罗列出来,像这样

但是我们只需要找到我们exe对应的名字的文件就好了,确认存在之后滑到最下面,会发现有个?号用于输入接下来的命令,在这边我们输入

会显示 to filename? 让你输入需要输出的pyc文件名称,这边输入 your_app.pyc 回车就好了

接下来又会显示?号,接着输入 x struct 回车,输入struct文件名称 struct 回车

由于用PyInstaller打包后,pyc文件的前8个字节会被抹掉,所以最后要自己添加回去。前四个字节为python编译的版本,后四个字节为时间戳。

这边使用Hex Editor Neo软件同时打开.pyc文件和struct文件,复制struct文件前面8个字节插入到.pyc文件的前面:

这样我们就得到了完整的pyc文件

安装uncompyle库

反编译

python的编译后文件pyc,可以将pyc文件反编译为py文件。

相应的工具: uncompyle

github地址: https://github.com/rocky/python-uncompyle6/

安装: pip install uncompyle

安装好后,注意执行的命令为 uncompyle6 ,而不是 uncompyle 。

查看帮助命令: uncompyle6 --help 、 uncompyle6 -h

反编译单个文件 : uncompyle6 foo.pyc >foo.py

反编译多个文件: uncompyle6 -o . *.pyc

例子:

PyInstaller官网: https://www.pyinstaller.org/

假设有一个demo.py文件,在同目录下启动命令行或从命令行进入当前文件夹,使用如下命令打包

打包后同目录下会产生两个文件夹build和dist(distribution),dist文件夹内就是目标程序。

解包使用pyinstxtractor工具

Github地址: https://github.com/extremecoders-re/pyinstxtractor

假设在第1步中,使用-F参数将demo.py打包为独立可执行文件demo.exe,进入dist文件夹,将pyinstxtractor.py放在该目录下,在该目录下启动命令行或从命令行进入该文件夹,使用如下命令解包

解包得到的内容将放入同目录下的demo.exe_extracted文件夹

找到目标.pyc文件,比如demo.pyc

反编译.pyc文件使用uncompyle6工具

Github地址: https://github.com/rocky/python-uncompyle6

可以直接通过pip安装uncompyle6

由于pyinstaller在打包可执行文件时会将.pyc文件头部的16字节magic head去掉,因此需要对需要反编译的.pyc文件进行预处理,将文件头部的16字节magic head补充完整。这里使用一个开源的16进制编辑器ImHex。

Github地址: https://github.com/WerWolv/ImHex

进入demo.exe_extracted文件夹,用16进制编辑器打开struct.pyc文件复制头部的16字节magic head,再用16进制编辑器打开demo.pyc文件,将头部的16字节改为magic head,即将图2中的部分更改为图1中的值即可。

使用前一个命令,反编译后的源码内容会显示在命令行窗口内;使用后一个命令,源码会打印到指定文件中,如demo.py。

到此为止可以

Invalid pyc/pyo file - Magic value mismatch!

补充magic head后即可正常反编译。

如果不是项目成员给所谓的程序而不肯给源码,而我又绕不过这个程序的问题,我才不想折腾这些有的没的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12145109.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存