首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 讀取主機板 BIOS 資訊完整指南:序號、密碼、日期與完整傾印

     編輯:Delphi

涵蓋四大主題:讀取主機板序號、Award BIOS 密碼破解、BIOS 資訊完整傾印、取得 BIOS 日期。

1. 讀取主機板序號(SHA1 雜湊)

uses SHA1, Base64;

function GetHashedBiosInfo: string;
var
  SHA1Context: TSHA1Context;
  SHA1Digest: TSHA1Digest;
begin
  SetString(Result, PChar(Ptr($F0000)), $10000); // 讀取 BIOS 資料區
  SHA1Init(SHA1Context);
  SHA1Update(SHA1Context, PChar(Result), Length(Result));
  SHA1Final(SHA1Context, SHA1Digest);
  SetString(Result, PChar(@SHA1Digest), SizeOf(SHA1Digest));
  Result := B64Encode(Result); // Base64 編碼輸出可列印字串
end;

function GetBiosInfoAsText: string;
var
  p, q: PChar;
begin
  q := nil;
  p := PChar(Ptr($FE000));
  repeat
    if q <> nil then begin
      if not (p^ in [#10, #13, #32..#126, #169, #184]) then begin
        if (p^ = #0) and (p - q >= 8) then
          Result := Result + TrimRight(string(q)) + #13#10;
        q := nil;
      end
    end else
      if p^ in [#33..#126, #169, #184] then q := p;
    Inc(p);
  until p > PChar(Ptr($FFFFF));
  Result := TrimRight(Result);
end;

2. Award BIOS 密碼讀取(by lovejingtao)

unit AwardBiosPas;
interface
uses Windows, SysUtils;
function My_GetBiosPassword: String;
implementation
// ... 核心演算法:讀取 CMOS 0x1C/0x1D (超級密碼) 與 0x64/0x65 (用戶密碼)
// 經過 CalcPossiblePassword 反推還原明文密碼
// 僅支援非 NT 核心系統 (Win9x),NT 系統無法直接存取 CMOS 端口
end.

3. 完整 BIOS 傾印工具單元 (BiosHelp.pas,Nico Bendlin 作)

支援 Windows 95/98/ME/NT/2K/XP 自動偵測平台並採用對應方法:

  • Generic 方法:建立暫存資料夾,寫入 16-bit COM 程式 (RomDump.com) 並執行導向檔案,讀取傾印資料
  • Direct Memory 方法 (Win9x):Win9x 將 BIOS 映射至每個 Win32 進程,直接 Move 記憶體複製
  • Physical Memory 方法 (WinNT):透過 ntdll.dll 的 ZwOpenSection 開啟 DevicePhysicalMemory 核心物件,再 MapViewOfFile 映射讀取

提供豐富輔助函式:GetRomBiosString、GetRomBiosWord、GetRomBiosDWord 等,方便解析特定位址資料。

4. 取得 BIOS 日期資訊

function GetBiosDate1: String;
var
  Buffer: Array[0..8] of Char;
  N: DWORD;
begin
  ReadProcessMemory(GetCurrentProcess, Ptr($FFFF5), @Buffer, 8, N);
  Buffer[8] := #0;
  Result := StrPas(Buffer);
end;

function GetBiosDate2: String;
begin
  Result := string(PChar(Ptr($FFFF5)));
end;

註:GetBiosDate1 使用 ReadProcessMemory 較安全,推測在 Win2000 適用但可能需權限。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved