百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

python反编译和防破解(python 反编译 防止)

off999 2024-10-19 07:24 15 浏览 0 评论

python是一种解释型语言,但是与javascript这种纯脚本语言不同,python提供了一种编译成字节码运行的方法,编译之后就得到pyc文件,这点和java编译成class文件再用jvm解释运行很类似,但是与java不同的是,python编译字节码不是一个强制的操作,事实上,编译是一个自动的过程,一般不会在意它的存在。

编译成字节码可以节省加载模块的时间,提高效率。除了效率之外,字节码的形式也增加了反向工程的难度,可以保护源代码。这个只是一定程度上的保护,反编译还是可以的。

py pyc pyo pyd分别是什么文件

  • py: python脚本源文件。
  • pyc: python源文件经过编译得到的字节码, 二进制文件。
  • pyo: python脚本文件开启优化编译(-O)得到的字节码,二进制文件(python -O test.py)。
  • pyd: python的动态链接库,Windows DLL文件。

编译py文件生成pyc

我们编写两个py脚本

mylib.py:包含一个函数,打印一行文字.

def keyFun():
    print("keyFun is running")

main.py:程序运行入口,调用mylib种的keyFun函数

from mylib import keyFun

if __name__ == "__main__":
    keyFun()

编译所有文件,在脚本目录执行以下命令:

python -m compileall .

可以看到生成了相对应的两个pyc文件

此时执行main.cpython-38.pyc会提示找不到mylib模块,需要将文件名中的.cpython-38删掉.

反编译pyc

反编译pyc的工具很多,我用的是python3.8,这里介绍几种可以反编译python3.8的工具.

  • 在线反编译网站: https://tool.lu/pyc/
  • python-decompile3工具: https://github.com/rocky/python-decompile3
  • Easy Python Decompiler: https://sourceforge.net/projects/easypythondecompiler/

本文作为演示,使用在线网站反编译mylib.py,可以看到下图反编译代码与实际代码一模一样.

反编译pyinstaller打包的exe文件

我们使用pyinstaller将main.py打包成exe文件

pyinstaller -F main.py


反编译pyinstaller打包的exe需要用到pyinstxtractor(https://github.com/extremecoders-re/pyinstxtractor).

将main.exe复制到pyinstxtractor文件夹,执行python pyinstxtractor.py main.exe

python pyinstxtractor.py main.exe


可以看到pyinstxtractor已经提示入口文件为main.pyc.我们反编译main.pyc就可以看到pyc引入可哪些模块,这个例子可以从反编译代码中看到引入了mylib模块,再接着反编译mylib.pyc就可以了.

Cython编译pyd文件

从上面的反编译pyc文件结果可以看出,pyc很容易就被反编译,无法保护我们的代码.这里我们介绍使用Cython将python文件编译成pyd文件的方法.

首先安装Cython(Anaconda自带Cython的话不需要安装)

pip install Cython

在mylib.py所在目录新建build_pyd.py文件

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

setup(
    ext_modules = cythonize([
        "mylib.py"
    ]),
)

#1.执行 python build_pyd.py build_ext --inplace
#2.再把.cp38-win_amd64删掉 python renamepyd_file.py

执行python build_pyd.py build_ext --inplace.将会为mylib.py生成对应的.c文件和.pyd文件


与上文提到的pyc文件无法直接执行一样,pyd文件也需要删除文件名中的.cp38-win_amd64.这样main.py才能找到对应的mylib.pyd.

import os

lists = os.listdir("./")
for item in lists:
    try:
        if ".cp38-win_amd64.pyd" in item:
            # 重命名文件
            fileName = item.replace("cp38-win_amd64.", "")
            files = os.rename(item, fileName)
    except Exception as e:
        print(e)

执行main.py,此时main.py引用的是编译后的mylib.pyd.如果修改了mylib.py中的代码,需要删除pyd文件后调试,不然不会看到改动后的效果.

编译成pyd后再用pyinstaller打包

使用上文中的方法将python文件编译为pyd文件后,再用pynstaller打包,这时候我们反编译就只能看到pyd文件了,要想破解pyd文件就需要使用汇编级别的破解技术,如果你的代码需要别人这样去破解的话,那恭喜你了,哈哈.

需要注意的是,编译为pyd再用pyinstaller打包,可能会出现模块无法被打包进去的情况,这时候需要编辑spec文件,将mylib模块添加到hiddenimports中.

a = Analysis(['main.py'],
             pathex=['E:\\playground\\decompiletest'],
             binaries=[],
             datas=[],
             //这里引入mylib模块
             hiddenimports=['mylib'],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)

更多pyinstaller的高级技巧可以看我之前的一篇文章pyinstaller打包python程序高级技巧

相关推荐

Python自动化脚本应用与示例(python自动化脚本教程)

Python是编写自动化脚本的绝佳选择,因其语法简洁、库丰富且跨平台兼容性强。以下是Python自动化脚本的常见应用场景及示例,帮助你快速上手:一、常见自动化场景文件与目录操作O批量重命名文件...

如何使用Python实现一个APP(如何用python做一个程序)

要使用Python实现一个APP,你可以选择使用一些流行的移动应用开发框架,如Kivy、PyQt或Tkinter。这里以Kivy为例,它是一个跨平台的Python框架,可以用于创建漂亮的图形用户界面(...

免费定时运行Python程序并存储输出文档的服务推荐

免费定时运行Python程序并存储输出文档的服务推荐以下是几种可以免费定时运行Python程序并存储输出结果的云服务方案:1.PythonAnywhere特点:提供免费的Python托管环境支持定时...

【Python程序开发系列】如何让python脚本一直在后台保持运行

这是我的第385篇原创文章。一、引言让Python脚本在后台持续运行,有几种常见的方式,具体方式可以根据你的系统环境和需求选择。二、Linux或macOS系统2.1使用nohup命令no...

运行和执行Python程序(运行python的程序)

一、Python是一种解释型的脚本编程语言,这样的编程语言一般支持两种代码运行方式:交互式编程在命令行窗口中直接输入代码,按下回车键就可以运行代码,并立即看到输出结果;执行完一行代码,你还可以继续...

Python 初学者指南:计算程序的运行时长

在编写Python程序时,了解程序的运行时长是一项很有用的技能。这不仅能帮助你评估代码的效率,还能在优化程序性能时提供关键的数据支持。对于初学者来说,计算程序运行时长其实并不复杂,接下来就让我们看...

pyest+appium实现APP自动化测试,思路全总结在这里

每天进步一点点,关注我们哦,每天分享测试技术文章本文章出自【码同学软件测试】码同学公众号:自动化软件测试码同学抖音号:小码哥聊软件测试01appium环境搭建安装nodejshttp://nodej...

血脉觉醒后,编程小白我是如何通过Deepseek和Trae轻松开发软件的

以下就是作为一个编程小白的我,是如何一步步开发软件的保姆级教程,请点赞收藏:第一步:打开#deepseek#(首先关闭深度思考和联网搜索)输入或复制你要让它做一个什么样软件的要求和提示词(你可以先用...

我用Deepseek+Trae写的python小软件,小白也能轻松用上模型啦!

利用AI大模型deepseek,搭配TraeCN,用半个小时做了一个本地Ollama安装部署和一键卸载的小工具,哈哈哈!感觉还不错#deepseek#一直想做一个本地Ollama安装部署和一键卸载...

在安卓设备上运行Python的方法(安卓能运行python吗)

技术背景在安卓设备上运行Python可以为开发者提供更多的开发选择和灵活性,能够利用Python丰富的库和简洁的语法来开发各种应用,如游戏、脚本工具等。然而,由于安卓系统原生不支持Python,需要借...

零基础小白,DeepSeek全自动编程,超详细提示词,一键生成软件!

我前面发表了文章,详细说了编程零基础小白,如何利用DeepSeek进行编程的全过程,感兴趣的可以去看看:DeepSeek全自动编程很多人不会写提示词,不知道怎么开始对话。话不多说,请先看下图中的对话,...

小白用DeepSeek+Python编写软件(用python制作软件)

周末无事,用DeepSeek生成全部代码,写了一个mp3音乐播放器,几分钟搞定,DeepSeek确实太强大了。我的提示语是这么写的:“请用Python语言写一个音乐播放器,支持常见音乐格式,我是Pyt...

零基础使用DeepSeek开发Windows应用程序,超简单超实用!

你敢相信,我居然用DeepSeek开发了一个能用的Windows软件!整个过程就像和学霸同桌组队做作业,我负责提需求,DeepSeek负责写代码改bug,全程碰到任何问题直接丢给DeepSeek即可。...

第二篇:如何安装Python并运行你的第一个程序

欢迎回到我的Python入门教程系列!在上一篇中,我们讨论了为什么Python是一门值得学习的编程语言。今天,我们将迈出第一步:安装Python并运行你的第一个程序。无论你是Windows、macOS...

Python 运行,带你找入口,快速读懂程序

有C或Java编程开发经验的软件开发者,初次接触python程序,当你想快速读懂python项目工程时,是否觉得python程序有些太过随意,让你看有些无所适从,进而有些茫然。这是...

取消回复欢迎 发表评论: