📄 getbiosid.txt
字号:
return FALSE;
}
if( !(NtMapViewOfSection = (NTSTATUS (__stdcall *)(IN HANDLE,
IN HANDLE,
IN OUT PVOID *,
IN ULONG ,
IN ULONG ,
IN OUT PLARGE_INTEGER ,
IN OUT PULONG,
IN SECTION_INHERIT ,
IN ULONG ,
IN ULONG )) GetProcAddress( GetModuleHandle("ntdll.dll"),"NtMapViewOfSection" )) )
{
return FALSE;
}
if( !(RtlNtStatusToDosError = (ULONG (__stdcall *)(NTSTATUS)) GetProcAddress( GetModuleHandle("ntdll.dll"),"RtlNtStatusToDosError" )) )
{
return FALSE;
}
return TRUE;
}
void CReadBiosIdClass::PrintError(char *message, NTSTATUS status)
{
char *errMsg;
FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL, RtlNtStatusToDosError( status ),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &errMsg, 0, NULL );
TCHAR errMessage[MAX_PATH];
sprintf(errMessage, _T("%s: %s"), message, errMsg);
//printf("", );
LocalFree( errMsg );
AfxMessageBox(errMessage);
}
CString CReadBiosIdDlg::GetBiosId()
{
HANDLE physmem;
DWORD vaddress, paddress;
DWORD length=1;
CString strId;
char ch;
if(!ReadBiosIdClass.LocateNtdllEntryPoints())
{
AfxMessageBox("Unable to locate NTDLL entry points!");
return -1;
}
//
// Open physical memory
//
if( !(physmem = ReadBiosIdClass.OpenPhysicalMemory()))
{
return -1;
}
//
// Enter the command loop
//
//printf("Enter values in hexadecimal. Enter 'q' to quit.\n");
/*while( 1 )
{
printf("\nAddress: " ); fflush( stdout );
gets( input );
if( input[0] == 'q' || input[0] == 'Q' )
break;
sscanf( input, "%x", &paddress );
printf("Bytes: "); fflush( stdout );
gets( input );
if( input[0] == 'q' || input[0] == 'Q' )
break;
sscanf( input, "%x", &length );
//
// Map it
//
if( !MapPhysicalMemory( physmem, &paddress, &length,&vaddress ))
continue;
//
// Dump it
//
lines = 0;
for( i = 0; i < length; i += BYTESPERLINE )
{
printf("%08X: ", paddress + i );
for( j = 0; j < BYTESPERLINE; j++ )
{
if( i+j == length ) break;
if( j == BYTESPERLINE/2 )
printf("-" );
printf("%02X ", *(PUCHAR) (vaddress + i +j ));
}
for( j = 0; j < BYTESPERLINE; j++ )
{
if( i+j == length ) break;
ch = *(PUCHAR) (vaddress + i +j );
if( __iscsym( ch ) || isalnum( ch ) || ch == ' ')
{
printf("%c", ch);
}
else
{
printf("." );
}
}
printf("\n");
if( lines++ == LINESPERSCREEN )
{
printf("-- more -- ('q' to abort)" ); fflush(stdout);
ch = getchar();
if( ch == 'q' || ch == 'Q' )
{
fflush( stdin );
break;
}
lines = 0;
}
}
//
// Unmap the view
//
UnmapPhysicalMemory( vaddress );
}*/
//
// Close physical memory section
//
int i=0;
paddress=0x000fec71;//Award
ReadBiosIdClass.MapPhysicalMemory( physmem, &paddress, &length,&vaddress ) ;
paddress=0x000fec71-0x000fe000;
if(ReadBiosIdClass.biosCheckAward(vaddress+paddress))
{
strId = _T("Is Award Bios! ");
while(i<50)
{
if(*(PUCHAR)(vaddress+paddress+i) > 0x20 && *(PUCHAR)(vaddress+paddress+i) < 0x71)
{
ch = *(PCHAR)(vaddress+paddress+i);
strId = strId + ch;
//printf("%c", ch);
}
else
{
//printf("\r\n");
break;
}
i++;
}
}
paddress=0x000ff478;//AMI
ReadBiosIdClass.MapPhysicalMemory( physmem, &paddress, &length,&vaddress ) ;
paddress=0x000ff478-0x000ff000;
if(ReadBiosIdClass.biosCheckAMI(vaddress+paddress))
{
strId = _T("Is AMI Bios! ");
while(i<50)
{
if(*(PUCHAR)(vaddress+paddress+i) > 0x20 && *(PUCHAR)(vaddress+paddress+i) < 0x71)
{
ch = *(PCHAR)(vaddress+paddress+i);
strId = strId + ch;
//printf("%c", ch);
}
else
{
//printf("\r\n");
break;
}
i++;
}
}
paddress=0x000ff478;//AMI
ReadBiosIdClass.MapPhysicalMemory( physmem, &paddress, &length,&vaddress ) ;
paddress=0x000ff478-0x000ff000;
if(ReadBiosIdClass.biosCheckAMI(vaddress+paddress))
{
while(i<50)
{
if(*(PUCHAR)(vaddress+paddress+i) > 0x20 && *(PUCHAR)(vaddress+paddress+i) < 0x71)
{
ch = *(PCHAR)(vaddress+paddress+i);
strId = strId + ch;
//printf("%c", ch);
}
else
{
printf("\r\n");
break;
}
i++;
}
}
paddress=0x000f6577;//Phoenix
ReadBiosIdClass.MapPhysicalMemory( physmem, &paddress, &length,&vaddress ) ;
paddress=0x000f6577-0x000f6000;
if(ReadBiosIdClass.biosCheckPhoenix(vaddress+paddress))
{
strId = _T("Is Phoenix Bios! ");
while(i<50)
{
if(*(PUCHAR)(vaddress+paddress+i) > 0x20 && *(PUCHAR)(vaddress+paddress+i) < 0x71)
{
ch = *(PCHAR)(vaddress+paddress+i);
strId = strId + ch;
//printf("%c", ch);
}
else
{
//printf("\r\n");
break;
}
i++;
}
}
paddress=0x000f7196;//Phoenix
ReadBiosIdClass.MapPhysicalMemory( physmem, &paddress, &length,&vaddress ) ;
paddress=0x000f7196-0x000f7000;
if(ReadBiosIdClass.biosCheckPhoenix(vaddress+paddress))
{
strId = _T("Is Phoenix Bios! ");
while(i<50)
{
if(*(PUCHAR)(vaddress+paddress+i) > 0x20 && *(PUCHAR)(vaddress+paddress+i) < 0x71)
{
ch = *(PCHAR)(vaddress+paddress+i);
strId = strId + ch;
//printf("%c", ch);
}
else
{
//printf("\r\n");
break;
}
i++;
}
}
paddress=0x000f7550;//Phoenix
ReadBiosIdClass.MapPhysicalMemory( physmem, &paddress, &length,&vaddress ) ;
paddress=0x000f7550-0x000f7000;
if(ReadBiosIdClass.biosCheckPhoenix(vaddress+paddress))
{
strId = _T("Is Phoenix Bios! ");
while(i<50)
{
if(*(PUCHAR)(vaddress+paddress+i) > 0x20 && *(PUCHAR)(vaddress+paddress+i) < 0x71)
{
ch = *(PCHAR)(vaddress+paddress+i);
strId = strId + ch;
//printf("%c", ch);
}
else
{
//printf("\r\n");
break;
}
i++;
}
}
CloseHandle(physmem);
return strId;
}
接上
调用方法:
CString strBiosId = GetBiosId();
AfxMessageBox(strBiosId);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -