开发背景
又一次是因为需求激励而开始的集中精力学习-开发模式。
开发,并且迭代了数个版本的管理系统面临扩大规模的应用需求,因此软件保护、版本管控就必不可少,而首先想到的就是做一个注册机,首先将软件保护起来,进行一台计算机一个授权码的操作,这样至少就不会无节制地扩散。
这里插一句题外话:软件/产品的产权对于个人或者公司来说都是很重要的,一旦开发的软件进入产品化流程,那么产权意识就应当引起重视,并不是一个Demo随便扩散的意识了。当然,这和开源精神是不矛盾的,我后面也会对软件的架构、各模块进行分析,各接口进行介绍,因为软件开发的技术点是共享的,否则我也不可能在几天“折腾”出这样的授权工具。
软件授权注册工具介绍
- 提取计算机唯一识别信息;
- 整合提取信息生成【请求码/机械码】;
- 加密策略支持;l 将【请求码】对应到相应版本的加密策略下,生成【注册码】;
- 一个注册码仅对一台计算机授权有效。
说起软授权、注册这样的字眼,肯定大家第一反应想到的核心就是:加密。是的,加密是一个很关键的节点,对于软件的可复杂或可简单的级别区分,就在加密的难易程度上了,什么样的算法加密?md5、base64、RSA非对称加密……甚至是异或、加一减一,都是你所选择的安全加密策略。
当然,再厉害的算法,理论上是可以破解的,但是引入破解成本变量,有些算法在现实上就可以认为不可破解。不过我更偏向于从另一个角度考虑,安全——并不就纯粹依靠技术的力量可以实现的,而是依赖规则的制订,界限的分明,也就是这一篇分享要重点介绍的注册软件的流程。正是因为有流程上的划规矩,定界限,安全加密策略才能作为整个流程上的节点,去夯实架构,而不是唯一的防火墙,单薄地支撑安全。
这也是我后期会秉承开源精神,分享API和一些关键代码的原因,因为安全重点不在于单一的某个节点,而在于整个框架的组合而带来的安全性。
- 以下是一个最简化的注册软件使用场景描述:
在使用原理上就是这么简单,而国内外接触的一些专业软件的授权,像微软Office,SkylineGlobal等专业且庞大的授权,其应用场景的原理也如此,而专业且高级的原因是因为各个节点都有专业的研究和投入,不只是加密算法,也包括授权策略的丰富(授权时间、授权支付等)、版本的管控、硬件信息提取、跨平台支持等等因素。
所以,授权注册工具,是一个可大可小的工程,我现在做的也并非要一步到位的丰富,个人知识有限,仅能最大限度地在软件设计上将各个模块提炼出来,支持扩展性。
从界面上介绍流程
-
用户打开软件(未授权):
-
用户发送【授权版本号】+【请求码】到管理员处(任意渠道);
-
管理员使用授权工具进行授权:
授权工具可使用同级目录下的【RegisterCfg.json】进行简单定制化配置:
图标路径、标题、当前生成策略版本号。
{
"LOGO_ICON" : "Logo_ico.ico",
"LOGO_TITLE" : "CCMS-RegisterManager",
"VERSION_NUM" : "6CD6FEFA-A532-4B6E-9E9F-9F8306D58EC5"
}
- 管理员对应加密版本策略生成对应【注册码】:
- 用户收到【注册码】后输入,点击确定,若匹配,则正常进入正版授权软件:
授权成功情况,OK后正常进入【被保护的软件】。(注:若无授权时间策略保护,则无需每次注册)
错误情况,(无法启动被保护软件,直到输入正确验证码)
明确各个节点的流程介绍
RegisterCore节点:
细分节点:
- 加解密库
- 安全加密策略机制
- 设备信息提取
WarrantDialog节点:
细分节点
- 验证逻辑
- 交互窗口
- 本地验证存取与解析
用笔和纸画出来的方法,最大激发了头脑风暴,随后再用专业工具整理出来就是工作量的问题了。
(若字写得太丑,画得太不清楚请见谅,联系我,及时改进)
下期预告
结合最后两幅图的“头脑风暴”画法,将节点梳理清楚了,下一节则重点结合图,介绍API、代码。同时分享在开发中遇到的一些技术难点和坑。
联系我
欢迎提出问题、交流技术,本人经验尚浅,尽最大能力去学习、理解、梳理,而后分享,若有纰漏请联系我,共同学习。
若有相关的需求开发或需要提供API,欢迎联系。