如何防止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格式的。
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(
'\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')
if num.lower() == 'q':
break
num = float(num)
print(num)
except:
None
None
None
print(
'\xe8\xbe\x93\xe5\x85\xa5\xe7\x9a\x84\xe6\x95\xb0\xe5\xad\x97\xe4\xb8\x8d\xe6\xad
\xa3\xe7\xa1\xae\xef\xbc\x81')
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文件夹,重复步骤2,再次编译成exe。
注意:编译需要相关的VC环境,因为python3.5是基于VS14版本的,所以我这里也安装了。不安装就无法编译。
可以验证一下:
再次反编译main.exe后,原来的路径E:\t\dist\main.exe_extracted\out00-PYZ.pyz_extracted之下,已经找不到mylib.pyc了。
因为他不再是可以直接反编译的文件了。
那么他在哪里呢,他作为pyd存在于上层目录中。如下所示:
pyd的反编译难度是相当高的,至此,就大功告成了!
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ Python中的三种模块类型介绍10/25
- ♥ 如何运行python项目11/11
- ♥ python的eval函数的作用08/16
- ♥ python ChainMap如何实现字典操作12/28
- ♥ python中正负索引的使用12/23
- ♥ 如何保存编写的python脚本08/23
内容反馈