pyinstaller反编译随笔记录
原因:最近用pyinstaller打包了自己的程序,然后突然看到网上大佬们的一篇博客,用pyinstaller -D main.py(这是我自己的程序入口)打包出来的文件是很容易被人反编译出来的,于是为了证明大佬说的话是对的,在网上查找了很多反编译的教程,尝试反编译自己的程序。于是便有了以下的记录
1、打包自己的程序:pyinstaller -D main.py ,没有pyinstaller的先安装,这样子打包之后会在当前目录下出现一个dist目录,里面就是我们打包后的文件和依赖库,其中有一个main.exe(名字跟main.py一致),它就是我们要反编译的对象
pip install pyinstaller
2、下载pyinstxtractor.py,地址:https://nchc.dl.sourceforge.net/project/pyinstallerextractor/dist/pyinstxtractor.py,然后将pyinstxtractor.py和main.exe放在同一级目录底下,如图
3、在该目录下打开cmd,输入:python pyinstxtractor.py main.exe,就会得到一个文件夹,里面存着程序的字节码文件.pyc(通俗的说,有字节码文件就很容易被反编译,因为它是直接由源码转换而来的),如下图,一般来说这个过程不会报错,如果报错请自行问度娘解决
4、如果此时我们尝试用网上在线反编译工具来反编译任意一个.pyc文件,你就会发现出错了,原因是因为这些.pyc文件还缺少一个magic number 的东西,它的作用是标识了python版本和编译时间,所以为了搞清楚这个magic number,我们用一个16进制文本软件(这里我用的是wxmedit,我也是参考其他大佬的)任意打开其中一个.pyc文件,如下图,我们发现它在 E3 字符之前其实已经有值了,我在网上也查了很多教程,有部分人的pyc文件在E3之前完全没有值,就完全是以E3开头的,而有一部分则是像我这样,E3之前有值,但是还是反编译不出来,后来经过查找原因,原来是这个前面这个16进制码是不对的,我们需要把它更换成正确的magic number才能完整反编译出来
5、如果你觉得查找完整的16进制码很麻烦,那你可以直接在现有的基础上直接补0即可,虽然这样不能被完全反编译,但是可以被反编译一部分代码。由此我们可以证明,该打包方式确实存在被反编译的风险
7、那好奇的同学可能就要问了,那你反编译的软件又是哪个呢,在这里我也告诉大家,其实就是一个依赖库,名字叫:uncompyle6,直接pip安装即可
pip install uncompyle6
# 使用方法也很简单,如下
uncompyle6 xxx.pyc
下图就是我反编译出来的部分代码,为啥是一部分代码呢,因为这是一个错误的magic number ,它只能反编译出一部分,如果有同学需要正确的magic number,需要自己查查其他教程。至于我为什么我不写出来呢,因为我也不会,网上很多教程都不能正确的查找出完整且正确的magic number。
8、那我们要怎么防止别人反编译我们的源码呢,那也很简单,添加密钥即可
# 123456就是我们的密钥,可随意设置密钥
pyinstaller -D --key 123456 main.py
加密之后我们再用python pyinstxtractor.py main.exe 反编译我们的程序试试。就会得到如下,里面没有.pyc文件了,至此我们可以证明,加密钥可以防止别人反编译我们的源码:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具