求:通过机器码获得注册码的完整方案(700分,不够可加)(100分)

  • 主题发起人 oceanwave
  • 开始时间
这个问题我最近也想过,可否这样:不一定要取硬件的固定码,可否在程序中生成一个随机码
放在系统的注册表中,以后就用这个随机码进行生成注册码和注册码验证.你们觉得这个办法
可行吗?
 
可行,使用GUID,放在注册表中,同时把这个GUID发回给你,你可以使用这个进行注册码和注册码验证。

获得GUID,
uses activex;

var
guid:TGUID;

CoCreateGUID(guid);
ShowMessage(GuidToString(guid));
 
希望有完整的通过GUID得到SN的代码方案。将会另外给分300分。
原来硬盘序列号方式回答完整后,也同样给分。
参与者也有分。
这次算是千分大放送了:)
谢谢!
 
建议不要用硬盘序列号,因为一方面在2000/NT/XP和中有问题,
另一方面对SCSI硬盘有问题。
建议不要用主板序列号,因为同批次的主板序列号后部分相同,
前部分与所插硬件相关。
建议使用CPU序列号
 
用SoftSentry加密软件搞定
Delphi园地
http://mydelphi.8u8.com
 
GUID是利用网卡的序列号和当前的时间生成的,有些机器可能根本不装网卡,所以用网卡序列号也未必有效。
WindowsXP就是利用计算机中的硬件信息进行加密的,
如果能获取到WindowsXP中代表硬件信息的序列号就好了!
谁有这方面的经验?
 
放在注册表里还不如不要算了,
1、可以检测到你把sn写在注册表哪里,在另外的电脑上复制即可
2、克隆整个硬盘
关于网卡号也不行,可以伪造,很简单。
 
xmodem兄说的没错,这样或那样的加密保护也只是“防君子,不防小人”。
查阅了网上的一些相关资料,用硬盘序列号还是比较通用的做法。
因此,我还是希望那位高手能回答完我先前的四个问题。
应该说zw84611兄已经回答第一个问题,150分是他的了。希望他能告诉我如何生成不可逆
的注册码,以及一些稍加的说明。就有第二、三个问题的300分了,谢谢!
还有第四个问题……
当然还有几位兄弟,如飘摇客,jifee,等等,也不一一列举了,我都会另外开贴给分。
总共发分1000分。希望大家踊跃讨论,谢谢!
 
其实任何的加密基本上都能被破解,这里给你一个思路。

1、用户第一次运行软件后,生成一个GUID,保存在注册表中,另外存储在文件中或者写入系统已有的文件尾部。
此为机器码,让用户发回,如果用户在注册表中删除了,就从文件中读取GUID,然后写入注册表。当然
应该还需用户发回用户的相关信息,保证在重新安装机器时能向你索回注册码;
2、根据此GUID写一个验证序列号的过程(软件中);
3、写一个注册机,根据用户邮寄回的GUID得到注册码,发给用户用于注册;
4、最好提供在线更新功能,更新时记录用户机器码(GUID),如发现有同一个GUID对同一个版本进行更新,就发布新的版本,使该GUID对应的注册码不可用。
 
to 飘摇客
那还不如用分区的序列号来的方便,加密解密算法网上不是很多吗?随便弄不就行了。不过
话又说回来了,软件只要给别人用,总会被人破解的,所以我一般只发布DEMO版,只有注册
用户才给正式版,这样可能会好些。虽然麻烦些,但至少软件被人破解的可能些大大降低了。
 
我想问一下,是不是收到用户发来的机器码后,作者通过此机器码生成一个注册码给用户?
那作者是怎样生成注册码的呢?是不是编一个程序来生成,那这个程序跟那些破解注册机是
一回事吗?
请各位搞手顺便回答一下我的问题,谢谢。
 
对,其实给Demo的办法不错,其实简单做一个注册的就行(用用户和你联系的邮箱和
用户名进行注册),如果别人要买你的软件就会买
的。如果使用硬件加密的话相对要好一些,但是也有问题,假如使用硬盘序列号来注册,
有些硬盘根本就没有序列号,主板也是一样的,有的主板也没有序列号,
网卡的和CPU的就没有试过了,不知道如何。
 
谢谢飘摇客!
但我的问题与先前用硬盘序列号的方式一样:
怎么由这个GUID,或是HD-SN生成一个不可逆的注册码?也就是注册机的实现代码?
 
先前zw81644兄提供的代码中,GetVolumeInformation获取的是分区的序列号,而不是硬盘
的序列号,我想这个序列号总该是有的。而飘摇客兄用GUID还会更好些,但突然想起来,
重新分区的机率应该比重新安装程序小得多,也就是分区序列号的变化会比GUID小。而FAT
、FAT32、NTFS的分区都有序列号。而这个序列号不用存储在注册表或是文件中,保密性
和方便性会更好。如果是GUID,一是在注册表中找找就可以COPY到其它机器中,保密性会
差一些,因为它是存储在外部,二是如果重装系统(分区序列号可以不变),GUID就改变
了,用户就要重新申请注册码,这就麻烦了。
虽然,这些加密比较表面,但在一定用户范围中可以保证开发者的利益。
所以,我想用硬盘序列号(准确的讲是“分区序列号”)做为注册码生成的基础会更适合
一些。
 
前面我有给过一个网址:
http://www.powerba.com/develop/vc/article/20011113001.htm
这里就有提到:
------------------------------------------------------------------------------
为了确保注册码的唯一性,在注册源的采集上应当尽量选取一些唯一的、不易复制的软、
硬件信息作为原始信息。而硬件由于其不可复制性和物理唯一性成为了我们的首选目标,
而且多数计算机配件在出厂时都有一个唯一的标识号,我们可以将其作为识别的依据。符
合上述条件的标识号大致有硬盘的序列号、网卡的序列号、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位长的磁盘序列号。注册信息采集到后
,关键的问题就是如何让用户将其返回给开发者。一种较简单的方法是把采集到的硬盘序
列号与用户输入的注册名经过位操作的简单加密后存放到一个文本中通过邮件传送给开发
者。
------------------------------------------------------------------------------
 
关于加密的算法网上有很多的,你可以搜索一下,寻找一个适合你使用的。
 
to oceanwave:
就是,就是,格式化毕竟比重装系统少些,还有为了保证正式版的安全,在给注册用户时最好
要约法三章,如果用户将正式版在网上发布或破解,就取消他注册用户免费升级的权利,所以
给用户的每个软件最好要记录软件的序列号,即软件EXE文件的CRC校验号码。
 
顶部