AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > VC编程

利用硬件信息实现共享软件的安全注册

51自学网 2015-08-30 http://www.wanshiok.com

一、 引言

但现有共享软件的许多注册方法是存在漏洞的,不少破解网站通过正常渠道购买回一个注册码之后将其公布在其网站之上,更有甚者还提供生成注册码的注册机。以上的行为侵犯了软件开发者的知识产权,干扰了共享软件的正常发布。虽然国家也有保知识产权的相关法律条文,但显然在执行起来存在一定的难度。因此作为程序员的软件开发者应当具有自我保护意识,利用自己的专业特长,通过程序控制来确保自己的每一个注册码只对于一个软件拷贝。本文将根据笔者的实际编程经验,结合物理硬件信息的安全的注册方法实现过程进行较全面的介绍。

二、 注册源的采集

  为了确保注册码的唯一性,在注册源的采集上应当尽量选取一些唯一的、不易复制的软、硬件信息作为原始信息。硬件由于其不可复制性和物理唯一性成为了我们的首选目标,而且多数计算机配件在出厂时都有一个唯一的标识号,可以将其作为识别的依据。符合上述条件的标识号大致有硬盘的序列号、网卡的序列号、BIOS中的主版序列号或出厂日期和标志等几种,考虑到硬件通用性、实现起来的难易程度以及系统安全性等多种因素以硬盘序列号为佳,因网卡虽说唯一性最好但不能保证每台计算机都装有网卡,而ROM BIOS中F000H-FFFFH区域虽存有与硬件配置有关的信、F000H:FFF5H-F000H:FFFFH存有主机出厂日期和主机标志值等参数,但在Windows 9x的保护模式下编程实现是比较困难的。虽然在Windows 9x保护模式下对硬盘序列号也不能按通常在DOS模式下的通过硬盘端口1F6H和1F7H直接读取,但Windows API函数中提供的下面这个函数可以非常简单的获取到指定磁盘驱动器的序列号:

GetVolumeInformation("C://",NULL,NULL,&dwIDESerial,NULL,NULL,NULL,NULL);

  第一个参数设为"C://"表示我们要读取C盘驱动器的序列号。之所以选C盘,是因为我们不能保证用户有多个分区,而C盘却是每一个用户都具有的。该函数成功调用完毕后,在DWORD型的变量dwIDESerial中就存储了获取到的32位长的磁盘序列号。注册信息采集到后,关键的问题就是如何让用户将其返回给开发者。一种较简单的方法是把采集到的硬盘序列号与用户输入的注册名经过位操作的简单加密后存放到一个文本中通过邮件传送给开发者。

<

 

 

 
说明
:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
上一篇:利用类的非static成员函数作窗口的处理函数  下一篇:基于Visual&nbsp;C++&nbsp;的自动化客户端的实现