如何获取cpu序列号

csat2004 2010-08-30 03:19:18
我想获取cpu的序列号用来实现我的软件加密,希望各位大哥大姐帮忙。但是如果是类似以下的代码就不要贴出来了,因为它获得的是cpu编号,不是序列号,同一批次出厂的cpu的编号是相同的,它无法满足我实现加密的要求。谢谢!
public static string GetComputerId() { string sProcessorID = ""; string diskID = ""; string sQuery = "SELECT ProcessorId FROM Win32_Processor"; ManagementObjectSearcher oManagementObjectSearcher = new ManagementObjectSearcher(sQuery); ManagementObjectCollection oCollection = oManagementObjectSearcher.Get(); foreach (ManagementObject oManagementObject in oCollection) { sProcessorID = (string)oManagementObject["ProcessorId"]; } return (sProcessorID); }



public static string GetComputerId() { string cpuInfo = "";//cpu序列号 ManagementClass cimobject = new ManagementClass("Win32_Processor"); ManagementObjectCollection moc = cimobject.GetInstances(); foreach (ManagementObject mo in moc) { cpuInfo = mo.Properties["ProcessorId"].Value.ToString(); } return cpuInfo; }
...全文
3130 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
traveller 2012-08-29
  • 打赏
  • 举报
回复
MAC地址 可以修改的好吧
zhanglcheng 2010-09-07
  • 打赏
  • 举报
回复
路过学习一下,感觉楼上说的比较正确
duyongfeng1985 2010-09-07
  • 打赏
  • 举报
回复
给你另一个思路,用硬盘和MAC地址,别用CPU了
CPU相同的几率比较大,做用不大~
csat2004 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 lovesongforever 的回复:]
public static string GetCPUSerialNumber()
{
string cpuSerialNumber = string.Empty;
ManagementClass mc = new ManagementClass("Win32_Processor");
ManagementObjectCollection moc = mc.GetInsta……
[/Quote]

不好意思,我强调了好几遍了,这个只能获取cpu编号,尽管你的把变量命名为"cpuSerialNumber"。还是谢谢了!
深海之蓝 2010-08-31
  • 打赏
  • 举报
回复
加密 一般用硬盘号,同一批的cpu编号是一样的
参考
http://blog.csdn.net/llwinnner/archive/2009/03/21/4011936.aspx
csat2004 2010-08-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 net_lover 的回复:]
C# code
ManagementClass clsMgtClass = new ManagementClass("Win32_ComputerSystemProduct");
ManagementObjectCollection colMgtObjCol = clsMgtClass.GetInstances();
foreach (ManagementObject objMgtObj i……
[/Quote]


谢谢你的回复,看了msdn,发现Win32_ComputerSystemProduct和计算机的软件及硬件有关,如果用户重装了系统,这个UUID会不会发生变化?如果变了,用起来就很不方便。
csat2004 2010-08-31
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 crackdung 的回复:]
这样加密有用?呵呵呵,能破解的难不了,不懂的,不加密也破解不了。







my blog
http://ufo-crackerx.blog.163.com/

[/Quote]



加密本来就没有绝对安全的,只是相对增加软件的安全性,在某种程度上防止一部分人去破解软件。弱弱的问一句,您有什么高招?
garfieldzf 2010-08-31
  • 打赏
  • 举报
回复
public static string GetCPUSerialNumber()
{
string cpuSerialNumber = string.Empty;
ManagementClass mc = new ManagementClass("Win32_Processor");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
cpuSerialNumber = mo["ProcessorId"].ToString();
break;
}
mc.Dispose();
moc.Dispose();
return cpuSerialNumber;
}

http://blog.csdn.net/allenle/archive/2007/08/24/1757863.aspx
likedefly 2010-08-31
  • 打赏
  • 举报
回复
可以采用多硬件序列号绑定模式嘛,比如硬盘,MAC和CUP一起呗,CUP的序列号不唯一,你咋加密
csat2004 2010-08-31
  • 打赏
  • 举报
回复
我现在依然得不到cpu的序列号,只能得到cpu的编号(同一批出厂的cpu编号相同),所以我打算采用cpu编号+HDD序列号的方法进行加密。下面是我获取HDD序列号的方法(网上大部分代码获取的都是HDD的型号而非序列号):

public static string GetComputerId()
{
string sHddID = "";

//获取磁盘驱动器序列号
ManagementClass hddObject = new ManagementClass("Win32_PhysicalMedia");
ManagementObjectCollection hddInfo = hddObject.GetInstances();
foreach (ManagementObject mo in hddInfo)
{
sHddID = mo.Properties["SerialNumber"].Value.ToString().Trim();
}
return (sHddID);
}



虽然现在我采用了这种方法,但我还是很想知道如何可以获取cpu的序列号,如果有哪位高人知道,麻烦指点一下。谢谢!
华仔lugl 2010-08-31
  • 打赏
  • 举报
回复
学习一下,要学的东西实在太多太多!!
crackdung 2010-08-30
  • 打赏
  • 举报
回复
这样加密有用?呵呵呵,能破解的难不了,不懂的,不加密也破解不了。







my blog
http://ufo-crackerx.blog.163.com/
timtong 2010-08-30
  • 打赏
  • 举报
回复
马克是也
guojh021 2010-08-30
  • 打赏
  • 举报
回复
取经~~~~
csat2004 2010-08-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jn713 的回复:]
何必去拿cpu 的 取硬盘的很好。这个是硬盘的。觉得不重复,我之前做加密就是用cpu+硬盘

C# code

public String GetDiskSerialNumber()
{
ManagementObjectSearcher mos = new ManagementObjectSearcher();
mos……
[/Quote]
非常感谢你的回复,你的程序我实验了一下,得到的结果确实是唯一的。但是,我用专业的硬件检测工具读取的硬盘序列号与你的读取结果不符。
csat2004 2010-08-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 net_lover 的回复:]
代码
http://www.codeproject.com/KB/system/GetHardwareInformation.aspx
[/Quote]
这篇文章我已看过,曾经也做过实验,对于同一批出厂的cpu,读出的是相同的。谢谢!
csat2004 2010-08-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ly_longyue 的回复:]
C# code
/// <summary>
/// 获得CUP编号
/// </summary>
/// <returns>获得CUP编号</returns>
public String GetCpuID()
{
try
{
……
[/Quote]
你的代码和我上面的一模一样
wuyq11 2010-08-30
  • 打赏
  • 举报
回复
序列号不唯一public string getCpu()
{
string strCpu = null;
ManagementClass myCpu = new ManagementClass("win32_Processor");
ManagementObjectCollection myCpuConnection = myCpu.GetInstances();
foreach( ManagementObject myObject in myCpuConnection)
{
strCpu = myObject.Properties["Processorid"].Value.ToString();
break;
}
return strCpu;
}
孟子E章 2010-08-30
  • 打赏
  • 举报
回复
ManagementClass clsMgtClass = new ManagementClass("Win32_ComputerSystemProduct");
ManagementObjectCollection colMgtObjCol = clsMgtClass.GetInstances();
foreach (ManagementObject objMgtObj in colMgtObjCol)
{
MessageBox.Show(objMgtObj.Properties["IdentifyingNumber"].Value.ToString());
MessageBox.Show(objMgtObj.Properties["UUID"].Value.ToString());
}
白雪公猪905 2010-08-30
  • 打赏
  • 举报
回复
何必去拿cpu 的 取硬盘的很好。这个是硬盘的。觉得不重复,我之前做加密就是用cpu+硬盘

public String GetDiskSerialNumber()
{
ManagementObjectSearcher mos = new ManagementObjectSearcher();
mos.Query = new SelectQuery("Win32_DiskDrive", "", new string[] { "PNPDeviceID", "Signature" });
ManagementObjectCollection myCollection = mos.Get();
ManagementObjectCollection.ManagementObjectEnumerator em = myCollection.GetEnumerator();
em.MoveNext();
ManagementBaseObject moo = em.Current;
string id = moo.Properties["signature"].Value.ToString().Trim();
return id;
}

加载更多回复(4)

110,533

社区成员

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

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

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