Python 防止反编译

写在前面:写这篇文章,第一个是因为公司开发的exe的确也有这个问题,其次呢,也是因为本人对Python也比较有兴趣,在此推写一个解决办法,也希望可以帮助到一些朋友,或者说让一些朋友学习到些什么。

一、问题说明

对于Pyinstaller进行打包的程序,有怎么一个东西可以进行反编译 ---- pyinstxtractor.py

下载地址:https://github.com/extremecoders-re/pyinstxtractor

操作如下:

  1. 将下载好的 pyinstxtractor.py 文件与打包好的 exe 放到同目录下

    注:此处的 exe 为编写的测试 exe,代码如下:

import threading
import time
from tkinter import *


class Main:

    def __init__(self):
        self.root = Tk()
        self.time = StringVar()

        self.gui()
        self.root.mainloop()

    def gui(self):
        label = Label(self.root, textvariable=self.time, width=30, height=3)
        label.pack()

        timer = threading.Timer(1, self.thread)
        timer.start()

    def thread(self):
        current = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
        self.time.set(current)

        timer = threading.Timer(1, self.thread)
        timer.start()


if __name__ == '__main__':
    Main()

打包命令如下:

pyinstaller main.py -w -F

打包成功后,运行:
在这里插入图片描述

  1. 使用以下命令,将上述的 exe 反编译(exe 与 pyinstxtractor.py 同目录下运行 cmd)
python pyinstxtractor.py main.exe

在这里插入图片描述
在生成的目录中,可以找到如下文件 ---- main.pyc
在这里插入图片描述
此时,随意找一个 pyc 反编译网站,即可看到源码(中文可能有少许编码问题,但绝大部分代码均可还原)
可使用此网站:https://tool.lu/pyc
在这里插入图片描述
可以看到,此处源码还原度极高,可以说对于项目、个人和公司而言都是一件细思极恐的问题!!!

二、解决办法

在此处,本人使用的方法是:利用 cpython 包,先将 py 文件编译成 pyd 文件,再重新打包。
注:
1. cpython 为 python 的一个
2. pyd 文件,相当于 c 文件编译生成的 dll 文件,只能进行反汇编,而非反编译,安全性极大提高
3. 在相同目录下同时存在相同名字的 py 文件和 pyd 文件,python 会自动引用 pyd 文件,而非 py 文件

使用 cpython 前,有一个前置条件:电脑需装有 visual c++ 桌面开发环境(默认安装即可)
推荐下载地址:Visual Studio 和 C++ Community(社区版)
在这里插入图片描述
在这里插入图片描述
安装完成后,在 pycharm 中下载 Cython 包(此处我使用的是清华镜像)

pip install  -i https://pypi.tuna.tsinghua.edu.cn/simple Cython

在这里插入图片描述

下载完毕后,在刚刚的源代码 main.py 的同级目录下创建 setup.py

from distutils.core import setup
from Cython.Build import cythonize

setup(ext_modules=cythonize("main.py"))

同时,将 main.py 中的主运行代码调整到新的文件 test.py

在这里插入图片描述
在这里插入图片描述
接着在 pycharm 命令行中运行命令:python setup.py build_ext --inplace
同时将生成的 pyd 文件名字改为 main.pyd
在这里插入图片描述
此时,删除 dist、build 文件夹和其它多余的文件,重新打包
在这里插入图片描述
对于 test.exe 进行反编译
在这里插入图片描述
进入反编译的文件中,即可找到 main.pyd
在这里插入图片描述
至此,对于主要源码的反编译保护基本实现完成。

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
为了防止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 ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Hodoio

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

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

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

打赏作者

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

抵扣说明:

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

余额充值