如何防止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文件夹,重复步骤二,再次编译为exe即可。

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

可以验证一下:

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

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

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

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

为了防止Python代码被反编译,可以采取以下几种方法: 1. 使用编译器将Python源代码编译成字节码文件(.pyc或.pyo)。这样可以使代码变得不可读,但仍然可以通过逆向编译得到源码。可以使用命令`python -m compileall`来批量编译Python文件。 2. 使用加密工具对Python源代码进行加密。这样可以使代码变得更难以理解,但仍然可以通过解密得到源码。可以使用工具如pyarmor或pycryptor等来加密Python代码。 3. 使用混淆工具对Python源代码进行混淆。混淆工具可以对代码进行重命名、删除注释、添加无用代码等操作,使代码更难以理解。可以使用工具如pyminifier或pyobfuscate等来进行混淆。 4. 将关键代码部分使用Cython等工具编译成pyd文件。pyd文件是Python的库文件,相对于py文件更难以反编译。可以使用Cython将Python代码转换为C代码,再编译成pyd文件。 需要注意的是,以上方法都只是增加了反编译的难度,并不能完全防止代码被反编译。对于特别敏感的代码,建议采取其他更加安全的措施,如使用加密算法对关键数据进行加密、将关键代码部署在安全的服务器上等。 #### 引用[.reference_title] - *1* [Python 防止反编译](https://blog.csdn.net/yiyihuazi/article/details/122563576)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Python打包如何保护源码,防止反编译。](https://blog.csdn.net/Jason_WangYing/article/details/122401890)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hakesashou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值