如何防止python反编译
【摘要】如何防止python反编译?下面给大家具体介绍:python学习网,大量的免费python视频教程,欢迎在线学习!此处用到的工具:exe反编译工具:pyi
如何防止python反编译?下面给大家具体介绍:
python学习网,大量的免费python视频教程,欢迎在线学习!
此处用到的工具:
exe反编译工具:pyinstxtractor.py:点击此处去下载
pyc反编译工具:Easy Python Decompiler或者在线反编译pyc。
将pyinstxtractor.py放到exe文件相同目录,执行以下cmd命令:
python pyinstxtractor.py main.exe
如果成功执行,将在同目录下生成新的反编译文件夹——main.exe_extracted,如下图:
同时,我们可以在下图圈起来的路径下,找到当时我们exe引入的mylib模块,其为pyc格式。
相关推荐:《Python基础教程》
pyc格式的文件,反编译起来就非常简单了。用前文提供的工具或者网上找个在线的分分钟反编译出来,我们看下反编译的结果:
#!/usr/bin/env python
# visit http://tool.lu/pyc/ for more information
def test(num):
print('num={n}, {n}^3={n2}'.format(n=num, n2=num ** 3))
if __name__ == '__main__':
while None:
try:
num = input(
'xe6x8fx90xe7xa4xbaxefxbcx9axe8xbex93xe5x85xa5"q"xe9x80x80xe5x87
xbaxe7xa8x8bxe5xbax8fxe3x80x82nxe8xafxb7xe8xbex93xe5x85xa5xe4
xb8x80xe4xb8xaaxe6x95xb0xe5xadx97xefxbcx9a')
if num.lower() == 'q':
break
num = float(num)
print(num)
except:
None
None
None
print(
'xe8xbex93xe5x85xa5xe7x9ax84xe6x95xb0xe5xadx97xe4xb8x8dxe6xad
xa3xe7xa1xaexefxbcx81')
continue
可以看到,基本上完美的把源码反编译出来了。其中涉及到中文的地方,会因为编码问题有所改变。但是非中文部分,几乎一模一样。
将脚本编译为pyd以防止反编译
如何解决呢,可以考虑将模块py文件编译为动态链接库,这样破解难度将大大增加。其中,在python里,pyd格式即动态链接库。使用cython即可编译,如果是anaconda是自带,python有的可能不带cython,安装即可:
pip install Cython
我们在main.py所在的文件夹新建py文件,在此处我命名为build_pyd.py,其内容如下:
# -*- coding: utf-8 -*-
from distutils.core import setup
from Cython.Build import cythonize
setup(
name = 'any words.....',
ext_modules = cythonize(["mylib.py",]),
)
然后执行以下cmd命令:
python build_pyd.py build_ext --inplace
运行过程及生成结果如下图,其中红框的pyd文件即编译好了。因为我是64位的系统和python,所以会生成amd64后缀,我们把这个删掉重命名为mylib.pyd即可。
注:当同时存在mylib.pyd和mylib.py时,引入优先级是pyd>py,所以不用移除py文件,默认引入时就是pyd。
此时,我们删除build、disk文件夹,重复步骤二,再次编译为exe即可。
注意:编译需要相关的VC环境,因为python3.5是基于 VS14版本的,所以我这里安装的也是。不安装是无法编译的。
可以验证一下:
再次反编译main.exe后,原来的路径E:tdistmain.exe_extractedout00-PYZ.pyz_extracted之下,已经找不到mylib.pyc了。
因为他已经不是可以直接反编译出来的文件了。
那么他在哪呢,他是作为pyd存在于上层目录中了。如下图:
pyd的反编译难度是相当高的,至此,就大功告成了!
就业培训申请领取
环球青藤
官方QQ群扫描上方二维码或点击一键加群,免费领取大礼包,加群暗号:青藤。 一键加群
刷题看课 APP下载
免费直播 一键购课
代报名等人工服务