跳转至

使用文档

Smoky

国家商用密码算法(国密SM),Python桌面应用,一机一码,授权许可模块


文档https://smoky.jiangbaihe.top

Pypihttps://pypi.org/project/smoky


购买方式

合理的物质激励能维持我们将这个项目维护下去,您可以通过下面的方式购买Smoky:

唯一销售渠道: 白河工作室

Tip

购买成功后,您可以享受到:

  • 有效期内免费更新
  • 加入内部交流群
  • 优先获得技术支持
  • 优先实现您的改进建议

简介

Smoky的名字灵感来源于国密算法(sm)、一机一码(one key)、以及英文单词Okay;

是一款用于Python程序的扩展模块,可为您的Python应用增加授权许可功能,保护您的应用及权益;

采用国家商用密码算法(国密SM),相较市面常见算法,拥有更高的性能和安全性。

特性

  • 简单易用:集成方式极简,自动生成代码,方便快捷地为您的Python应用集成授权许可功能。
  • 支持国产:使用国家商用密码算法(国密SM),包含对称和非对称以及摘要算法。
  • 安全高效:大量评测报道,国密算法比市面常用的AES、RSA、SHA等算法性能更好、安全性更高。
  • 界面美观:使用QT开发的用户界面,漂亮的样式和动画,提升用户观感。
  • 灵活授权:可选绑定机器码,支持一机一码和多机一码、精确到秒的许可证有效期、自定义版本名称和用户名称。
  • 反作弊:内置反作弊机制,包括签名校验、时间校验、文件校验等。
  • 操作系统:支持Windows7及以上的64位系统。
  • Python版本:支持Python3.8 - 3.11。

Preview

目前为本地版,网络版开发中,敬请期待……

流程

graph LR
  程序入口 --> 校验许可证;
  校验许可证 --> |成功| 正常运行;
  校验许可证 --> |失败| 认证弹窗;
  认证弹窗 --> |取消| 退出程序;
  认证弹窗 --> 复制机器码;
  复制机器码 --> |发送给管理员| 生成许可证;
  生成许可证 --> |发送给用户| 导入许可证;
  导入许可证 --> 校验许可证;

集成Smoky到您的应用

安装扩展模块

要为您的应用集成Smoky,先在虚拟环境中安装:

pip install smoky

生成入口代码

在许可证管理器中生成代码,将生成的代码写到项目入口的py文件中,并做适当修改:

生成代码

体验模块功能

运行您的项目,即可看到授权认证窗口:

授权认证窗口

在许可证管理器中,生成对应的许可证:

生成许可证

导入或粘贴许可证,即可完成授权认证:

授权认证成功

发布您的应用并保护源码

通过上面的步骤,相信您了解Smoky的基本用法,但在接下来的使用中,还面临一个问题:

Danger

此时您的Python源码是明文可见的,任何人都可以随意修改,甚至删掉Smoky部分的调用,让授权许可功能失效。

因此我们需要将源码保护起来,让用户不能随意篡改代码内容。

Pyinstaller打包exe

这是最简单的方案,通过将源码和Python环境集成打包成exe文件,让源码不再是明文,且用户不需要安装和配置Python环境,只需要像传统应用那样双击exe文件即可运行。

同时它也是兼容性问题最少的第三方打包方案,是的,Python官方并没有提供打包可执行文件的功能,所有的打包方案都由第三方开发,并都存在兼容性问题。

但这也是安全性最弱的打包方案,在3.10之前版本的Python,打包出来的exe,很容易通过技术手段反编译成源码,虽然从3.10开始反编译难度大了很多,但仍有反编译的可能。

一般的使用方法是这样:

# 在Python环境中安装Pyinstaller打包工具
pip install pyinstaller

# 打包exe,假设main.py是您的入口文件
pyinstaller main.py -F

Note

打包失败或运行exe出现闪退等现象,通常跟项目逻辑、资源文件、依赖兼容性等有关

这类不属于Smoky的问题,我们可以提供有偿技术支持。

Nuitka编译打包exe(推荐)

与上面的Pyinstaller很相似,但原理完全不同,

Nuitka基于Cython,将Python源码转换为C语言的源码,再由C语言源码编译为PYD(Python DLL)动态链接库,并集成Python环境。

这样打包出来的exe经过了C语言的转码编译,已经完全不可能再反编译回源码,从而极大增加破解难度。

但相比Pyinstaller,Nuitka的缺点也很明显:

  • 编译时间长
  • 兼容性问题多得多

一般的使用方法是这样:

# 在Python环境中安装Nuitka打包工具
pip install nuitka

# 打包exe,假设main.py是您的入口文件
nuitka main.py ^
--standalone ^
--enable-plugin=pyside6 --include-package-data=PySide6.translations ^
--output-dir=dist

Note

打包失败或运行exe出现闪退等现象,通常跟项目逻辑、资源文件、依赖兼容性等有关

这类不属于Smoky的问题,我们可以提供有偿技术支持。

其他方式

保护源码的方案有很多,例如混淆、打包、编译PYD、加壳等,实际情况可能只采纳其中一部分、或多个方案组合使用,不再赘述。

结语

世上没有不透风的墙,也没有不能破解的软件,即便是像微软、Adobe这样的行业巨头们的产品一样存在盗版。

加密的措施只能增大破解难度,当破解的成本远大于购买软件的成本时,加密保护的目的就算达到了。

比方说花钱请人破解要几千、几万,买正版只要几十、几百,该不会有人闲的蛋疼去搞破解吧……