这篇文章给大家分享的是有关防止python反编译的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。
如何防止python反编译?下面给大家具体介绍:
python学习网,大量的免费python视频教程,欢迎在线学习!
引用>此处用到的工具:
exe反编译工具:pyinstxtractor。py:点击此处去下载
pyc反编译工具:简单的Python解码器或者在线反编译pyc。
将pyinstxtractor。py放到exe文件相同目录,执行以下cmd命令:
python pyinstxtractor.py main.exe如果成功执行,将在同目录下生成新的反编译文件夹——主要。exe_extracted,如下图:
同时,我们可以在下图圈起来的路径下,找到当时我们exe引入的mylib模块,其为佩克格式。
佩克格式的文件,反编译起来就非常简单了。用前文提供的工具或者网上找个在线的分分钟反编译出来,我们看下反编译的结果:
# !/usr/bin/env python #,visit http://tool.lu/pyc/ for  more 信息 def 测试(num): ,,,print (& # 39; num={n}, {n} ^ 3={n2} & # 39; .format (n=num, n2=num * *, 3)) , if __name__ ==, & # 39; __main__ # 39;: ,,,while 没有: ,,,,,,,试一试: ,,,,,,,,,,,num =,输入( ,,,,,,,,,,,,,,,& # 39;\ xe6 \ x8f \ x90 \ xe7 \ xa4 \ xba \ xef \ xbc \ x9a \ xe8 \ xbe \ x93 \ xe5 \ x85 \ xa5" q" \ xe9 \ x80 \ x80 \ xe5 \ x87 ,,,,,,,,,,,,,,,\ xba \ xe7 \ xa8 \ x8b \ xe5 \ xba \ x8f \ xe3 \ x80 \ x82 \ n \ xe8 \ xaf \ xb7 \ xe8 \ xbe \ x93 \ xe5 \ x85 \ xa5 \ xe4 ,,,,,,,,,,,,,,,\ xb8 \ x80 \ xe4 \ xb8 \ xaa \ xe6 \ x95 \ xb0 \ xe5 \ xad \ x97 \ xef \ xbc \ x9a& # 39;) ,,,,,,,,,,,if num.lower(),==, & # 39;提问# 39;: ,,,,,,,,,,,,,,,休息 ,,,,,,,,,,,num =,浮子(num) ,,,,,,,,,,,印刷(num) ,,,,,,,除了: ,,,,,,,,,,,没有 ,,,,,,,,,,,没有 ,,,,,,,,,,,没有 ,,,,,,,,,,,print ( ,,,,,,,,,,,,,,,& # 39;\ xe8 \ xbe \ x93 \ xe5 \ x85 \ xa5 \ xe7 \ x9a \ x84 \ xe6 \ x95 \ xb0 \ xe5 \ xad \ x97 \ xe4 \ xb8 \ x8d \ xe6 \ xad ,,,,,,,,,,,,,,,\ xa3 \ xe7 \ xa1 \机加区\ xef \ xbc \ x81& # 39;) ,,,,,,,,,,,继续可以看的到,基本上完美的把源码反编译出来了。其中涉及到中文的地方,会因为编码问题有所改变。但是非中文部分,几乎一模一样。
<强>将脚本编译为pyd以防止反编译强>
如何解决呢,可以考虑将模块py文件编译为动态链接库,这样破解难度将大大增加,其中,在python里,pyd格式即动态链接库。使用cython即可编译,如果是蟒蛇是自带,python有的可能不带cython,安装即可:
pip install cython我们在main.py所在的文件夹新建py文件,在此处我命名为build_pyd。py,其内容如下:
#,- *安康;编码:utf-8 - * - 得到distutils.core import 设置 得到Cython.Build import  cythonize , 设置( 时间=name 才能;& # 39;any 单词..... & # 39; 时间=ext_modules 才能;cythonize ((“mylib.py",)), )然后执行以下cmd命令:
python build_pyd.py build_ext ——原地运行过程及生成结果如下图,其中红框的pyd文件即编译好了,因为我是64位的系统和python,所以会生成amd64后缀,我们把这个删掉重命名为mylib.pyd即可。
注:当同时存在mylib.pyd和mylib.py时,引入优先级是pyd> py,所以不用移除py文件,默认引入时就是pyd。
此时,我们删除构建、磁盘文件夹,重复步骤二,再次编译为exe即可。
注意:编译需要相关的VC环境,因为python3.5是基于VS14版本的,所以我这里安装的也是。不安装是无法编译的。
可以验证一下:
再次反编译main.exe后,原来的路径E: \ t \ dist \ main.exe_extracted \ out00-PYZ.pyz_extracted之下,已经找不到mylib。佩克了。
因为他已经不是可以直接反编译出来的文件了。
那么他在哪呢,他是作为pyd存在于上层目录中了。如下图:
防止python反编译的方法