利用CPU ID 实现基于背包算法的软件注册功能
现
代
计
算
机
^
总
第
_ -
八
七
期
实践与经验
刘平安 , 罗林开
(厦门大学 自动化系,厦门 361005)
,
一
摘 要:传统的软件保护方式通常采用“用户名”和“注册码”对应的机制,这种方法安全性很差。本文提出了
一 种采用软件所装机器CPUID号作为原始码,并通过背包算法加密的软件注册功能实现方案。
关键词:注册码;CPUID;超递增背包序列;普通背包序列;加密/解密
引 言
软件通常采用在限定时间内试用,通过合法用
户注册产生注册码...
现
代
计
算
机
^
总
第
_ -
八
七
期
实践与经验
刘平安 , 罗林开
(厦门大学 自动化系,厦门 361005)
,
一
摘 要:传统的软件保护方式通常采用“用户名”和“注册码”对应的机制,这种
安全性很差。本文提出了
一 种采用软件所装机器CPUID号作为原始码,并通过背包算法加密的软件注册功能实现
。
关键词:注册码;CPUID;超递增背包序列;普通背包序列;加密/解密
引 言
软件通常采用在限定时间内试用,通过合法用
户注册产生注册码的方式进行保护。然而,这种方
法一旦用户名和注册码被泄漏便可以无限制地在
任何机器上注册使用,完全失去了其保护能力。
本文采用 CPU ID号和用户名并作一些简单
处理作为软件加密的原始码,通过网络或其他方式
传递给软件开发者,然后经过普通背包序列加密原
文,反馈给合法用户,合法用户使用该加密后的“注
册码”注册软件 ,在程序运行时使用一超递增背包
序列解密密文 ,可以解析出一 CPUID,如果是注册
用户 自己的机器 ,则该 CPU ID和机器 CPU ID相
同,可以合法使用。由于加密密钥在开发者手中,
其他人很难解密密文,从而大大提高了软件合法使
用的安全性。
1 保护机制分析
背包问题 :给定一堆物品,每个重量不同,能否
将这些物品中的几件放入一个背包中,使其等于一
给定的重量?数学描述 :给定一系列值 Mt,M ,...,M
和一个和值 S,计算机 b;使之满足 :
S:blMl+b ⋯+b
bi的值可为 0或 l,l表示该物品在背包中,0
表示不在。
一 般来说,解决这个问题所需的时间会随着堆
中物品个数增加而呈指数增长。
o MODERN COMPUTER 2004.5
一
一
一
Merkle-Hellman:背包算法的思想是将消息
编码为背包问题的解。明文分组长度等于堆 中物
品个数 ,且明文位与 b的值相对应 ,密文就是计算
得到的和值。
超递增序列 :如果一个序列 ,它的每一项都大
于它之前所有项之和 ,那么就称为一个超递增序
列。例如:{2,3,6,l3,27,52}。
在本文中,明文就是客户的机器 CPU ID号加
上用户名经过简单处理的信息串。由于每台机器
的 CPU ID号都不同,利用 CPU ID号的唯一性可
以避免常用的注册方法中“用户名”和“注册码”泄
漏导致的加密失效。因为在一台机器上的 “用户
名”(经过和 CPU ID信息处理后)在另外一台机器
上是无效的,即使“注册码”泄漏 了也不能正常使用
软件。
一 般 ,超递增背包问题的解很容易找到 ,可 以
把易解的超递增背包序列作为私人密钥 而对于
普通(非递增)的背包是难解的问题 ,因此,我们把
和超递增背包 问题具有相 同解 的普通的背包问题
用来作为公开密钥,它可 以很容易地被用来加密明
文但不能用来解密密文。这样 ,不知道私人密钥的
人要破译密文就不得不解一个非常难的背包问题。
2 具体实现
(1)CPU ID 的获取
AnsiString GetCPUID(void)
维普资讯 http://www.cqvip.com
{ .
int EAX
一
'EDX ,ECX_;
_
a~/n
{
MOV EAX,01H
CPUID
MOV EAX
_
~EAX
MOV EDX
_ ,
EDX
}
if(EDX_&Ox(X)(O 1O0)
{一a锄
{
MOV EAX,03H
CPUID
MOV EDX
_ ,EDX
MOV ECX.-。ECX
}
}
return AnsiString(IntToHex(EAX_,8)+IntToHex(EDX ,8)+
IntToHex(ECX_,8));
}
(2)产生超递增背 包
bool ProduceSuperIncreasingKnapsack(
1ongint ip/ 返 回二进制 串 /,
int count/*序列产生项数 /)
{
long int sum .temp--0;
Randomize();
for(int i--O;i
O)
{
//gcd为求最大公约数函数
//m与n互素igcd=gcd(temp。n,&tempx,&tempy);
if(igcd==1)
MODERN COMPUTER 2004.5 o
理 代 计 算 枫 ^总 第 一 八 七 期
维普资讯 http://www.cqvip.com
实践与经验
{m---temp;bnag=true;break;J
)
!bra~S)returnfalse;
//生成一般背包序列
int64 Imp;
forO----O;j
本文档为【利用CPU ID 实现基于背包算法的软件注册功能】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。