防止python反编译的方法

  介绍

这篇文章给大家分享的是有关防止python反编译的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。

如何防止python反编译?下面给大家具体介绍:

python学习网,大量的免费python视频教程,欢迎在线学习!

此处用到的工具:

exe反编译工具:pyinstxtractor。py:点击此处去下载

pyc反编译工具:简单的Python解码器或者在线反编译pyc。

将pyinstxtractor。py放到exe文件相同目录,执行以下cmd命令:

python  pyinstxtractor.py  main.exe

如果成功执行,将在同目录下生成新的反编译文件夹——主要。exe_extracted,如下图:

防止python反编译的方法

同时,我们可以在下图圈起来的路径下,找到当时我们exe引入的mylib模块,其为佩克格式。

防止python反编译的方法

佩克格式的文件,反编译起来就非常简单了。用前文提供的工具或者网上找个在线的分分钟反编译出来,我们看下反编译的结果:

# !/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。

防止python反编译的方法

此时,我们删除构建、磁盘文件夹,重复步骤二,再次编译为exe即可。

注意:编译需要相关的VC环境,因为python3.5是基于VS14版本的,所以我这里安装的也是。不安装是无法编译的。

可以验证一下:

再次反编译main.exe后,原来的路径E: \ t \ dist \ main.exe_extracted \ out00-PYZ.pyz_extracted之下,已经找不到mylib。佩克了。

因为他已经不是可以直接反编译出来的文件了。

那么他在哪呢,他是作为pyd存在于上层目录中了。如下图:

防止python反编译的方法