机器特征码

来源:互联网 发布:2016网络售彩阿里布局 编辑:程序博客网 时间:2024/06/09 15:20

在计算机硬件设备中 CPU ID、BIOS、主板、内存、硬盘、卷SN,网卡MAC地址可作为机器特征码,通过硬件检测工具如everest可以看到这一点。

 

CPU ID

cpu id并不具备唯一性,同一批号的cpu其id可能相同

1、WMI

SELECT ProcessorId FROM Win32_Processor

 

2、API

貌似没有相关win32 api可以用于获取CPU ID的

 

3、ASM

http://devpinoy.org/blogs/cvega/archive/2006/04/07/2658.aspx

 

BIOS SN

1、WMI

SELECT SerialNumber FROM Win32_BIOS

基本上是返回“0000000000”

 

2、API

没有找到相关api

 

3、ASM

没有找到C#相关

 

主板 SN

1、WMI

SELECT SerialNumber FROM Win32_BaseBoard

基本上返回空

 

2、API

没有找到相关API

 

3、ASM

没有找到C#相关

 

内存 SN

1、WMI

SELECT SerialNumber FROM Win32_PhysicalMemory

基本上返回空

 

2、API

没有找到相关API

 

3、ASM

没有找到C#相关

 

硬盘 SN

SCSI硬盘据说是没有ID的

 1、WMI

SELECT SerialNumber FROM Win32_PhysicalMedia

对SATA硬盘无效

 

2、API

DeviceIoControl 这是一个复杂的函数,以下是一个摘自网络可以直接调用的cs

  

 

3、使用DLL

提取硬盘ID动态链接库 V2.00

 

卷 ID

由Format命令生成,Ghost可复制,同时也存在卷ID修改软件

1、WMI

SELECT VolumeSerialNumber FROM Win32_LogicalDisk

 

2、API

GetVolumeInformation

 

网卡 MAC

获取MAC的方法有很多,常规方法如WMI、API、COM、NetWorkInterface类等,请参考“网卡MAC地址修改”一章,网卡的MAC地址是可以伪造的,要获取固件中的MAC地址,应使用DeviceIoControl API

以下是摘自网络的一个可以直接调用的css

可以以NetWorkInterface类的id属性调用GetNicAddress

 

注意: 

 

硬件的ID也好SN也好,甚至包括网卡的MAC并不是绝对具备的或可读取的,不同的硬件产商可能有不同的作法,因此在处理硬件特征码时应作好空判断及异常捕获

 

DeviceIoConstrol是可以被Hook的

 

可以考虑用其它信息,如硬件的GUID、DeviceID等作为特征

 

推荐使用CPUID+硬盘SN+卷SN+网卡固件MAC作为机器特征码,并对组成作最底限制,如必须有某些特,否则生成的相应特征码是不安全的

 

 参考资料:

C#获取电脑硬件信息(CPU ID、主板ID、硬盘ID、BIOS编号)说明
http://blog.csdn.net/docflying/archive/2009/04/27/4128146.aspx

 

获取网卡MAC、硬盘序列号、CPU ID、BIOS编号
http://www.lihuasoft.net/article/show.php?id=2830

 

C#取机器码
http://www.cnblogs.com/easydata/archive/2007/09/10/888592.html

 

C#应用:读取指定盘符的硬盘序列号
http://www.wangchao.net.cn/bbsdetail_546503.html

 

C#读硬盘序列号的原代码
http://www.chenjiliang.com/Article/View.aspx?ArticleID=2058

 

C#代码获取网卡地址
http://www.cnblogs.com/osoft1983/archive/2008/12/10/1351678.html

 

C#实现启用、禁用本地网络的三种方式
http://blog.csdn.net/zjfei/archive/2009/04/23/4104660.aspx