zoukankan      html  css  js  c++  java
  • 软件授权

    激活码方式注册的实现原理述

    加密混淆授权 

    1. 软件授权方式概述

    目前,商用软件和共享软件绝大部份都是采用注册码授权的方式来保证软件本身不被盗用,以保证自身的利益。尽管很多常用的许多软件系统的某些版本已经被别人破解,但对于软件特殊行业而言,注册码授权的方式还是一种保护软件系统本身的一种有效的手段。

    通常而言,注册码授权方式有以下几种方式:

    l 安装序列号方式

    这是最为常用的方式,Microsoft提供的产品(例如:Windows系列产品、Office系列产品等等)都是采用这种方式。通过一种复杂的算法生成安装序列号,在安装过程中,安装程序对用户输入的安装序列号进行校验来验证该系统是否被合法,从而完成授权。

    l 用户名+序列号方式

    即软件系统的供应商给用户提供有效的用户名和序列号,用户在安装过程或启动过程中输入有效的用户名和序列号,系统通过算法校验通过后完成软件授权。

    l 在线注册方式

    用户安装系统后,通过网络进行注册授权。软件系统的供应商事先已经登记了用户的信息,用户在线注册时,供应商的注册系统对用户的信息进行验证。用户身份有效时,注册系统生成一个凭证信息,软件系统根据凭证信息完成授权。

    l 激活码方式

    用户安装系统后,软件系统会根据用户机器的关键信息(例如:MAC地址、CPU序列号、硬盘序列号等等)生成一个注册凭证(也可称为注册码),用户将这个注册凭证发送给软件供应商,供应商通过注册凭证生成一个激活码。用户输入激活码,软件系统完成授权。

    不论是采用哪种方式来进行授权,理论上都是可以被破解的。只要破解者发现了软件授权机制和原理则任何保护机制都将化为乌有。因此,只能够通过选择复杂的算法和机制来增加破解者的破解难度,从而在在一定的时间内保证软件不被盗用。通常在行业应用软件领域,我们选用激活码方式进行软件授权管理。

    2. 激活码方式注册的实现原理述

    RSA算法(非对称加密算法)是一个广泛用于加密和数字签名的算法,是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥可以适用用户名+序列号、在线注册、激活码等软件保护方式。


    RSA算法实现激活码注册方式的原理如下:

    1. 生成一对公钥E和私钥D(供软件注册模板和注册机使用);

    2. 用户安装软件后,软件注册模板提取用户机器指纹信息(如:MAC地址、CPU序列号、硬盘序列号等),并通过其它的编码算法(如BASE64)生成一个申请码C;

    3. 用户将申请码C发给软件开发商。软件开发商通过注册机采用私钥D加密申请码C后生成激活码F。软件供应商将激活码F发给用户。

    4. 用户输入激活码F,软件注册模板采用公钥E对激活码F解码后生成G(即:用户机器特征信息),然后软件注册模板提取用户机器的特定信息后进行编码。将编码的结果与G进行比较,如果相等则用户合法,完成授权,否则授权失败。

    3. 激活码方式注册实现方案

    3.1 总体架构

    封装实现验证码验证功能,以DLL(动态连接库)的形式向应用程序提供验证服务。如何处理授权验证由应用程序本身来完成。

     

    说明:

    l 验证动态库封装不同算法策略和授权策略,提供密钥验证,生成、编、解码功能。

    l 应用程序需要开发一个验证模块,通过调用验证动态库中的函数来进行验证。

    l 验证动态库本身不会提供提示信息展现和相关界面,因此,应用程序的验证模块需要提供某些操作和提示界面(例如:注册码输入框、提示信息框等等)

    3.2 功能模块

    说明:

    l 验证接口为一组WINAPI形式的API集,提供验证相关的服务,由应用程序的验证模块调用。

    l 验证功能模块实现了具体的功能,由验证接口API调用,向外提供服务,其本身不向外暴露;

    l RSA算法模块提供RSA算法实现,供验证功能模块调用;

    l MD5算法模块提供MD5算法实现,供验证功能模块调用;

    l BASE64算法模块提供BASE64算法实现,供验证功能模块调用;

    l 注册表操作模块提供注册表相关操作的实现,供验证功能模块调用;

    l 文件操作模块提供文件相关操作的实现,供验证功能模块调用

    4. 软件源程序保护

    授权解决程序版权问题,同时为了保障授权算法的顺利运行,必须对程序文件进行保护,加大反编译的难度。

    一般软件保护是利用特殊的算法,对EXE、DLL文件里的资源进行压缩,改变其原来的特征码,隐藏一些字符串等等,使一些资源编辑软件不能正常打开或者修改。

    5. 本加壳技术的实现原理

        先将原来的主程序编译成DLL,再编写一个壳程序,编译成EXE,并将程序的运行入口(即main函数)移到壳中来,由壳开始执行整个程序。首先,可以用自编的加密工具,在软件发布前将所有DLL文件分别进行加密(输入特定的密钥),在壳加载DLL时临时将其解密到内存中,并加载运行。由于解密DLL的结果只存在于内存,所以攻击者无法获得解密后的DLL,除非他能找到DLL的解密密钥。同时,为了避免攻击者分析外壳程序的逻辑,从中寻找解密密钥,还可以将壳编译成EXE文件后,再用第三方软件进行混淆,这样攻击者将无法了解DLL加密的算法及处理逻辑。从而,更有效地保护主程序DLL。

    6. 软件保护和授权解决方案提供商推荐

    6.1 比特安索

    比特安索为软件开发商提供基于Web的专业的软件授权管理和保护系统——比特平台。比特平台集软件保护和授权的设计、开发集成、统计管理于一体,为软件开发商及数字内容提供商提供企业级的加密保护及授权管理解决方案。 

    比特平台包含了对软件和数字内容授权周期各个阶段的支持,并可与企业内部的管理系统进行整合,以实现销售过程或订单过程的自动化,支持云授权和本地授权。其优点如下:

    l 随时随地登录。集设计、开发、管理、分析于一体。 

    l 根据不同的市场和用户群进行授权设计,同一套代码满足各种授权模式。 

    l 在比特平台上完成模块下载和API调试。每一个产品的相关模块都是在下载时在线编译而成,独一无二。 

    l 支持基于权限管理的多用户协作,满足组织中不同角色的需要。 

     
  • 相关阅读:
    机房收费系统总结
    python手记(45)
    Hbase深入学习(二) 安装hbase
    Java异常机制
    MySQL 分析服务器状态
    人生感悟:人生像吃自助餐
    Android使用蓝牙连接adb调试App
    JQuery DataTables 列自己定义数据类型排序
    Android-自己定义图像资源的使用(1)
    11款开放中文分词引擎大比拼
  • 原文地址:https://www.cnblogs.com/405845829qq/p/4192374.html
Copyright © 2011-2022 走看看