目前的软件加密方法有很多,可以通过序列号来实现,但是只通过序列号来实现无法控制软件环境的改变,存在换个机子照样可以用的缺陷,而将序列号和物理结合起来使用可以控制用户只能在一台机器上使用。本文就是按照这样的思路实现的。原理图如下:
具体实现思路:
(1)首先创建保存序列号和cpu物理编号的数据库,建立序列号和cpu物理编号的对应关系表。
(2)编写Web Service 接口函数,接受两个字符串参数:strSerialNo和strCpuNo ,验证的原则是首先验证序列号,如果序列号匹配,则进一步比较cpu编号,如果是第一次验证,只要序列号匹配则认为验证通过,返回为true;如果不是第一次验证,则检验cpu编号,匹配则返回true,反之false;如果序列号不对,直接返回false;
(3)编写客户端验证函数,从配置文件中读取序列号,调用GetCpuSerialNo()获取cpu编号,然后调用web service方法进行验证。获取cpu物理编号主要是通过调用WMI接口函数来实现。
String ^CWebServiceData::GetCpuSerialNo()
{
String ^ strCpuNo;
try
{
ManagementObjectSearcher ^mos = gcnew ManagementObjectSearcher("select * from Win32_Processor");
ManagementObjectCollection^ moc = mos->Get();
i