机器码获取生成注册码.docx
《机器码获取生成注册码.docx》由会员分享,可在线阅读,更多相关《机器码获取生成注册码.docx(6页珍藏版)》请在冰豆网上搜索。
机器码获取生成注册码
机器码获取生成注册码
2010年07月11日星期日18:
06
转载自xhg83
最终编辑xhg83
通过获取硬盘的物理序列号和网卡MAC地址,为您的程序提供了获取唯一的机器码,你可以根据此码,生成自己产品注册码,有效防止软件的盗版
可以自己根据获取到的硬盘序列号和网卡MAC地址进行一定的加密算法生成,唯一的机器码.
给自己的软件制作注册码
从今天起,您开发的的任何软件如果您愿意都可以为之加密--为您的软件制作一款注册机!
当您看完这篇文章时,您就可以理直气壮的告诉您的用户:
"喂,想用我的软件是吧掏钱!
".
呵呵,这当然只是给自己壮胆的话,现在连万能注册机都有了,人家还怕啥不过只要您想想微软,人家再牛B的加密技术都会被
国人"鄙视"但人家不也在中国大把大把的捞钱吗
OK,不扯了,我们进入正题.
同一般的软件注册一样,我们这里的注册是这样进行的:
1.首先根据用户的硬件信息生成24位的机器码
--相当于种子,用于生成随机数
2.采用注册机根据特征数字生成一个24位注册码
--相当于伪随机数生成器,输出长度自己定,最后用一个格式化函数,将随机数映射到ASCII字符集合
3.用户输入注册码注册成功
假设客户很喜欢您的软件,也假设他没有破解,他需要通过以下方式向您取得注册码:
(1).如果他能上网,他需要把机器码用Email发给您;
(2).如果他不能上网,他可以把机器码用手机短信的方式发给您.
(3).如果他没有手机,他可以带着机器码然后坐火车到您的办公室想您要一个注册码.
--第3条只是为了让您看帖子的时候别太枯燥了,抱歉.
现在,您拿到了客户的机器码后,如果您同时也收到了他汇的钱,呵呵,好像给软件加密就是为了要钱吧那么您就可以用客户的机器
码生成一个唯一的注册码再用同样的方式给用户,最后,用户输入注册码即可!
需要强调的是客户机器的硬件信息获取方式是有很多种选择的.这里我们选择最放心的两个硬件:
CUP的序列号和硬盘的卷标号.好了,
下面您就可以一步一步制作一款软件注册机了.
步骤一:
获得CUP序列号和硬盘序列号的实现代码如下:
Java代码
#region获取cpu的序列号
publicstringgetCpu()
{
stringstrCpu=null;
ManagementClassmyCpu=newManagementClass("win32_Processor");
ManagementObjectCollectionmyCpuConnection=();
foreach(ManagementObjectmyObjectinmyCpuConnection)
{
strCpu=["Processorid"].();
break;
}
returnstrCpu;
}
#endregion
#region获取cpu的序列号
publicstringgetCpu()
{
stringstrCpu=null;
ManagementClassmyCpu=newManagementClass("win32_Processor");
ManagementObjectCollectionmyCpuConnection=();
foreach(ManagementObjectmyObjectinmyCpuConnection)
{
strCpu=["Processorid"].();
break;
}
returnstrCpu;
}
#endregion
Java代码
#region获取设备硬盘的卷标号
publicstringGetDiskVolumeSerialNumber()
{
ManagementClassmc=newManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectdisk=newManagementObject("=\"d:
\"");
();
return("VolumeSerialNumber").ToString();
}
#endregion
#region获取设备硬盘的卷标号
publicstringGetDiskVolumeSerialNumber()
{
ManagementClassmc=newManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectdisk=newManagementObject("=\"d:
\"");
();
return("VolumeSerialNumber").ToString();
}
#endregion
步骤二:
收集硬件信息生成机器码,代码如下:
Java代码
privatevoidbutton1_Click(objectsender,EventArgse) {
=getCpu()+GetDiskVolumeSerialNumber();oString());
if(intNumber[j]>=48&&intNumber[j]<=57)oString();
}
elseif(intNumber[j]>=65&&intNumber[j]<=90)oString();
}
elseif(intNumber[j]>=97&&intNumber[j]<=122)oString();
}
elseoString();
}
else
{
strAsciiName+=(intNumber[j]-9).ToString();
}
}
=strAsciiName;oString());
if(intNumber[j]>=48&&intNumber[j]<=57)oString();
}
elseif(intNumber[j]>=65&&intNumber[j]<=90)oString();
}
elseif(intNumber[j]>=97&&intNumber[j]<=122)oString();
}
elseoString();
}
else
{
strAsciiName+=(intNumber[j]-9).ToString();
}
}
=strAsciiName;reateSubKey("ZHY").CreateSubKey(""). CreateSubKey ("UserName","MySoft");
("注册成功");
}
else
{
("注册码输入错误");
}
}
else{("请生成注册码","注册提示");}
}
privatevoidbtnRegist_Click(objectsender,EventArgse)
{
if!
="")
{
if
{
retkey= OpenSubKey
("software",true).CreateSubKey("ZHY").CreateSubKey(""). CreateSubKey ("UserName","MySoft");
("注册成功");
}
else
{
("注册码输入错误");
}
}
else{("请生成注册码","注册提示");}
}
/////////////////////评论//////////////////////////////
我觉得这里有问题:
1、如果我要把软件注册移植到别的电脑上,不是又要重新去申请注册吗
2、用户体验很有问题,至少我不会为了装一软件而去要注册码的
3、一般的注册码机制,是发布软件的时候生成一个唯一的GUID,然后经过处理后,发送给客户。
客户得到后通过网络注册。
而不是客
户自己去提供一个什么机器码
转自: