一种简单注册码加密的例子分析

http://tech.ddvip.com   2007年03月17日    社区交流

本文详细介绍一种简单注册码加密的例子分析

  本文示例源代码或素材下载

  前言:

  为了保护软件开发者的权益我们经常需要对软件进行加密限制,以防止未经许可的随意拷贝。另一方面我们也可能需要在自己的共享软件中提供注册码的功能。近期笔者因为要对一软件进行加密限制,故对简单加密的方法做了一翻"研究"(找资料).下面我把我的方法写出来,希望对初学者有一定的帮助。

  1.目标:做到一部机器只能装一个目标软件.程序拷给用户后,要求先注册,否则出现未注册消息.(注册方法见后面)

  2.分析:为每部机器分配一注册号,需要读机器的硬件信息.硬件信息可采用:

  a.读bios信息.用指针对bios操作,比较复杂.

  b.读cpu系列号.简单api,仅2000适用.

  c.读网卡id.用几个api.

  d.读硬盘系列号.一个api,简单.

  我采用了读硬盘系列号的方法,简单(能骗老板就行了).注册后解密匙放哪里呢?ini文件?二进制文件?不行,不小心删掉就没了.注册表?太麻烦,不够绿色.把他放在可执行文件本身最方便了.可惜可执行文件

  只能读本身,不能写自身(谁知道如何写请告诉我),故需另外做一个来写,写入解密匙后,每次可执行文件运行就读自身里的解密匙,由此判断有没有注册.

  3.示例代码分析

  3.1 解密机部分 ( 作者用于初始化目标,生成解密匙)

  新建一对话框工程,加入两edit框,并为他们添加long型变量 m_gkh,m_jms.再加入按钮"解密匙",按钮"初始化目标",按钮"测试解密".

  在OnInitDialog()加入下列代码:

DWORD VolumeSerialNumber;
GetVolumeInformation("c:\",NULL,12,&VolumeSerialNumber,NULL,NULL,NULL,10);
VolumeSerialNumber^=0x12345678;//本机c盘序列号简单运算
m_gkh=VolumeSerialNumber;//本机顾客号.测试用
UpdateData(0);

  按钮"初始化目标"里添加代码:

作者:king_koo    责编:豆豆技术应用

正在加载评论...