涵蓋四大主題:讀取主機板序號、Award BIOS 密碼破解、BIOS 資訊完整傾印、取得 BIOS 日期。
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;
unit AwardBiosPas; interface uses Windows, SysUtils; function My_GetBiosPassword: String; implementation // ... 核心演算法:讀取 CMOS 0x1C/0x1D (超級密碼) 與 0x64/0x65 (用戶密碼) // 經過 CalcPossiblePassword 反推還原明文密碼 // 僅支援非 NT 核心系統 (Win9x),NT 系統無法直接存取 CMOS 端口 end.
支援 Windows 95/98/ME/NT/2K/XP 自動偵測平台並採用對應方法:
RomDump.com) 並執行導向檔案,讀取傾印資料Move 記憶體複製ntdll.dll 的 ZwOpenSection 開啟 DevicePhysicalMemory 核心物件,再 MapViewOfFile 映射讀取提供豐富輔助函式:GetRomBiosString、GetRomBiosWord、GetRomBiosDWord 等,方便解析特定位址資料。
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 適用但可能需權限。