1. Baca nomor seri motherboard
2. Baca Kata Sandi BIOS Penghargaan
3. Baca Informasi BIOS
4. Dapatkan informasi tanggal BIOS
=========================================
1. Baca nomor seri motherboard
menggunakan sha1, base64;
fungsi gethashedbiosinfo: string;
var
Sha1context: tsha1context;
Sha1digest: tsha1digest;
Mulai
// Dapatkan data BIOS
SetString (hasil, pchar (ptr ($ f0000)), $ 10000);
// hash string
Sha1init (sha1context);
Sha1update (sha1context, pchar (hasil), panjang (hasil));
Sha1final (sha1context, sha1digest);
SetString (hasil, pchar (@sha1digest), sizeof (sha1digest));
// kembalikan string hash yang dikodekan dalam karakter yang dapat dicetak
Hasil: = B64Encode (Hasil);
akhir;
fungsi getBiosInfoastext: string;
var
P, T: PCHAR;
Mulai
T: = nil;
p: = pchar (ptr ($ fe000));
mengulang
Jika q <> nil maka mulailah
Jika tidak (p^ di [ #10, #13, #32 .. #126, #169, #184]) Kemudian mulailah
/t if (p^ = #0) dan (p - q> = 8) Kemudian mulailah
/t Hasil: = hasil + trimright (string (q)) + #13 #10;
/cenderung;
/tq: = nil;
akhir;
akhir yang lain
Jika P^ di [ #33 .. #126, #169, #184] Kemudian
/tq: = p;
Inc (p);
sampai p> pchar (ptr ($ fffff));
Hasil: = trimright (hasil);
akhir;
Prosedur TFORM1.FORMCREATE (Pengirim: Tobject);
Mulai
Memo1.lines.text: = getBiosInfoastext;
akhir;
==========================================
2. Penghargaan Membaca Kata Sandi BIOS (itu harus menjadi artikel Jingtao, tetapi ID tidak direkam)
Unit Awardbiospas;
// Tulis dengan lovejingtao
//http://www.138soft.com
antarmuka
menggunakan windows, sysutils;
function my_getbiospassword: string;
Pelaksanaan
fungsi calcpossiblePassword (kata sandivalue: word): string;
var
I: byte;
C: Char;
S: String [8];
Mulai
I: = 0;
Sedangkan Nilai Kata Sandi <> 0
Mulai
Inc (i);
Jika $ 263> nilai kata sandi maka
Mulai
/t Jika $ 80> Nilai kata sandi lalu
/t s : = char (kata sandi)
/t lain jika $ b0> nilai kata sandi lalu
/t s : = char (nilai kata sandi dan $ 77)
/lain jika $ 11d> Nilai kata sandi lalu
/t s : = char ($ 30 atau (nilai kata sandi dan $ 0f))
/t lain jika $ 114> Nilai kata sandi lalu
/t mulai
/t s : = char ($ 64 atau (nilai kata sandi dan $ 0f));
/t jika '' 0 ''> s
/t s : = char (byte (s ) + 8);
/cenderung
/lain jika $ 1c2> Nilai kata sandi lalu
/t s : = char ($ 70 atau (nilai kata sandi dan $ 03))
/lain jika $ 1e4> Nilai kata sandi lalu
/t s : = char ($ 30 atau (nilai kata sandi dan $ 03)))
/t lainnya
/t mulai
/t s : = char ($ 70 atau (nilai kata sandi dan $ 0f));
/t jika '' z '' <s
/t s : = char (byte (s ) - 8);
/cenderung;
akhir
kalau tidak
S : = char ($ 30 atau (nilai kata sandi dan $ 3));
Kata sandi: = (kata sandivalue - byte (s )) shr 2;
akhir;
S [0]: = char (i);
Nilai kata sandi: = i shr 1;
Sedangkan nilai kata sandi <saya lakukan
Mulai {ini harus dilakukan karena penghargaan mulai menghitung dengan huruf terakhir}
C: = s [byte (s [0]) - i + 1];
S [byte (s [0]) - i + 1]: = s ;
S : = C;
Dec (i);
akhir;
CalcpossiblePassword: = s;
akhir;
fungsi readcmos (off: byte): byte;
var
Nilai: byte;
Mulai
Asm
XOR AX, AX
Mov Al, Off
Keluar 70h, al
di Al, 71h
Nilai MOV, Al
akhir;
readcmos: = nilai;
akhir;
function my_getbiospassword: string;
var
superpw, userpw: word;
S: string;
Mulai
Jika win32platform <> ver_platform_win32_nt maka // bukan nt
Mulai
pchar (@Superpw) [0]: = char (readcmos ($ 1c));
pchar (@Superpw) [1]: = char (readcmos ($ 1d));
pchar (@UserPw) [0]: = char (readcmos ($ 64));
pchar (@UserPw) [1]: = char (readcmos ($ 65));
S: = '' kata sandi superuser adalah: ''+calcpossiblePassword (superpw)+#13+'' Kata sandi pengguna adalah: ''+calcpoSsiblePassword (userpw);
Hasil: = S;
akhir
kalau tidak
Hasil: = '' Sistem pengguna adalah NT, dan kata sandi biso tidak dapat diperoleh! '';
akhir;
akhir.
==========================================
3. Baca Informasi BIOS
{Program ini menggunakan platform Windows 95/2000, secara otomatis mendeteksi jenis sistem, dan kemudian membuat panggilan yang berbeda}
menggunakan bioshelp;
Prosedur TFORM1.BUTTON1CLICK (Pengirim: Tobject);
var
Dump: trombiosdump;
I: Integer;
Mulai
Readrombios (dump, rrbmautomatic);
untuk i: = 1 hingga $ 000fffff - $ 000F0000 - 1 lakukan
Memo1.lines.add (inttoHex (dump [i + $ 000fffff], 2));
akhir;
(*********************************************** **********************************
*/t/t/t/t/t/t/t/t/t/t/t/t *
* Bantuan BIOS - Baca ROM BIOS di Windows 95/98/SE/ME/NT/2K/XP/T/T *
*/t/t/t/t/t/t/t/t/t/t/t/t *
* Hak Cipta (C) 2001, Nico Bendlin ([email protected])/t/t/t *
*/t/t/t/t/t/t/t/t/t/t/t/t *
* Kompiler: Delphi 4.03/5.01/6.00/t/t/t/t/t/t/t *
* Versi: 1.03, 2001-09-02/t/t/t/t/t/t/t/t *
*/t/t/t/t/t/t/t/t/t/t/t/t *
********************************************** ******* ***********************************)
{Postum Scriptum: Maaf untuk bahasa Inggris yang buruk, saya menulisnya dengan cepat}
unit bioshelp;
{$ Align on}
{$ Minenumsize 4}
antarmuka
penggunaan
Windows;
jenis
Prombiosdump = ^trombiosdump;
Trombiosdump = array [$ 000F0000 .. $ 000ffff] byte;
jenis
Treadrombiosmethod = (
RRBMAUTOMATION,/T/T/T/T/T/T {Autodetect Jenis OS dan Gunakan metode yang tepat}
RRBMGeneric,/t/t/t/t/t/t {menggunakan program COM 16-bit untuk membuang bios}
rrbmmemory,/t/t/t/t/t {baca dari memori (win9x)/t/t}
rrbmphysical/t/t/t/t/t {baca dari objek memori fisik (winnt)}
);
fungsi readrombios (var dump: trombiosdump; metode: treadrombiosmethod;
Timeout: DWORD = Infinite): Boolean;
fungsi getRombiosbuffer (const dump: trombiosdump; alamat: pointer;
var buffer;
fungsi getRombiosstring (const dump: trombiosdump; alamat: pointer): string;
fungsi getrombioslonglong (const dump: trombiosdump; alamat: pointer): longlong;
fungsi getRombiosdword (const dump: trombiosdump; alamat: pointer): dword;
fungsi getRombiosWord (const dump: trombiosdump; alamat: pointer): word;
fungsi getRombiosbyte (const dump: trombiosdump; alamat: pointer): byte;
Pelaksanaan
{################################################## #################################################### ################################################### ##
#/t/t/t/t/t/t/t/t/t/t/t/t # #
#/t/t/t Metode generik/t/t/t/t #
#/t/t/t/t/t/t/t/t/t/t/t/t # #
# Buat folder sementara, simpan program COM 16bit (romdump.com) ke dalamnya, #
# Jalankan program yang dialihkan ke sebuah file (rom.dmp, romdump.com cukup mencampakkan #
# Memory Range F000: 0000-F000: FFFF ke stdout), baca file dump ke buffer, #
# dan akhirnya membersihkan semua file dan direktori sementara./t/t #
#/t/t/t/t/t/t/t/t/t/t/t/t # #
# (fungsi romdumpcode adalah x86 spesifik, yang saya tulis untuk menghasilkan 16-bit #
# Kode dengan bantuan kompiler Delphi 23-bit, jangan pernah mencoba menjalankan #
# Pseudo-Code dalam program Anda!
#/t/t/t/t/t/t/t/t/t/t/t/t # #
################################################### #################################################### #######################################}}
{ * Internal * - Kode pseudo 16 -bit}
jenis
PromDumpCodeInfo = ^tromdumpcodeInfo;
TromdumpcodeInfo = (rdcistart, rdciend, rdcisize);
function _romdumpcode (info: tromdumpcodeInfo): pointer;
var
Codestart: pointer;
Codeend: Pointer;
Mulai
Asm
/t jmp @@ end
/t { * mulai * kode 16-bit}
/t { - Jangan pernah menggunakannya di program Anda! -}
/t {com yang menulis rom-bios ke stdout}
@@Awal:
/t {dump f000: 0000-f000: fffe}
/t xor edx, edx // ds = 0xf000;
/t mov dh, 0f0h
/t mov ds, edx
/T xor edx, edx // dx = 0x0000;
/t xor ecx, ecx // cx = 0xffff;
/t dec ecx
/T XOR EBX, EBX // BX = 0x0001;
/T Inc EBX
/t mov ah, 40h // doscall (0x40);
/t int 21h
/t JC @@ EXIT // ON ERROR EXIT;
/t {dump f000: ffff}
/t xor edx, edx // ds = 0xf000;
/t mov dh, 0f0h
/t mov ds, edx
/T xor edx, edx // dx = 0xffff;
/t dec edx
/T XOR ECX, ECX // CX = 0x0001;
/T inc ECX
/t mov ebx, ecx // bx = 0x0001;
/t mov ah, 40h // doscall (0x40);
/t int 21h
/t JC @@ EXIT // ON ERROR EXIT;
/t mov al, 0 // tidak ada kesalahan;
@@KELUAR:
/t mov ah, 4ch // doscall (0x4c);
/t int 21h
@@Akhir:
/t { * end * kode 16-bit}
/t mov codestart, offset @@ mulai
/t mov codeend, offset @@ end
akhir;
info kasus
rdcistart:
Hasil: = codestart;
rdciend:
Hasil: = Codeend;
rdcisize:
Hasil: = Pointer (Kardinal (Codeend) - Kardinal (CodestArt));
kalau tidak
Hasil: = nil;
akhir;
akhir;
{ * Internal * - Simpan kode 16 -bit untuk file}
Fungsi _romdumpcodetofile (const filename: string): boolean;
var
Comfile: Thandle;
Ukuran: Kardinal;
Mulai
Hasil: = false;
Comfile: = createFile (pchar (fileName), generic_write, file_share_read, nil,
Create_always, file_attribute_normal, 0);
Jika comfile <> invalid_handle_value maka
mencoba
Hasil: = writeFile (comfile, _romdumpcode (rdcistart)^,
Kardinal (_romdumpcode (rdcisize)), ukuran, nil) dan
(Size = cardinal (_romdumpcode (rdcisize)));
Jika tidak hasilnya
DeleteFile (pchar (nama file));
Akhirnya
Closhandle (comfile);
akhir;
akhir;
{ * Internal * - Jalankan kode 16 -bit yang dialihkan ke file}
fungsi _romdumpcodeExecute (const com, dmp: string; timeout: dword): boolean;
var
Comspec: string;
si: tstartupinfo;
PI: TProcessInformation;
Mulai
Hasil: = false;
SetLength (comspec, max_path);
SetLength (comspec,
GetenvironmentVariable ('' comspec '', pchar (@comspec [1]), max_path));
jika panjang (comspec)> 0 lalu
Mulai
Fillchar (SI, sizeof (tstartupInfo), 0);
si.cb: = sizeof (tstartupInfo);
si.dwflags: = startf_useshowwindow;
si.wshowwindow: = sw_hide;
Jika createProcess (nil, pchar (comspec + '' /c '' + com + ''> '' + dmp),
nil, nil, false, create_new_console atau create_new_process_group, nil,
nil, si, pi) lalu
mencoba
Hasil: = WaitForSingleObject (pi.hprocess, timeout) <> wait_timeout;
Akhirnya
Closhandle (pi.hprocess);
CloseHandle (pi.hthread);
akhir;
akhir;
akhir;
Function DirectoryExists (const dir: string): boolean;
var
Attr: dword;
Mulai
Attr: = getFileAttributes (pchar (dir));
Hasil: = (attr <> $ ffffffff) dan
(Attr dan file_attribute_directory = file_attribute_directory);
akhir;
{Dapatkan bios dump dengan cara generik}
fungsi readrombios16 (var buffer: trombiosdump; timeout: dword): boolean;
const
Tempsub = '' ~ romdmp '';
Comname = '' romdump.com '';
DmpName = '' rom.dmp '';
var
Temppath: String;
Tempdir: String;
Tempidx: Integer;
Tempidxstr: string;
Comfile: string;
DmpFile: string;
Dmphandle: Thandle;
Ditulis: DWORD;
Mulai
Hasil: = false;
SetLength (Temppath, max_path);
SetLength (Temppath, Gettemppath (max_path, pchar (@temppath [1]))));
Jika panjang (Temppath)> 0 lalu
Mulai
if (Temppath [length (Temppath)] <> ''/'')
Temppath: = Temppath + ''/'';
Tempidx: = 0;
mengulang
Inc (Tempidx);
Str (tempidx, tempidxstr);
Tempdir: = Temppath + Tempsub + TempidXStr;
sampai tidak direktori (tempdir);
Jika createDirectory (pchar (tempdir), nil) lalu
mencoba
Tempdir: = tempdir + ''/'';
Comfile: = tempdir + comname;
DmpFile: = tempdir + dmpName;
jika _romdumpcodetofile (comfile) maka
mencoba
jika _romdumpcodeExecute (comfile, dmpfile, timeout)
Mulai
/t dmphandle: = createFile (pchar (dmpFile), generic_read,
/t file_share_read atau file_share_write, nil, open_existing, 0, 0);
/t jika dmphandle <> invalid_handle_value
/T coba
/t fillchar (buffer, sizeof (trombiosdump), 0);
/t Hasil: = readFile (dmphandle, buffer, sizeof (trombiosdump),
/t tertulis, nil) dan (tertulis = sizeof (trombiosdump));
/t akhirnya
/t Closehandle (dmphandle);
/cenderung;
akhir;
Akhirnya
DeleteFile (PCHAR (DMPFILE));
DeleteFile (pchar (comfile));
akhir;
Akhirnya
Removedirectory (PCHAR (Tempdir));
akhir;
akhir;
akhir;
{################################################## #################################################### ################################################### ##
#/t/t/t/t/t/t/t/t/t/t/t/t # #
#/T/T/T/T Metode Langsung (Win9x)/T/T/T #
#/t/t/t/t/t/t/t/t/t/t/t/t # #
# Karena fakta bahwa Windows 95/98/ME memetakan BIOS ke dalam setiap proses Win32 #
# Untuk akses baca, sangat mudah untuk mengisi buffer dari memori./t #
#/t/t/t/t/t/t/t/t/t/t/t/t # #
################################################### #################################################### #######################################}}
fungsi readrombios9x (var buffer: trombiosdump): boolean;
Mulai
Hasil: = false;
mencoba
Fillchar (buffer, sizeof (trombiosdump), 0);
Pindahkan (pointer (rendah (trombiosdump))^, buffer, sizeof (trombiosdump));
Hasil: = true;
kecuali
// abaikan pengecualian
akhir
akhir;
{################################################## #################################################### ################################################### ##
#/t/t/t/t/t/t/t/t/t/t/t/t # #
Metode Memori Fisik #/T/T (WinNT)/T/T/T #
#/t/t/t/t/t/t/t/t/t/t/t/t # #
# On Windows NT ROM BIOS hanya tersedia melalui objek Kernel bernama #
# ''/Device/fysicalmemory ''. Karena tidak mungkin untuk membuka objek kernel di #
# Mode Pengguna dengan Fungsi API Win32 Standar Kami memanfaatkan NativeAPi NT di #
# Ntdll.dll ("nt-layer") yaitu zwopensection./t/t/t/t #
#/t/t/t/t/t/t/t/t/t/t/t/t # #
# (Catatan: Sebagian besar ada dua versi dari setiap fungsi ZWXXX dan NTXXX. The #
# Satu-satunya perbedaan dalam mode kernel adalah bahwa versi NTXXX berfungsi di pertimbangan- #
# ransum ke keamanan sementara zwxxx tidak.
#/t/t/t/t/t/t/t/t/t/t/t/t # #
# Awalnya bagian ini dibuka dengan zwopensection.
# Zwmapviewofsection, zwunmapviewofsection, dan ntclose.
# Lebih kompleks dan tidak perlu untuk itu.
# Dalam mode pengguna "sangat sederhana" =) Kami sekarang menggunakan MapViewoffile, Unmapviewoffile, #
# dan Closhandle untuk memetakan jendela memori (ROM BIOS) ke dalam proses kami.
#/t/t/t/t/t/t/t/t/t/t/t/t # #
# Karena fakta bahwa zwopensection mengembalikan nt-codes jika terjadi kegagalan #
# Kami harus menerjemahkannya ke kode kesalahan Win32 (rtlntstatustodoserror).
# Semua fungsi spesifik NT dimuat secara dinamis - karena aplikasi #
# harus mulai pada sistem win9x =)/t/t/t/t/t/t #
#/t/t/t/t/t/t/t/t/t/t/t/t # #
################################################### #################################################### #######################################}}
{Untuk informasi lebih lanjut lihat Windows 2000/XP DDK}
{Ini berfungsi pada Windows NT 4.0 juga, gunakan ntdll.dll}
jenis
Ntstatus = integer;
const
Status_success = ntstatus (0);
Status_invalid_handle = ntstatus ($ C0000008);
Status_access_denied = ntstatus ($ C0000022);
jenis
Punicodestring = ^tunicodestring;
Tunicodestring = rekaman yang dikemas
Panjang: kata;
MaximumLength: Word;
Buffer: PWIDECHAR;
akhir;
const
Obj_init = $ 00000002;
Obj_permanent = $ 00000010;
OBJ_Exclusive = $ 00000020;
Obj_case_insensitive = $ 00000040;
Obj_openif = $ 00000080;
Obj_openlink = $ 00000100;
Obj_kernel_handle = $ 00000200;
Obj_valid_attributes = $ 000003f2;
jenis
PObjectAttributes = ^TobjectAttributes;
TobjectAttributes = Rekam
Panjang: Ulong;
RootDirectory: Thandle;
ObjectName: Punicodestring;
Atribut: Ulong;
SecurityDescriptor: pScurityDescriptor;
Kualitas SecurityOfService: PScurityqualityOfService;
akhir;
const
ObjectPhysicalMeMoryDeviceName = ''/Device/Physicalmemory '';
ObjectPhysicalMemoryName: tunicodestring = (
Panjang: Panjang (ObjectPhysicalMemoryDeviceName) * 2;
MaximumLength: Length (ObjectPhysicalMemoryDeviceName) * 2 + 2;
Buffer: ObjectPhysicalMemoryDeviceName;
);
ObjectPhysicalMemoryAccessMask: access_mask = section_map_read;
ObjectPhysicalMemoryAttributes: TobjectAttributes = (
Panjang: sizeof (TobjectAttributes);
RootDirectory: 0;
ObjectName: @ObjectPhysicalMemoryName;
Atribut: obj_case_insensitive;
SecurityDescriptor: nil;
Kualitas SecurityOfService: NIL;
);
jenis
Tfnzwopensection = fungsi (out sectionHandle: thandle;
Diinginkancaccess: access_mask;
stdcall;
Tfnrtlntstatustodoserror = fungsi (status: ntstatus): dword;
const
ntdll = '' ntdll.dll '';
var
Zwopensection: tfnzwopensection;
Rtlntstatustodoserror: tfnrtlntstatustodoserror;
fungsi readrombiosnt (var buffer: trombiosdump; timeout: dword): boolean;
var
Ntlayer: hmodule;
Status: ntstatus;
Bagian: Thandle;
Lihat: Pointer;
Mulai
Hasil: = false;
Ntlayer: = getModuleHandle (ntdll);
Jika ntlayer = 0 lalu
Setlasterror (error_call_not_implemented)
kalau tidak
Mulai
Jika tidak ditugaskan (zwopensection) maka
Zwopensection: = getProcaddress (ntlayer, '' zwopensection '');
Jika tidak ditugaskan (rtlntstatustodoserror)
RtlntstatustodosError: = getProcaddress (ntlayer, '' rtlntstatustodoserror '');
Jika tidak (ditugaskan (zwopensection) dan ditugaskan (rtlntstatustodoserror)) kemudian
Setlasterror (error_call_not_implemented)
kalau tidak
Mulai
Status: = Zwopensection (bagian, ObjectPhysicalMemoryAccessmask,
@ObjectPhysicalMemoryAttributes);
status kasus
Status_success:
/T coba
/T View: = MapViewoffile (bagian, ObjectPhysicalMemoryAccessmask, 0,
/t rendah (trombiosdump), sizeof (trombiosdump));
/t jika ditugaskan (lihat) lalu
/T coba
/t fillchar (buffer, sizeof (trombiosdump), 0);
/t bergerak (view^, buffer, sizeof (trombiosdump));
/t Hasil: = true;
/t akhirnya
/t unmapviewoffile (view);
/cenderung;
/t akhirnya
/t Closhandle (bagian);
/cenderung;
Status_access_denied:
/t hasil: = readrombios16 (buffer, timeout);
kalau tidak
Setlasterror (rtlntstatustodoserror (status))
akhir;
akhir;
akhir;
akhir;
{################################################## #################################################### ################################################### ##
#/t/t/t/t/t/t/t/t/t/t/t/t # #
#/t/t/t readrombios/t/t/t/t # #
#/t/t/t/t/t/t/t/t/t/t/t/t # #
################################################### #################################################### #######################################}}
fungsi readrombios (var dump: trombiosdump; metode: treadrombiosmethod;
Timeout: DWORD = Infinite): Boolean;
Mulai
Hasil: = false;
metode kasus
RRBMAUTOMATION:
if (integer (getVersion) <0)
mencoba
Hasil: = readrombios9x (dump);
kecuali
Hasil: = readrombios16 (dump, timeout);
akhir
kalau tidak
Hasil: = readrombiosnt (dump, timeout);
RRBMGeneric:
Hasil: = readrombios16 (dump, timeout);
rrbmmemory:
Hasil: = readrombios9x (dump);
rrbmphysical:
Hasil: = readrombiosnt (dump, timeout);
kalau tidak
Setlasterror (error_invalid_parameter);
akhir;
akhir;
{################################################## #################################################### ################################################### ##
#/t/t/t/t/t/t/t/t/t/t/t/t # #
# Utilitas untuk menyederhanakan akses ke data sebagai tipe standar generik #
#/t/t/t/t/t/t/t/t/t/t/t/t # #
################################################### #################################################### #######################################}}
fungsi getRombiosbuffer (const dump: trombiosdump; alamat: pointer;
var buffer;
Mulai
Hasil: = 0;
if (kardinal (alamat)> = rendah (trombiosdump) dan dan
(Kardinal (alamat) <= tinggi (trombiosdump)) kemudian
Mulai
Hasil: = bufferSize;
if (kardinal (alamat) + bufferSize> tinggi (trombiosdump))
Hasil: = Tinggi (trombiosdump) - Kardinal (alamat) + 1;
Pindahkan (dump [kardinal (alamat)], buffer, hasil);
akhir;
akhir;
fungsi getRombiosstring (const dump: trombiosdump; alamat: pointer): string;
Mulai
Hasil: = '' '';
if (kardinal (alamat)> = rendah (trombiosdump) dan dan
(Kardinal (alamat) <= tinggi (trombiosdump)) kemudian
Hasil: = string (pchar (@dump [kardinal (alamat)]));
akhir;
fungsi getrombioslonglong (const dump: trombiosdump; alamat: pointer): longlong;
jenis
Plonglong = ^longlong;
Mulai
Hasil: = 0;
if (kardinal (alamat)> = rendah (trombiosdump) dan dan
(Kardinal (alamat) <= tinggi (trombiosdump) - sizeof (longlong) + 1) kemudian
Hasil: = plonglong (@dump [kardinal (alamat)])^;
akhir;
fungsi getRombiosdword (const dump: trombiosdump; alamat: pointer): dword;
Mulai
Hasil: = 0;
if (kardinal (alamat)> = rendah (trombiosdump) dan dan
(Kardinal (alamat) <= tinggi (trombiosdump) - sizeof (dword) + 1) kemudian
Hasil: = PDWORD (@dump [Kardinal (Alamat)])^;
akhir;
fungsi getRombiosWord (const dump: trombiosdump; alamat: pointer): word;
Mulai
Hasil: = 0;
if (kardinal (alamat)> = rendah (trombiosdump) dan dan
(Kardinal (alamat) <= tinggi (trombiosdump) - sizeof (word) + 1) kemudian
Hasil: = pword (@dump [kardinal (alamat)])^;
akhir;
fungsi getRombiosbyte (const dump: trombiosdump; alamat: pointer): byte;
Mulai
Hasil: = 0;
if (kardinal (alamat)> = rendah (trombiosdump) dan dan
(Kardinal (alamat) <= tinggi (trombiosdump) - sizeof (byte) + 1) kemudian
Hasil: = pbyte (@dump [kardinal (alamat)])^;
akhir;
akhir.
==========================================
4. Dapatkan informasi tanggal BIOS
{------------------------------------------------- ---------------------------------}
{Dapatkan informasi tanggal dari BIOS, diperkirakan mungkin berlaku di bawah 2000, tetapi mungkin memerlukan izin}
fungsi getBioSdate1: string;
var
Buffer: array [0..8] dari char;
N: DWORD;
Mulai
ReadProcessMemory (GetCurrentProcess,
PTR ($ ffff5),
@Penyangga,
8,
N);
Buffer [8]: = #0;
Hasil: = strpas (buffer)
akhir;
fungsi getBioSdate2: string;
Mulai
Hasil: = string (pchar (ptr ($ ffff5)));
akhir;