对于做共享软件开发的程序员来说,最让大家头痛的就是辛辛苦苦写出的软件,本想拿来换口饭吃,可刚刚发布到网上就被那些共享主义者(其实业没什么不好或不对,本人就属于这类人,嘿嘿)将序列号和注册机免费发放到网上,最终导致开发者只能眼睁睁看着束手无策。但与此同时部分软件开发者也开始了反任意爆破等方法的研究,于是现在网上就出现了各种各样的注册方式,但目前看最有效的就属于一机一码这种方式了。
可能因为这种方式最有效,所以微软就在它新推出的编程平台上提供了一些简单实用的方法,今天本人就借助.NET平台下的公共类库来实现一机一码注册算法。在此之前先来介绍一下一机一码的注册原理及与一码一序列号的比较。
之所以是一机指的就是通过获取机器硬件(主要是硬盘和CPU)的一些信息作为注册序列号的一部分,因为目前世界上所有厂家生产的每个硬盘和每个CPU都有自己独有的一些ID号等硬件信息(理论上是如此但实际上也许有一样的,不过那种几率很低,予以忽略不计了),通过一定算法将这些硬件信息读取出来作为注册码,这样就免除了不同机器可以使用相同注册序列号的问题,一码一序列号就是因为这样才造成了只要一个有注册码和序列号被发布到网上别人就可以正常使用软件这种一码通用的现象。
由于.NET提供了相关的类库,本人又稍微借鉴下网上的资料及本人只从事C#方面开发,所以在此本人只写了C#
ManagementObjectCollecti
ManagementObjectSearcher
以上只完成了全部算法的一部分,接下来就是记录注册信息,这个一般都是记录在系统注册表中,这就涉及到注册表的读写,实际并不复杂,这里将读写注册表的代码也写下来了:
//读取注册表注册信息
RegistryKey softwareKey = Registry.LocalMachine.OpenSubKey("SOFTWARE");
RegistryKey choseKey = softwareKey.OpenSubKey("SOW");
RegistryKey SowKey = choseKey.OpenSubKey("Regexample");
this.textBox2.Text = SowKey.GetValue("SerialId").ToString();
this.textBox1.Text = SowKey.GetValue("RegisterCode").ToString();
//写入注册表注册信息
RegistryKey softwareKey = Registry.LocalMachine.OpenSubKey("SOFTWARE",true);
RegistryKey choseKey = softwareKey.CreateSubKey("SOW");
RegistryKey ValueKey = choseKey.CreateSubKey("Regexample");
ValueKey.SetValue("SerialId", SerialId().ToString());
ValueKey.SetValue("RegisterCode",
注:实际注册表读写信息:
[HKEY_LOCAL_MACHINE\SOFTWARE\SOW\Regexample]
"SerialId"="-1587187206"
"RegisterCode"="-1587187206"