如何获取不会改变的硬盘序列号?

howze 2020-09-24 05:44:14
因为要做个收费软件,软件绑定电脑硬件,计划通过硬盘序列号来实现。

我使用的代码如下:



public string GetHardDiskID()
{
//创建ManagementObjectSearcher对象
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");

string harddiskID = null;//存储磁盘序列号

//调用ManagementObjectSearcher类的Get方法取得硬盘序列号
foreach (ManagementObject mo in searcher.Get())
{
if (mo["SerialNumber"] != null)
{
harddiskID = mo["SerialNumber"].ToString().Trim();//记录获得的磁盘序列号

break;
}

}

if (harddiskID == null)
{

return “获取失败”;
}
else
{
return harddiskID;
}

}



但是在实际使用过程中发现,win 10 系统在发生系统更新后,这个序列号会变化,这就无法用来做软件授权了。

请问到底该如何获取永远不会变化的硬盘序列号呢?谢谢!
...全文
3671 24 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
SayoKun 2020-09-30
  • 打赏
  • 举报
回复
其实这个事情可以参考下微软的操作,获取当前设备主要硬件的编码然后结合你的注册码来生成license。每次启动软件时检测一次,如果设备有变更但是数量小于50%然后记录并修改当前已有的license~这样基本就不存在硬件ID改变导致你的license无效。
threenewbee 2020-09-30
  • 打赏
  • 举报
回复
引用 22 楼 SayoKun 的回复:
其实这个事情可以参考下微软的操作,获取当前设备主要硬件的编码然后结合你的注册码来生成license。每次启动软件时检测一次,如果设备有变更但是数量小于50%然后记录并修改当前已有的license~这样基本就不存在硬件ID改变导致你的license无效。

事实证明,微软不是这么操作的,只要更换主板,其余都一样,就要重新激活。除非你是盗版。
howze 2020-09-30
  • 打赏
  • 举报
回复
引用 22 楼 SayoKun 的回复:
其实这个事情可以参考下微软的操作,获取当前设备主要硬件的编码然后结合你的注册码来生成license。每次启动软件时检测一次,如果设备有变更但是数量小于50%然后记录并修改当前已有的license~这样基本就不存在硬件ID改变导致你的license无效。
设备有变更但是数量小于50%?这个思路很厉害啊? 意思是比如记录了硬盘、CPU、mac地址、BIOS的ID,以及主板 这时候如果硬盘和mac地址变了,数量小于50%,意味着设备没换? 可以自动更新授权?
threenewbee 2020-09-27
  • 打赏
  • 举报
回复
再给你一个思路 用电话号码+身份证号(个人)或者企业执照编号(企业)+购买使用的bank帐号或者zfb帐号 联合起来作为条件,产生注册码 注册码通过下发到手机短信的方式提供 一般人不会为了盗版把自己的这些信息告诉别人吧。
howze 2020-09-27
  • 打赏
  • 举报
回复
引用 16 楼 xinbada1985 的回复:
[quote=引用 14 楼 howze 的回复:][quote=引用 13 楼 xinbada1985 的回复:]就是拿这个文件,作为硬盘序列号的标识,只要机器上没有这个文件,就视为没授权
但是还有个核心问题,就是当用户重装系统,或者不小心误删了这个文件,就导致授权失败,而且还没办法恢复,因为这个guid很难生成同样的,这时候咋办,总不能不让用户重装系统吧[/quote] 一个小程序不用考虑那么多!重做系统你就重新给他授权一下呗,也不会没事就重做系统。用硬盘,他还可能换硬盘啊!用mac地址,他可能换网卡,后期维护在说维护的事。不要想那么太多,没有百分之百安全的程序,就看你的取舍了!哪个方向你觉着更合适。[/quote] 如果这样随便就给重新授权,那无数人都以重装系统为理由替未购买的人要授权,我咋办
xinbada1985 2020-09-27
  • 打赏
  • 举报
回复
引用 14 楼 howze 的回复:
[quote=引用 13 楼 xinbada1985 的回复:]就是拿这个文件,作为硬盘序列号的标识,只要机器上没有这个文件,就视为没授权
但是还有个核心问题,就是当用户重装系统,或者不小心误删了这个文件,就导致授权失败,而且还没办法恢复,因为这个guid很难生成同样的,这时候咋办,总不能不让用户重装系统吧[/quote] 一个小程序不用考虑那么多!重做系统你就重新给他授权一下呗,也不会没事就重做系统。用硬盘,他还可能换硬盘啊!用mac地址,他可能换网卡,后期维护在说维护的事。不要想那么太多,没有百分之百安全的程序,就看你的取舍了!哪个方向你觉着更合适。
xinbada1985 2020-09-27
  • 打赏
  • 举报
回复
引用 17 楼 howze 的回复:
[quote=引用 16 楼 xinbada1985 的回复:][quote=引用 14 楼 howze 的回复:][quote=引用 13 楼 xinbada1985 的回复:]就是拿这个文件,作为硬盘序列号的标识,只要机器上没有这个文件,就视为没授权
但是还有个核心问题,就是当用户重装系统,或者不小心误删了这个文件,就导致授权失败,而且还没办法恢复,因为这个guid很难生成同样的,这时候咋办,总不能不让用户重装系统吧[/quote] 一个小程序不用考虑那么多!重做系统你就重新给他授权一下呗,也不会没事就重做系统。用硬盘,他还可能换硬盘啊!用mac地址,他可能换网卡,后期维护在说维护的事。不要想那么太多,没有百分之百安全的程序,就看你的取舍了!哪个方向你觉着更合适。[/quote] 如果这样随便就给重新授权,那无数人都以重装系统为理由替未购买的人要授权,我咋办[/quote] 你可以限定他1年有1到2次重新申请的机会!防止他重装或换机器!多了你们就不负责了!那样他就不会有这样的问题了,毕竟他要把重新申请的机会留给自己,楼上说的是也好办法!不过你一个单机绿色版小程序没必要做那么多。
泡泡龙 2020-09-27
  • 打赏
  • 举报
回复
用api,可以获取和EVERESTUltimateEdition一样的序列号
大鱼> 2020-09-27
  • 打赏
  • 举报
回复
就像楼上老马说的,以注册的形式进行,这样好控制些,一个账户只能同时允许一个登陆
Yofoo 2020-09-25
  • 打赏
  • 举报
回复
从系统的设备管理先检查下实际的序列号, 跟获取的序号是否一致
xinbada1985 2020-09-25
  • 打赏
  • 举报
回复
引用 6 楼 howze 的回复:
[quote=引用 5 楼 xinbada1985 的回复:]这个好解决!做一个license授权,就可以达到一对一绑定,拿到别处也不会好用
我就是做的license授权,但绑定硬件,这时候就必须要读取设备信息了[/quote] 不推荐硬件的原因是硬件不稳定性太高!
xinbada1985 2020-09-25
  • 打赏
  • 举报
回复
引用 6 楼 howze 的回复:
[quote=引用 5 楼 xinbada1985 的回复:]这个好解决!做一个license授权,就可以达到一对一绑定,拿到别处也不会好用
我就是做的license授权,但绑定硬件,这时候就必须要读取设备信息了[/quote] 不一定非要硬件信息!我上边说的!也可以在软件安装的时候生成一个唯一的key
xinbada1985 2020-09-25
  • 打赏
  • 举报
回复
原理就是在软件安装的时候生成一个随机ID,然后通过这个随机id生成一个license授权文件!哪怕安装文件拿到别的机器安装,没有license授权文件,也没办法用
howze 2020-09-25
  • 打赏
  • 举报
回复
引用 5 楼 xinbada1985 的回复:
这个好解决!做一个license授权,就可以达到一对一绑定,拿到别处也不会好用
我就是做的license授权,但绑定硬件,这时候就必须要读取设备信息了
xinbada1985 2020-09-25
  • 打赏
  • 举报
回复
这个好解决!做一个license授权,就可以达到一对一绑定,拿到别处也不会好用
howze 2020-09-25
  • 打赏
  • 举报
回复
引用 2 楼 by_封爱 的回复:
电脑上面的一切东西 都可以模拟...什么网卡 序列号 如果从根本来说 这些都不行.. 上U盾 这种才是"唯一"的解决方案
版主说的我何尝不明白,但是个人开发的小软件,再去搞个优盾,感觉实在没必要啊
howze 2020-09-25
  • 打赏
  • 举报
回复
引用 1 楼 贵阳老马马善福专业维修游泳池堵漏防水工程 的回复:
你是不是有多个硬盘(固态、机械) 所以会“变化” 实际上是获取到了不同的硬盘的序列号 另外就是开了hyper-v后获取的是虚拟设备,这个可能也不同 代码本身没问题
是吧,我也觉得代码本身没问题,硬盘就一块啊,也没开啥hyper-v,所以我才会奇怪,关键是以前使用正常,就是昨天系统更新后,发现不一样了。
by_封爱 版主 2020-09-25
  • 打赏
  • 举报
回复
电脑上面的一切东西 都可以模拟...什么网卡 序列号 如果从根本来说 这些都不行.. 上U盾 这种才是"唯一"的解决方案
圣殿骑士18 2020-09-25
  • 打赏
  • 举报
回复
如果用户破解你的程序的积极性不高,就用mac地址验证也行。如果用户会破解你的程序,那还是上u盾吧,值得这么去做。淘宝上买一个ukey也就10块钱。
howze 2020-09-25
  • 打赏
  • 举报
回复
引用 13 楼 xinbada1985 的回复:
就是拿这个文件,作为硬盘序列号的标识,只要机器上没有这个文件,就视为没授权
但是还有个核心问题,就是当用户重装系统,或者不小心误删了这个文件,就导致授权失败,而且还没办法恢复,因为这个guid很难生成同样的,这时候咋办,总不能不让用户重装系统吧
加载更多回复(4)

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧