首页
社区
课程
招聘
如何才能读取计算机的唯一信息
发表于: 2007-1-10 21:37 6288

如何才能读取计算机的唯一信息

2007-1-10 21:37
6288
要写个程序,需要读取属于计算机的唯一信息,用了cpuid,用3读processor #,但读出的号码在两台计算机上试了一下,是相同的.
不知道该如何处理这个问题,是不是要用cpuid读取一些其他信息,再进行一些操作来获得那个唯一的信息?
谢谢

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 297
活跃值: (10)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
2
如果有网卡的话,获取网卡物理地址也行。
2007-1-11 09:06
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
能否告知一下具体该如何操作?
谢谢
2007-1-11 11:04
0
雪    币: 297
活跃值: (10)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
4
百度搜下就有了。
#include <stdio.h>
#include <windows.h>
#include <Nb30.h>


#pragma comment(lib, "Netapi32.lib")

int getMAC(char * mac) 
{ 
	NCB ncb; 
	
	typedef struct _ASTAT_ 
	{ 
		ADAPTER_STATUS adapt; 
		NAME_BUFFER NameBuff [30]; 
	} ASTAT, * PASTAT; 
	ASTAT Adapter; 
	
	
	typedef struct _LANA_ENUM 
	{ 
		UCHAR length; 
		UCHAR lana[MAX_LANA]; 
	} LANA_ENUM ; 
	LANA_ENUM lana_enum; 
	
	
	UCHAR uRetCode; 
	memset( &ncb, 0, sizeof(ncb) ); 
	memset( &lana_enum, 0, sizeof(lana_enum)); 
	
	ncb.ncb_command = NCBENUM; 
	ncb.ncb_buffer = (unsigned char *) &lana_enum; 
	ncb.ncb_length = sizeof(LANA_ENUM); 
	uRetCode = Netbios( &ncb ); 
	if( uRetCode != NRC_GOODRET ) 
		return uRetCode ; 
	
	for( int lana=0; lana<lana_enum.length; lana++ ) 
	{ 
		ncb.ncb_command = NCBRESET; 
		ncb.ncb_lana_num = lana_enum.lana[lana]; 
		uRetCode = Netbios( &ncb ); 
		if( uRetCode == NRC_GOODRET ) 
			break ; 
	} 
	if( uRetCode != NRC_GOODRET ) 
		return uRetCode; 
	
	memset( &ncb, 0, sizeof(ncb) ); 
	ncb.ncb_command = NCBASTAT; 
	ncb.ncb_lana_num = lana_enum.lana[0]; 
	strcpy( (char* )ncb.ncb_callname, "*" ); 
	ncb.ncb_buffer = (unsigned char *) &Adapter; 
	ncb.ncb_length = sizeof(Adapter); 
	uRetCode = Netbios( &ncb ); 
	if( uRetCode != NRC_GOODRET ) 
		return uRetCode ; 
	sprintf(mac,"%02X-%02X-%02X-%02X-%02X-%02X", 
		Adapter.adapt.adapter_address[0], 
		Adapter.adapt.adapter_address[1], 
		Adapter.adapt.adapter_address[2], 
		Adapter.adapt.adapter_address[3], 
		Adapter.adapt.adapter_address[4], 
		Adapter.adapt.adapter_address[5] ); 
	return 0; 
}

int main(void)
{
	char szMac[256] = {'\0'};
	getMAC(szMac);
	printf("%s\n", szMac);
	return 0;
}
2007-1-11 14:10
0
雪    币: 235
活跃值: (134)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
网卡地址不行,你如果要写注册程序,很容易被修改掉的.最好综合上硬盘等信息
2007-1-11 16:02
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
现在没有办法确认电脑的唯一性
2007-3-10 12:56
0
雪    币: 0
活跃值: (116)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
......读硬件编号啊
2007-3-10 13:26
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
用硬盘的编号,我一直都是这么用的,哈哈哈
2007-3-21 11:50
0
雪    币: 247
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
网卡地址肯定不行, 那个是在注册表里的,可以修改的
硬盘的编号也不是唯一的,
特别是现在有sata的新硬盘, 序列号不知道怎么读
2007-3-21 14:38
0
雪    币: 721
活跃值: (350)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
10
把这几个及其他硬件信息综合在一块计算其SHA1值。
2007-3-21 15:00
0
游客
登录 | 注册 方可回帖
返回
//