如何在C#程序中加一个防拷贝模块

.Net技术 码拜 10年前 (2014-12-08) 2692次浏览 0个评论
最近刚接触C#,接到个任务,要给一个程序写一个防拷贝模块。
目前具体思路是
后第一次运行程序时先获取机器的CPU ID、硬盘ID,MAC地址并进行保存,之后再次运行程序就再次获取这些信息与之前的做比对,只要与第一次结果不符就中止程序的运行。网上也看了不少资料,不过还是不太清楚怎么写,求各路大神帮助。
—-
目前就写了三个提取机器码的部分

public static string GetCPUID()
{
ManagementClass mc = new ManagementClass(“Win32_Processor”);
ManagementObjectCollection moc = mc.GetInstances();
string CPUID = null;
foreach (ManagementObject mo in moc)
{
CPUID = mo.Properties[“ProcessorId”].Value.ToString();
break;
}
return CPUID;
}

public static string GetHd()
{
string HdID = null;
ManagementClass mc = new ManagementClass(“Win32_PhysicalMedia”);
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
HdID = mo.Properties[“SerialNumber”].Value.ToString();
break;
}
return (HdID);
}

public static string GetMac()
{
string MacID = null;
ManagementClass mc = new ManagementClass(“Win32_NetworkAdapterConfiguration”);
ManagementObjectCollection moc2 = mc.GetInstances();
foreach (ManagementObject mo in moc2)
{

MacID = mo[“MacAddress”].ToString();
break;
}
return (MacID);
}
—-
那么你这些信息要写入哪里,文件里吗?如果我把文件删除了,你的程序就会认为这是第一次登陆了

你应该做个通过MAC地址生成注册码的功能 ,然后判断文件是否存在,里面的内容是否跟计算出来的注册码一致,来做验证.
—-
引用 2 楼 Z65443344 的回复:
那么你这些信息要写入哪里,文件里吗?如果我把文件删除了,你的程序就会认为这是第一次登陆了

你应该做个通过MAC地址生成注册码的功能 ,然后判断文件是否存在,里面的内容是否跟计算出来的注册码一致,来做验证.

谢谢回复,这个问题有想到过,打算把程序另一个地方加一个计数器,记录程序的运行次数,不是初次运行时如果缺少信息保存文件也停止运行,绑定的硬件信息可以保存为文件或者注册表。
还得写管理员权限。
没权限。 你获取不到。
—-
要改注册表需要权限
而且如果把注册表清理了,还是不行
反正糊弄不太懂技术的人应该是够用了
你可以先做出来试试效果
—-
顶一下,求教具体怎么写唉
—-
联网校验就行了….
—-
要联网注册比较有效,否则很快被破解
—-
生成注册码呀,
—- 5分
第一次运行,获取机器码,就是你的代码。将机器码运算后的结果与用户输入的注册码MD5或其他方式加密后存入注册表。注册码也存入注册表。

第二次运行,判断注册表中是否有数据,有数据则再次获取机器码,并与注册表中的注册码运算,得到结果与注册表中存的数据比对,不对则需要重新注册。

注册码的生成应该是脱离用户环境,用户提交机器码后运算得到。
—- 5分
自从90年代末,计算机的固件大多存放在EEPROM中,并且出于用户升级的便利而开放了编程的接口后,你说的这些都可以轻易改变。而且都不用改,只要在注册表中动点手脚骗骗WMI就可以了。

你看的也不知道是哪年的老黄历。如果真的要防拷贝,买个10块钱的加密狗都比你在这上面研究一年管用。

还有,CPU ID不是唯一的,这个我说了不知道多少次了。相同的CPU ID的CPU少说也有上亿个。
—-
做个注册码吧
—-
WMI是可以被关闭的

不同的代码获取特征码,在管理员权限和普通权限下出来的数据是不一样的,WMI也是这样的

所以,你的代码不可靠
—-
直接上加密锁。
—- 30分
请你们的公司老板了解一下以下建议:

如果你们是个超小的公司,给你个建议,把精力放在推广上,而不是“防拷贝上”。

如果你们的项目是针对大公司、大研究所的,那么其实可以让程序把用户登录信息通过“发邮件、或者http消息发送”方式发到你们自己的服务器上,以后再分析用户登录状况、所在的IP等等。

软件应该有一个使用期限,比如说3个月后就不能用了。然后你们的程序应该使用clickonce方式随时(比如说每2周)自动更新到新版本上,获得新功能。

软件应该有些功能是联机使用的,比如说登录功能,或者核心计算功能只能通过访问你们自己的业务服务器才能执行。

总之,如果你们只会做个单机小程序,就别折腾这种东西,把眼光放长远一点。如果你们会做现代的机遇互联网的软件,那么就把软件“免费”,用服务和增值功能赚钱,把软件跟网络、跟你们的业务服务器联系在一起,这样你不用说教也自然不再纠结这种伎俩。
—-
你所服务的公司,如果老板的创意再提高一点,对你的要求(或者说信心)也高一点(别总是找一个特别低级的小活儿给你做),是不是对你和公司都有利?

就算是有人闲的厉害,也不要把时间消磨在这种程序上。把精力放在“如何自动升级客户端软件版本”之类的问题上岂不是更好?!
—- 10分
既然是单机软件程序,那肯定要用到授权许可注册文件了,无非是这个文件是存储在加密狗上还是隐藏在某个系统目录上,只要用户拿不到这个文件或者拿到了也破解不了就行了,注册文件中只要包含这台计算机的唯一信息就能进行比较判断是否被拷贝了呗,所以你得通过技术手段来加密你的程序和注册文件,这方面的方法就很常规了,还有就是辅助使用有效期和黑名单来控制,用户超过有效期后就要找你更新,如果用户告诉你我换电脑了,那么你就要将他的老注册信息加入软件黑名单,一并更新给他,这样他也无法同时在两台计算机上使用了。
以上就是用户不联网的解决思路,要是联网那你就可以偷偷摸摸做点事儿啦。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明如何在C#程序中加一个防拷贝模块
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!