转自:http://www.lizenghai.com/archives/898.html 作者网站做的将解源不错! 作者的文件为环境: win7+python3.5(anaconda3) 理论上,win7及以上的打包系统和python任意版本均可。 目录 [ 隐藏 ] 一、后何基础脚本 二、反编防止反编使用PyInstaller打包为exe 三、译破译反编译Pyinstaller打包的码及exe 四、将脚本编译为pyd以防止反编译 一、将解源基础脚本 首先我们构建一个简单的文件为脚本,比如输出一串数字、打包文本之类,后何这里我们输出一串文字的反编防止反编同时计算一下3次方好了。 把这段脚本保存为mylib.py,将解源运行一下这个脚本: 可以看到,脚本正常运行了。 为了演示,我们把下面的脚本新建到main.py脚本文件中,并且从mylib中引入测试函数。 二、使用PyInstaller打包为exe 使用如下命令,将其打包为单一exe(去掉-F则不是云服务器单一exe) 打包过程如下: 最终在目录下生成build、disk文件夹。其中exe文件在disk中。运行正常。如下图: 三、反编译Pyinstaller打包的exe 这样的exe已经可以被迁移到别的电脑上使用了,如果是为了方便其他电脑使用,到这一步就已经结束了。但有时候,我们可能是把这个功能给很多人用,但如果不想开源或者被别人破解,到这一步是还不够的。 因为到这一步的exe是可以被别人反编译出源码的。 此处用到的工具: exe反编译工具:pyinstxtractor.py: 点击此处去下载 pyc反编译工具: Easy Python Decompiler 或者在线反编译pyc。 将pyinstxtractor.py放到exe文件相同目录,执行以下cmd命令: 如果成功执行,将在同目录下生成新的反编译文件夹——main.exe_extracted,如下图: 同时,我们可以在下图圈起来的路径下,找到当时我们exe引入的源码库mylib模块,其为pyc格式。 pyc格式的文件,反编译起来就非常简单了。用前文提供的工具或者网上找个在线的分分钟反编译出来,我们看下反编译的结果: 可以看到,基本上完美的把源码反编译出来了。其中涉及到中文的地方,会因为编码问题有所改变。但是非中文部分,几乎一模一样。 就问你怕不怕!!! 四、将脚本编译为pyd以防止反编译 好怕怕 ,哈哈。 如何解决呢,可以考虑将模块py文件编译为动态链接库,这样破解难度将大大增加。其中,在python里,pyd格式即动态链接库。使用cython即可编译,如果是anaconda是云南idc服务商自带,python有的可能不带cython,安装即可: 我们在main.py所在的文件夹新建py文件,在此处我命名为build_pyd.py,其内容如下: 然后执行以下cmd命令: 运行过程及生成结果如下图,其中红框的pyd文件即编译好了。因为我是64位的系统和python,所以会生成amd64后缀,我们把这个删掉重命名为mylib.pyd即可。 注:当同时存在mylib.pyd和mylib.py时,引入优先级是pyd>py,所以不用移除py文件,默认引入时就是pyd。 此时,我们删除build、disk文件夹,重复步骤二,再次编译为exe即可。 注意:编译需要相关的VC环境,因为python3.5是基于 VS14版本的,所以我这里安装的也是。不安装是无法编译的。 可以验证一下: 再次反编译main.exe后,原来的路径E:\t\dist\main.exe_extracted\out00-PYZ.pyz_extracted之下,已经找不到mylib.pyc了。 因为他已经不是可以直接反编译出来的文件了。 那么他在哪呢,他是作为pyd存在于上层目录中了。如下图: pyd的反编译难度是相当高的,至此,就大功告成了!