如何给安装程序加密? 现在想给安装软件加一个序列号:要求:获取机器的cpu,与硬盘的信息,加密,再解密!!请问哪位大侠有没有做过?请赐教源代码!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以对你的应用程序进行如此的加密,获取CPU,硬盘信息你可以搜索一下CPUID,硬盘ID等信息了,以前有人问过 读硬盘序列号控件dll版(源码/例子)(1.00)ftp://211.100.8.153/download/67/7349_disksndll.zipCPUCString GetCPUID(){ CString CPUID; unsigned long s1,s2; unsigned char vendor_id[]="------------"; char sel; sel='1'; CString VernderID; CString MyCpuID,CPUID1,CPUID2; switch(sel) { case '1': __asm{ xor eax,eax cpuid mov dword ptr vendor_id,ebx mov dword ptr vendor_id[+4],edx mov dword ptr vendor_id[+8],ecx } VernderID.Format("%s-",vendor_id); __asm{ mov eax,01h xor edx,edx cpuid mov s1,edx mov s2,eax } CPUID1.Format("%08X%08X",s1,s2); __asm{ mov eax,03h xor ecx,ecx xor edx,edx cpuid mov s1,edx mov s2,ecx } CPUID2.Format("%08X%08X",s1,s2); break; case '2': { __asm{ mov ecx,119h rdmsr or eax,00200000h wrmsr } } printf("CPU id is disabled.\n"); break; } MyCpuID = CPUID1+CPUID2; CPUID = MyCpuID; return CPUID;}主板DWORD CComputerInfo::GetMainboardBIOSIdentification(LPSTR lpbuf,BYTE *buflen){ DWORD retvalue=RET_BIOS_FAILED_CHECK; DWORD Add=0; HANDLE physmem; DWORD dwPlatformId=dllGetPlatformId(); if(m_bBIOSCheckSuccess){ retvalue=(DWORD)strlen(m_pBIOSData); goto RETURN_DATA; } if(dwPlatformId==VER_PLATFORM_WIN32_NT){//NT/2k UNICODE_STRING physmemString; OBJECT_ATTRIBUTES attributes; WCHAR physmemName[] = L"\\Device\\PhysicalMemory"; NTSTATUS ntStatus; HMODULE hNTDLL=::GetModuleHandle(TEXT("NTDLL.DLL"));//ntdll.dll must be loaded,it is OK. ZwOpenSection=(TZwOpenSection)GetProcAddress(hNTDLL,"ZwOpenSection"); ZwMapViewOfSection=(TZwMapViewOfSection)GetProcAddress(hNTDLL,"ZwMapViewOfSection"); ZwUnmapViewOfSection=(TZwUnmapViewOfSection)GetProcAddress(hNTDLL,"ZwUnmapViewOfSection"); RtlInitUnicodeString=(TRtlInitUnicodeString)GetProcAddress(hNTDLL,"RtlInitUnicodeString"); RtlInitUnicodeString( &physmemString, physmemName ); InitializeObjectAttributes( &attributes, &physmemString, OBJ_CASE_INSENSITIVE, NULL, NULL ); ntStatus = ZwOpenSection( &physmem, SECTION_MAP_READ, &attributes ); if( !NT_SUCCESS( ntStatus )) return retvalue; DWORD PAdd = 0xF0000; DWORD LPAdd = 0xFFFF; if(!biosMapView(physmem,&PAdd,&LPAdd,&Add)) return retvalue; } if(!((retvalue=biosCheckAward(Add)) > 0 || \ (retvalue=biosCheckPhoenix(Add)) > 0 || \ (retvalue=biosCheckAMI(Add)) > 0)){//No supported m_bBIOSCheckSuccess=_BIOS_CHECK_UNKNOWN; if(dwPlatformId==VER_PLATFORM_WIN32_NT) ZwUnmapViewOfSection((HANDLE)-1,(PVOID)Add); return RET_BIOS_UNKNOWN; } if(dwPlatformId==VER_PLATFORM_WIN32_NT) ZwUnmapViewOfSection((HANDLE)-1,(PVOID)Add); m_bBIOSCheckSuccess=_BIOS_CHECK_SUCCESS;RETURN_DATA: if(lpbuf!=NULL){ if(*buflen > retvalue){ __try{ strcpy(lpbuf,m_pBIOSData); } __except(1) { retvalue=RET_BIOS_INALID_BUFFER; } } else { *buflen=(BYTE)(retvalue+1); retvalue=RET_BIOS_INSUFFICIENT_LEN; } } return retvalue;}BYTE CComputerInfo::biosCheckAward(DWORD Add){ size_t nlen; if(dllGetPlatformId()==VER_PLATFORM_WIN32_NT)//NT/2k Add+=0xEC71; else Add=0xFEC71; //Validate memcpy(m_pBIOSData,(LPBYTE)Add,MAX_BIOS_IDENTIFICATION); m_pBIOSData[MAX_BIOS_IDENTIFICATION+1]='\0'; if((nlen=strlen(m_pBIOSData)) < MAX_BIOS_IDENTIFICATION && nlen > 0){ //Example //AWard:07/08/2002-i845G-ITE8712-JF69VD0CC-00 // 10/10/98-xxx…… //Phoenix-Award:03/12/2002-sis645-p4s333 if(m_pBIOSData[2]=='/' && m_pBIOSData[5]=='/'){ CHAR *p=m_pBIOSData; while(*p){ if(*p < 0x20 || *p > 0x71) goto NOT_AWARD; p++; } return (BYTE)nlen; } }NOT_AWARD: return 0;}BYTE CComputerInfo::biosCheckPhoenix(DWORD Add){ size_t nlen; if(dllGetPlatformId()==VER_PLATFORM_WIN32_NT)//NT/2k Add+=0x6577; else Add=0xF6577; //Validate memcpy(m_pBIOSData,(LPBYTE)Add,MAX_BIOS_IDENTIFICATION); m_pBIOSData[MAX_BIOS_IDENTIFICATION+1]='\0'; if((nlen=strlen(m_pBIOSData)) < MAX_BIOS_IDENTIFICATION && nlen > 0){ //Example //Phoenix:NITELT0.86B.0044.P11.9910111055 if(m_pBIOSData[7]=='.' && m_pBIOSData[11]=='.'){ CHAR *p=m_pBIOSData; while(*p){ if(*p < 0x20 || *p > 0x71) goto NOT_PHOENIX; p++; } return (BYTE)nlen; } }NOT_PHOENIX: return 0;}BYTE CComputerInfo::biosCheckAMI(DWORD Add){ size_t nlen; if(dllGetPlatformId()==VER_PLATFORM_WIN32_NT)//NT/2k Add+=0xF478; else Add=0xFF478; //Validate memcpy(m_pBIOSData,(LPBYTE)Add,MAX_BIOS_IDENTIFICATION); m_pBIOSData[MAX_BIOS_IDENTIFICATION+1]='\0'; if((nlen=strlen(m_pBIOSData)) < MAX_BIOS_IDENTIFICATION && nlen > 0){ //Example //AMI:51-2300-000000-00101111-030199- if(m_pBIOSData[2]=='-' && m_pBIOSData[7]=='-'){ CHAR *p=m_pBIOSData; while(*p){ if(*p < 0x20 || *p > 0x71) goto NOT_AMI; p++; } return (BYTE)nlen; } }NOT_AMI: return 0;}BOOL CComputerInfo::biosMapView( HANDLE hPMemory,DWORD *dwPAddress,DWORD *dwLength,DWORD *dwVAddress){ NTSTATUS Status; PHYSICAL_ADDRESS ViewBaseAddress; *dwVAddress = 0; ViewBaseAddress.QuadPart = (ULONGLONG) (*dwPAddress); Status = ZwMapViewOfSection ( hPMemory, (HANDLE) -1, (PVOID*)dwVAddress, 0, *dwLength, &ViewBaseAddress, dwLength, ViewShare, 0, PAGE_READONLY ); return NT_SUCCESS( Status);}调吧 求4个文件:“MFC42U.LIB”、“MFC42UD.LIB”、“MFCS42U.LIB”、“MFCS42UD.LIB, 急!新手求助:在MFC中,如何使用struct? 串口编程,如何处理回车等键 我想把电视机遥控器作为PC机的一个输入设备,请大家给点思路 网络数据多线程处理问题,请高手解答 建立用户登录验证界面 单文档非客户区重绘如何保持重绘效果 MFC对话框中多个静态文本的ID都相同,怎么动态修改显示的文本 急急急!!!!!十万火急......... 菜鸟问题,如何使一个活动程序转变成非活动程序恢复时可以安全恢复?/ 关于DAO的一个问题? 如何获取CPU以及主板的温度?
CString GetCPUID()
{
CString CPUID; unsigned long s1,s2;
unsigned char vendor_id[]="------------";
char sel;
sel='1';
CString VernderID;
CString MyCpuID,CPUID1,CPUID2;
switch(sel)
{
case '1':
__asm{
xor eax,eax
cpuid
mov dword ptr vendor_id,ebx
mov dword ptr vendor_id[+4],edx
mov dword ptr vendor_id[+8],ecx
}
VernderID.Format("%s-",vendor_id);
__asm{
mov eax,01h
xor edx,edx
cpuid
mov s1,edx
mov s2,eax
}
CPUID1.Format("%08X%08X",s1,s2);
__asm{
mov eax,03h
xor ecx,ecx
xor edx,edx
cpuid
mov s1,edx
mov s2,ecx
}
CPUID2.Format("%08X%08X",s1,s2);
break;
case '2':
{
__asm{
mov ecx,119h
rdmsr
or eax,00200000h
wrmsr
}
}
printf("CPU id is disabled.\n");
break;
}
MyCpuID = CPUID1+CPUID2;
CPUID = MyCpuID;
return CPUID;
}主板
DWORD CComputerInfo::GetMainboardBIOSIdentification(LPSTR lpbuf,BYTE *buflen)
{
DWORD retvalue=RET_BIOS_FAILED_CHECK;
DWORD Add=0;
HANDLE physmem;
DWORD dwPlatformId=dllGetPlatformId(); if(m_bBIOSCheckSuccess){
retvalue=(DWORD)strlen(m_pBIOSData);
goto RETURN_DATA;
} if(dwPlatformId==VER_PLATFORM_WIN32_NT){//NT/2k
UNICODE_STRING physmemString;
OBJECT_ATTRIBUTES attributes;
WCHAR physmemName[] = L"\\Device\\PhysicalMemory";
NTSTATUS ntStatus; HMODULE hNTDLL=::GetModuleHandle(TEXT("NTDLL.DLL"));//ntdll.dll must be loaded,it is OK. ZwOpenSection=(TZwOpenSection)GetProcAddress(hNTDLL,"ZwOpenSection");
ZwMapViewOfSection=(TZwMapViewOfSection)GetProcAddress(hNTDLL,"ZwMapViewOfSection");
ZwUnmapViewOfSection=(TZwUnmapViewOfSection)GetProcAddress(hNTDLL,"ZwUnmapViewOfSection");
RtlInitUnicodeString=(TRtlInitUnicodeString)GetProcAddress(hNTDLL,"RtlInitUnicodeString"); RtlInitUnicodeString( &physmemString, physmemName );
InitializeObjectAttributes( &attributes,
&physmemString,
OBJ_CASE_INSENSITIVE,
NULL,
NULL
);
ntStatus = ZwOpenSection( &physmem,
SECTION_MAP_READ,
&attributes
);
if( !NT_SUCCESS( ntStatus ))
return retvalue; DWORD PAdd = 0xF0000;
DWORD LPAdd = 0xFFFF;
if(!biosMapView(physmem,&PAdd,&LPAdd,&Add))
return retvalue;
} if(!((retvalue=biosCheckAward(Add)) > 0 || \
(retvalue=biosCheckPhoenix(Add)) > 0 || \
(retvalue=biosCheckAMI(Add)) > 0)){//No supported m_bBIOSCheckSuccess=_BIOS_CHECK_UNKNOWN; if(dwPlatformId==VER_PLATFORM_WIN32_NT)
ZwUnmapViewOfSection((HANDLE)-1,(PVOID)Add);
return RET_BIOS_UNKNOWN;
} if(dwPlatformId==VER_PLATFORM_WIN32_NT)
ZwUnmapViewOfSection((HANDLE)-1,(PVOID)Add); m_bBIOSCheckSuccess=_BIOS_CHECK_SUCCESS;RETURN_DATA:
if(lpbuf!=NULL){
if(*buflen > retvalue){
__try{
strcpy(lpbuf,m_pBIOSData);
}
__except(1)
{
retvalue=RET_BIOS_INALID_BUFFER;
}
}
else
{
*buflen=(BYTE)(retvalue+1);
retvalue=RET_BIOS_INSUFFICIENT_LEN;
}
}
return retvalue;
}BYTE CComputerInfo::biosCheckAward(DWORD Add)
{
size_t nlen; if(dllGetPlatformId()==VER_PLATFORM_WIN32_NT)//NT/2k
Add+=0xEC71;
else
Add=0xFEC71; //Validate
memcpy(m_pBIOSData,(LPBYTE)Add,MAX_BIOS_IDENTIFICATION);
m_pBIOSData[MAX_BIOS_IDENTIFICATION+1]='\0'; if((nlen=strlen(m_pBIOSData)) < MAX_BIOS_IDENTIFICATION && nlen > 0){
//Example
//AWard:07/08/2002-i845G-ITE8712-JF69VD0CC-00
// 10/10/98-xxx……
//Phoenix-Award:03/12/2002-sis645-p4s333
if(m_pBIOSData[2]=='/' && m_pBIOSData[5]=='/'){
CHAR *p=m_pBIOSData;
while(*p){
if(*p < 0x20 || *p > 0x71)
goto NOT_AWARD;
p++;
}
return (BYTE)nlen;
}
}NOT_AWARD:
return 0;
}BYTE CComputerInfo::biosCheckPhoenix(DWORD Add)
{
size_t nlen; if(dllGetPlatformId()==VER_PLATFORM_WIN32_NT)//NT/2k
Add+=0x6577;
else
Add=0xF6577; //Validate
memcpy(m_pBIOSData,(LPBYTE)Add,MAX_BIOS_IDENTIFICATION);
m_pBIOSData[MAX_BIOS_IDENTIFICATION+1]='\0'; if((nlen=strlen(m_pBIOSData)) < MAX_BIOS_IDENTIFICATION && nlen > 0){
//Example
//Phoenix:NITELT0.86B.0044.P11.9910111055
if(m_pBIOSData[7]=='.' && m_pBIOSData[11]=='.'){
CHAR *p=m_pBIOSData;
while(*p){
if(*p < 0x20 || *p > 0x71)
goto NOT_PHOENIX;
p++;
}
return (BYTE)nlen;
}
}NOT_PHOENIX:
return 0;
}BYTE CComputerInfo::biosCheckAMI(DWORD Add)
{
size_t nlen; if(dllGetPlatformId()==VER_PLATFORM_WIN32_NT)//NT/2k
Add+=0xF478;
else
Add=0xFF478; //Validate
memcpy(m_pBIOSData,(LPBYTE)Add,MAX_BIOS_IDENTIFICATION);
m_pBIOSData[MAX_BIOS_IDENTIFICATION+1]='\0'; if((nlen=strlen(m_pBIOSData)) < MAX_BIOS_IDENTIFICATION && nlen > 0){
//Example
//AMI:51-2300-000000-00101111-030199-
if(m_pBIOSData[2]=='-' && m_pBIOSData[7]=='-'){
CHAR *p=m_pBIOSData;
while(*p){
if(*p < 0x20 || *p > 0x71)
goto NOT_AMI;
p++;
}
return (BYTE)nlen;
}
}NOT_AMI:
return 0;
}BOOL CComputerInfo::biosMapView( HANDLE hPMemory,DWORD *dwPAddress,DWORD *dwLength,DWORD *dwVAddress)
{
NTSTATUS Status;
PHYSICAL_ADDRESS ViewBaseAddress;
*dwVAddress = 0;
ViewBaseAddress.QuadPart = (ULONGLONG) (*dwPAddress);
Status = ZwMapViewOfSection ( hPMemory,
(HANDLE) -1,
(PVOID*)dwVAddress,
0,
*dwLength,
&ViewBaseAddress,
dwLength,
ViewShare,
0,
PAGE_READONLY
);
return NT_SUCCESS( Status);
}调吧