知行编程网知行编程网  2022-09-26 19:30 知行编程网 隐藏边栏  198 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于如何防止python反编译的相关知识,包括python需要编译执行吗,以及反编译python打包的软件这些编程知识,希望对大家有参考作用。

如何防止python反编译

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

python学习网,大量的免费
,欢迎在线学习!

此处用到的工具:

exe反编译工具:pyinstxtractor.py:

pyc反编译工具:Easy Python Decompiler或者在线反编译pyc。

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

python pyinstxtractor.py main.exe

如果执行成功,会在同目录下生成一个新的反编译文件夹——main.exe_extracted,如下图:

如何防止python反编译

同时我们可以在下图圈出的路径下找到当时我们的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(
                '\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。

如何防止python反编译

此时,我们删除build和disk文件夹,重复步骤2,再次编译成exe。

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

可以验证一下:

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

因为他不再是可以直接反编译的文件了。

那么他在哪里呢,他作为pyd存在于上层目录中。如下所示:

如何防止python反编译

pyd的反编译难度是相当高的,至此,就大功告成了!

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享