1. اقرأ الرقم التسلسلي للوحة الأم
2. قراءة كلمة مرور الجائزة BIOS
3. اقرأ معلومات BIOS
4. الحصول على معلومات تاريخ BIOS
=========================================
1. اقرأ الرقم التسلسلي للوحة الأم
يستخدم SHA1 ، BASE64 ؛
وظيفة gethashedbiosinfo: سلسلة.
var
sha1context: tsha1context ؛
sha1digest: tsha1digest ؛
يبدأ
// احصل على بيانات BIOS
SetString (النتيجة ، PCHAR (PTR ($ F0000)) ، 10000 دولار) ؛
// تجزئة السلسلة
sha1init (sha1context) ؛
sha1update (sha1context ، pchar (نتيجة) ، طول (نتيجة)) ؛
sha1final (sha1context ، sha1digest) ؛
setString (النتيجة ، pchar (@sha1digest) ، sizeof (sha1digest)) ؛
// إرجاع سلسلة التجزئة المشفرة بأحرف قابلة للطباعة
النتيجة: = b64encode (النتيجة) ؛
نهاية؛
وظيفة getBiosinFoastext: سلسلة ؛
var
P ، س: PCHAR ؛
يبدأ
س: = لا شيء ؛
P: = PCHAR (PTR ($ Fe000)) ؛
يكرر
إذا Q <> nil ثم ابدأ
إذا لم يكن (P^ في [ #10 ، #13 ، #32 .. #126 ، #169 ، #184]) ثم ابدأ
/t if (p^ = #0) و (p - q> = 8) ثم ابدأ
/t النتيجة: = النتيجة + trimright (سلسلة (q)) + #13 #10 ؛
/ينزع؛
/tq: = nil ؛
نهاية؛
إنهاء آخر
إذا p^ in [ #33 .. #126 ، #169 ، #184]
/tq: = p ؛
INC (P) ؛
حتى p> pchar (ptr ($ fffff)) ؛
النتيجة: = trimright (نتيجة) ؛
نهاية؛
الإجراء tform1.formcreate (المرسل: tobject) ؛
يبدأ
memo1.lines.text: = getBiosinFoastext ؛
نهاية؛
==========================================
2. جائزة قراءة كلمة مرور BIOS (يجب أن تكون مقالة Jingtao ، لكن الهوية غير مسجلة)
وحدة الموضة.
// اكتب بواسطة Lovejingtao
//http://www.138soft.com
واجهة
يستخدم النوافذ ، sysutils ؛
وظيفة my_getbiospassword: String ؛
تطبيق
وظيفة calcpossiblepassword (passwordValue: Word): String ؛
var
أنا: بايت ؛
ج: شار.
S: سلسلة [8] ؛
يبدأ
أنا: = 0 ؛
في حين أن passwordvalue <> 0 تفعل
يبدأ
INC (I) ؛
إذا 263 دولار> passwordvalue ثم
يبدأ
/t إذا كان 80 دولارًا> passwordvalue ثم
/t s : = char (passwordvalue)
/t آخر إذا $ b0> passwordvalue ثم
/T S : = char (PasswordValue و 77 دولار)
/t آخر إذا 11D $> passwordvalue ثم
/t s : = char ($ 30 أو (passwordvalue و $ 0F))
/t آخر إذا كان 114 دولارًا> passwordvalue ثم
/ر
/t s : = char (64 دولارًا أو (passwordvalue و $ 0F)) ؛
/t إذا كان '' 0 ''> s
/t s : = char (byte (s ) + 8) ؛
/ينزع
/t آخر إذا كان $ 1C2> passwordvalue ثم
/t s : = char (70 دولارًا أو (passwordvalue و $ 03))
/t آخر إذا كان 1E4> passwordvalue ثم
/t s : = char ($ 30 أو (passwordvalue و $ 03))
/ر آخر
/ر
/t s : = char ($ 70 أو (passwordvalue و $ 0F)) ؛
/t إذا "'z' '' ثم
/t s : = char (byte (s ) - 8) ؛
/ينزع؛
نهاية
آخر
S : = char (30 دولارًا أو (PasswordValue و $ 3)) ؛
PasswordValue: = (PasswordValue - Byte (s )) shr 2 ؛
نهاية؛
s [0]: = char (i) ؛
PasswordValue: = I shr 1 ؛
في حين أن passwordvalue <أنا أفعل
ابدأ {هذا هو القيام بذلك لأن الجائزة تبدأ في حساب الحرف الأخير}
c: = s [byte (s [0]) - i + 1] ؛
s [byte (s [0]) - i + 1]: = s ؛
S : = C ؛
ديسمبر (ط) ؛
نهاية؛
calcpossiblepassword: = s ؛
نهاية؛
وظيفة readcmos (OFF: BYTE): BYTE ؛
var
القيمة: بايت ؛
يبدأ
ASM
فأس xor ، الفأس
موف آل ، قبالة
خارج 70H ، آل
في AL ، 71H
قيمة mov ، al
نهاية؛
readcmos: = القيمة ؛
نهاية؛
وظيفة my_getbiospassword: String ؛
var
superpw ، userpw: word ؛
S: سلسلة.
يبدأ
إذا win32platform <> ver_platform_win32_nt ثم // لا nt
يبدأ
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: = '' 'superuser password هي:' '+calcpossiblepassword (superpw)+#13+' 'كلمة مرور المستخدم هي:' '+calcpossiblepassword (userpw) ؛
النتائج: = s ؛
نهاية
آخر
النتيجة: = '' نظام المستخدم هو NT ، ولا يمكن الحصول على كلمة مرور biso! '' ؛
نهاية؛
نهاية.
==========================================
3. اقرأ معلومات BIOS
{يستخدم البرنامج منصة Windows 95/2000 ، ويكتشف تلقائيًا نوع النظام ، ثم يقوم بإجراء مكالمات مختلفة}
يستخدم bioShelp.
الإجراء tform1.button1click (المرسل: tobject) ؛
var
تفريغ: trombiosdump ؛
أنا: عدد صحيح.
يبدأ
readRombios (Dump ، rrbmautomatic) ؛
لـ i: = 1 إلى 000 000fffff - $ 000f0000 - 1 تفعل
memo1.lines.add (inttoHex (dump [i + $ 000fffff] ، 2)) ؛
نهاية؛
(*************************************************** ************************************
*/t/t/t/t/t/t/t/t/t/t/t/t *
* تعليمات BIOS - اقرأ ROM BIOS على Windows 95/98/SE/ME/NT/2K/XP/T/T *
*/t/t/t/t/t/t/t/t/t/t/t/t *
* حقوق الطبع والنشر (C) 2001 ، Nico Bendlin ([email protected])/t/t/t *
*/t/t/t/t/t/t/t/t/t/t/t/t *
* المترجم: Delphi 4.03/5.01/6.00/T/T/T/T/T/T *
* الإصدار: 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: آسف على اللغة الإنجليزية السيئة ، كتبت ذلك على عجل}
وحدة BioShelp ؛
{$ align on}
{$ minenumsize 4}
واجهة
يستخدم
النوافذ
يكتب
prombiosdump = ^trombiosdump ؛
TrombiOSdump = Array [$ 000F0000 .. $ 000ffff] of byte ؛
يكتب
treadrombiosmethod = (
rrbmautomatic ،/t/t/t/t/t {autodetect نوع OS واستخدام الطريقة المناسبة}
RRBMGENERIC ،/T/T/T/T/T/T {استخدم برنامج COM 16 بت لتفريغ BIOS}
rrbmmemory ،/t/t/t/t/t {قراءة من الذاكرة (win9x)/t/t}
rrbmphysical/t/t/t/t/t {اقرأ من كائن الذاكرة الفعلية (winnt)}
) ؛
وظيفة القراءة (VAR DUMP: TROMBIOSDUMP ؛ الطريقة: treadrombiosmethod ؛
مهلة: Dword = Infinite): Boolean ؛
وظيفة getrombiosbuffer (const dump: trombiosdump ؛ العنوان: مؤشر ؛
var buffer ؛
وظيفة getrombiostring (const dump: trombiosdump ؛ العنوان: مؤشر): سلسلة ؛
وظيفة getrombioslonglong (تفريغ const: trombiosdump ؛ العنوان: مؤشر): longlong ؛
وظيفة getRombiosdword (Const Dump: TrombiOsdump ؛ العنوان: مؤشر): Dword ؛
وظيفة getRombiosword (const dump: trombiosdump ؛ العنوان: مؤشر): كلمة ؛
وظيفة getrombiosbyte (const dump: trombiosdump ؛ العنوان: مؤشر): بايت ؛
تطبيق
{## طلب ## طلب ################################################## ##
#/t/t/t/t/t/t/t/t/t/t/t/t #
#/t/t/t طريقة عامة/t/t/t/t #
#/t/t/t/t/t/t/t/t/t/t/t/t #
# إنشاء مجلد مؤقت ، حفظ برنامج 16bit com (Romdump.com) فيه ، #
# تنفيذ البرنامج الذي تم إعادة توجيهه إلى ملف (ROM.DMP ، ROMDUMP.com ببساطة يفسد # #
# نطاق الذاكرة F000: 0000-F000: FFFF إلى stdout) ، اقرأ ملف التفريغ في المخزن المؤقت ، #
# وأخيراً تنظيف جميع الملفات والدلائل المؤقتة.
#/t/t/t/t/t/t/t/t/t/t/t/t #
# الدالة romdumpcode هي x86 محددة ، والتي كتبت لإنشاء 16 بت #
# رمز بمساعدة مترجم دلفي 23 بت ، لا تحاول أبدًا تنفيذ #
# الكود الزائف في برنامجك!
#/t/t/t/t/t/t/t/t/t/t/t/t #
################################################## ########################################################################### ######################################}}
{ * داخلي * - رمز زائف 16 بت}
يكتب
promdumpcodeinfo = ^tromdumpcodeinfo ؛
tromdumpcodeinfo = (rdcistart ، rdciend ، rdcisize) ؛
دالة _romdumpcode (معلومات: tromdumpcodeinfo): مؤشر ؛
var
CODESTART: مؤشر ؛
Codeend: مؤشر ؛
يبدأ
ASM
/T JMP. end
/t { * start * 16-bit code}
/T { - لا تستخدمه أبدًا في برنامجك!
/t {com الذي يكتب Rom-Bios إلى stdout}
@@يبدأ:
/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 ؛
/ر ديسمبر 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 // No Error ؛
@@مخرج:
/t mov ah ، 4ch // doscall (0x4c) ؛
/T int 21h
@@نهاية:
/t { * end * ade}}
/t mov codestart ، startsevet
/t mov codeend ، endset
نهاية؛
معلومات حالة
Rdcistart:
النتيجة: = Codestart ؛
Rdciend:
النتيجة: = codeend ؛
rdcisize:
النتيجة: = مؤشر (الكاردينال (Codeend) - الكاردينال (CodeStart)) ؛
آخر
النتيجة: = لا شيء ؛
نهاية؛
نهاية؛
{ * داخلي * - احفظ رمز 16 بت إلى ملف}
دالة _romdumpcodetofile (اسم ملف const: سلسلة): منطقية ؛
var
المهور: ثاندل ؛
الحجم: الكاردينال.
يبدأ
النتيجة: = خطأ ؛
Comfile: = CreateFile (pchar (filename) ، generic_write ، file_share_read ، nil ،
create_always ، file_attribute_normal ، 0) ؛
إذا كان Comfile <> invalid_handle_value ثم
يحاول
النتيجة: = writefile (Comfile ، _romdumpcode (rdcistart)^،
الكاردينال (_romdumpcode (rdcisize)) ، الحجم ، لا شيء) و
(الحجم = الكاردينال (_romdumpcode (rdcisize))) ؛
إذا لم يكن نتائج ذلك
DELETEFILE (PCHAR (FILENAME)) ؛
أخيراً
CloseHandle (Comfile) ؛
نهاية؛
نهاية؛
{ * داخلي * - تم إعادة توجيه رمز 16 بت إلى ملف}
الدالة _romdumpcodeexecute (const com ، dmp: string ؛ timeout: dword): boolean ؛
var
comspec: سلسلة ؛
SI: tstartupinfo ؛
PI: TprocessInformation ؛
يبدأ
النتيجة: = خطأ ؛
setLength (comspec ، max_path) ؛
setLength (comspec ،
getEnvironmentVariable ('' 'comspec' '، pchar (comspec [1]) ، max_path)) ؛
إذا كان الطول (comspec)> 0 ثم
يبدأ
Fillchar (SI ، sizeof (tstartupinfo) ، 0) ؛
si.cb: = sizeof (tstartupinfo) ؛
si.dwflags: = startf_useshowwindow ؛
si.wshowwindow: = sw_hide ؛
إذا كانت CreateProcess (NIL ، PCHAR (COMSPEC + '' /C '' + com + ''> '' + DMP) ،
nil ، nil ، false ، create_new_console أو create_new_process_group ، nil ،
لا شيء ، سي ، بي) ثم
يحاول
النتيجة: = waitforsingleObject (pi.hprocess ، timeout) <> wait_timeout ؛
أخيراً
CloseHandle (pi.hprocess) ؛
CloseHandle (pi.hthread) ؛
نهاية؛
نهاية؛
نهاية؛
الدليل الدليل (const dir: string): منطقية ؛
var
ATTR: DWORD ؛
يبدأ
ATTR: = getFiLeAttributes (PCHAR (DIR)) ؛
النتيجة: = (attr <> $ fffffff) و
(attr و file_attribute_directory = file_attribute_directory) ؛
نهاية؛
{احصل على BIOS تفريغ الطريقة العامة}
وظيفة readRombios16 (var buffer: trombiosdump ؛ timeout: dword): Boolean ؛
كونست
tempsub = '' ~ romdmp '' ؛
comName = '' romdump.com '' ؛
dmpName = '' rom.dmp '' ؛
var
Temppath: سلسلة ؛
Tempdir: سلسلة ؛
tempidx: عدد صحيح ؛
tempidxstr: سلسلة ؛
Comfile: String ؛
dmpfile: سلسلة ؛
Dmphandle: Thandle ؛
مكتوب: DWORD ؛
يبدأ
النتيجة: = خطأ ؛
setLength (temppath ، max_path) ؛
setLength (temppath ، getTemppath (max_path ، pchar (temppath [1]))) ؛
إذا كان الطول (temppath)> 0 ثم
يبدأ
إذا (temppath [طول (temppath)] <> ''/'') ثم
Temppath: = temppath + ''/'' ؛
tempidx: = 0 ؛
يكرر
INC (tempidx) ؛
Str (tempidx ، tempidxstr) ؛
tempdir: = temppath + tempsub + tempidxstr ؛
حتى لا تكون الدليل (tempdir) ؛
إذا تم إنشاؤها iRectory (PCHAR (tempdir) ، لا شيء)
يحاول
tempdir: = tempdir + ''/'' ؛
Comfile: = tempdir + comname ؛
dmpfile: = tempdir + dmpName ؛
إذا _romdumpcodetofile (Comfile) ثم
يحاول
إذا كان _romdumpcodeexecute (Comfile ، DMPFile ، Timeout) ثم
يبدأ
/t dmphandle: = createfile (pCHAR (dmpfile) ، generic_read ،
/t file_share_read أو file_share_write ، nil ، open_existing ، 0 ، 0) ؛
/t إذا كان dmphandle <> invalid_handle_value ثم
/ر محاولة
/t fillchar (buffer ، sizeof (trombiosdump) ، 0) ؛
/t النتيجة: = ReadFile (dmphandle ، buffer ، sizeof (trombiosdump) ،
/t مكتوب ، لا شيء) و (مكتوب = sizeof (trombiOsdump)) ؛
/ر أخيرًا
/t CloseHandle (dmphandle) ؛
/ينزع؛
نهاية؛
أخيراً
DELETEFILE (PCHAR (DMPFILE)) ؛
DELETEFILE (PCHAR (COMFILE)) ؛
نهاية؛
أخيراً
rediveDirectory (PCHAR (tempdir)) ؛
نهاية؛
نهاية؛
نهاية؛
{## طلب ## طلب ################################################## ##
#/t/t/t/t/t/t/t/t/t/t/t/t #
#/t/t/t الطريقة المباشرة (win9x)/t/t/t #
#/t/t/t/t/t/t/t/t/t/t/t/t #
# بسبب حقيقة أن Windows 95/98/ME يقوم بتعيين BIOS في كل عملية Win32 #
# للوصول إلى القراءة ، من السهل جدًا ملء المخزن المؤقت من الذاكرة./T #
#/t/t/t/t/t/t/t/t/t/t/t/t #
################################################## ########################################################################### ######################################}}
وظيفة readRombios9x (var buffer: trombiosdump): Boolean ؛
يبدأ
النتيجة: = خطأ ؛
يحاول
FillChar (Buffer ، sizeof (trombiosdump) ، 0) ؛
Move (Pointer (Low (TrombiOsdump))^، buffer ، sizeof (trombiOsdump)) ؛
النتيجة: = صحيح ؛
يستثني
// تجاهل الاستثناءات
نهاية
نهاية؛
{## طلب ## طلب ################################################## ##
#/t/t/t/t/t/t/t/t/t/t/t/t #
#/t/t طريقة الذاكرة الفعلية (winnt)/t/t/t #
#/t/t/t/t/t/t/t/t/t/t/t/t #
# على Windows nt لا يتوفر ROM BIOS إلا من خلال كائن kernel المسماة #
# ''/الجهاز/المادية ".
# وضع المستخدم مع وظائف واجهة برمجة تطبيقات Win32 القياسية التي نستخدمها في NT 'Nativeapi في #
# ntdll.dll ("nt-layer") وهي zwopensection./t/t/t/t #
#/t/t/t/t/t/t/t/t/t/t/t/t #
# (ملاحظة: في الغالب هناك نسختان من كل وظيفة ZWXXX و NTXXX. #
# الاختلاف فقط في وضع kernel هو أن إصدار NTXXX يعمل في الاعتبار- #
# الحصة إلى الأمان بينما لا يعمل ZWXXX.
#/t/t/t/t/t/t/t/t/t/t/t/t #
# في البداية يتم فتح القسم مع zwopensection.
# zwmapviewofSection ، ZwunMapViewofSection ، و NTClose.
# أكثر تعقيدًا وليس هناك حاجة إليها.
# في وضع المستخدم "البسيط للغاية" =) نستخدم الآن mapViewoffile ، unmapviewoffile ، #
# و CloseHandle لرسم خريطة نافذة الذاكرة (ROM BIOS) في عمليتنا.
#/t/t/t/t/t/t/t/t/t/t/t/t #
# بسبب حقيقة أن ZwopenSection يعيد رموز الأخطاء NT في حالة الفشل #
# يجب أن نترجمها إلى رمز خطأ Win32 (RTLNTStatustodoserror).
# يتم تحميل جميع الوظائف المحددة NT ديناميكيًا - لأن التطبيقات #
# يجب أن تبدأ على أنظمة win9x =)/t/t/t/t/t #
#/t/t/t/t/t/t/t/t/t/t/t/t #
################################################## ########################################################################### ######################################}}
{لمزيد من المعلومات ، انظر Windows 2000/XP DDK}
{يعمل على Windows NT 4.0 أيضًا ، استخدم ntdll.dll}
يكتب
ntstatus = عدد صحيح ؛
كونست
status_success = ntstatus (0) ؛
status_invalid_handle = ntstatus ($ c0000008) ؛
status_access_denied = ntstatus ($ c0000022) ؛
يكتب
punicodestring = ^tunicodestring ؛
Tunicodestring = سجل معبأ
الطول: كلمة.
الحد الأقصى الطول: كلمة ؛
المخزن المؤقت: pwidechar ؛
نهاية؛
كونست
OBJ_INHERIT = $ 00000002 ؛
obj_permanent = $ 00000010 ؛
obj_exclusive = $ 00000020 ؛
OBJ_CASE_INSESITIVE = $ 00000040 ؛
OBJ_OPENIF = $ 00000080 ؛
OBJ_OPENLINK = $ 00000100 ؛
OBJ_KERNEL_HANDLE = $ 00000200 ؛
obj_valid_attributes = $ 000003f2 ؛
يكتب
pobjectattributes = ^toBjectAttributes ؛
TOBJECTATTRIBUTES = السجل
الطول: Ulong ؛
RootDirectory: Thandle ؛
ObjectName: punicodestring ؛
السمات: Ulong ؛
SecurityDescriptor: pscuritydescriptor ؛
SecurityQualityofService: pscurityfoalityofservice ؛
نهاية؛
كونست
ObjectPhysicalMemoryDevicename = ''/device/physicalmemory '' ؛
ObjectPhysicalMemoryName: Tunicodestring = (
الطول: الطول (ObjectPhysicalMemoryDevicename) * 2 ؛
الحد الأقصى الطول: الطول (ObjectPhysicalMemoryDevicename) * 2 + 2 ؛
المخزن المؤقت: ObjectPhysicalMemoryDevicename ؛
) ؛
ObjectPhysicalMemoryAccessSk: Access_mask = section_map_read ؛
ObjectPhysicalMemoryAttributes: toBjectatTributes = (
الطول: SizeOf (toBjectattributes) ؛
RootDirectory: 0 ؛
ObjectName: objectPhysicalMemoryName ؛
السمات: OBJ_CASE_INSESTIVE ؛
SecurityDescriptor: لا شيء ؛
SecurityQualityofService: لا شيء ؛
) ؛
يكتب
tfnzwOpenSection = function (out sectionHandle: thandle ؛
AssiredAccess: Access_mask ؛
stdcall
tfnrtlntStatustOdoserror = الدالة (الحالة: ntstatus): dword ؛
كونست
ntdll = '' ntdll.dll '' ؛
var
zwopensection: tfnzwOpenSection ؛
rtlntstatustodoserror: tfnrtlntstatustodoserror ؛
وظيفة القراءة (var buffer: trombiosdump ؛ timeout: dword): boolean ؛
var
ntlayer: hmodule ؛
الحالة: ntstatus ؛
القسم: Thandle ؛
عرض: مؤشر ؛
يبدأ
النتيجة: = خطأ ؛
ntlayer: = getModuleHandle (ntdll) ؛
إذا ntlayer = 0 ثم
setlasterror (error_call_not_implemented)
آخر
يبدأ
إذا لم يتم تعيينه (zwopensection) ثم
zwopensection: = getProcaddress (ntlayer ، '' zwopensection '') ؛
إذا لم يتم تعيينه (rtlntstatustodoserror) ثم
rtlntstatustodoserror: = getProcadDress (ntlayer ، '' rtlntStatustodoserror '') ؛
إذا لم يكن (تم تعيينه (zwopensection) وتم تعيينه (rtlntstatustodoserror)) ثم
setlasterror (error_call_not_implemented)
آخر
يبدأ
الحالة: = zwopensection (القسم ، ObjectPhysicalMemoryAccesssk ،
abjectPhysicalMemoryAttributes) ؛
حالة حالة
status_success:
/ر محاولة
/t عرض: = mapViewOffile (القسم ، ObjectPhysicalMemoryAccesssk ، 0 ،
/T منخفض (TrombiOsdump) ، sizeof (trombiosdump)) ؛
/t إذا تم تعيين (عرض) ثم
/ر محاولة
/t fillchar (buffer ، sizeof (trombiosdump) ، 0) ؛
/t move (view^، buffer ، sizeof (trombiOSdump)) ؛
/T النتيجة: = صواب ؛
/ر أخيرًا
/t unmapviewoffile (عرض) ؛
/ينزع؛
/ر أخيرًا
/T CloseHandle (القسم) ؛
/ينزع؛
status_access_denied:
/t النتيجة: = readRombios16 (المخزن المؤقت ، المهلة) ؛
آخر
setlasterror (rtlntstatustodoserror (الحالة))
نهاية؛
نهاية؛
نهاية؛
نهاية؛
{## طلب ## طلب ################################################## ##
#/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 #
################################################## ########################################################################### ######################################}}
وظيفة القراءة (VAR DUMP: TROMBIOSDUMP ؛ الطريقة: treadrombiosmethod ؛
مهلة: Dword = Infinite): Boolean ؛
يبدأ
النتيجة: = خطأ ؛
طريقة الحالة
rrbmautomatic:
إذا (integer (getVersion) <0) ثم
يحاول
النتيجة: = readRombios9x (Dump) ؛
يستثني
النتيجة: = readRombios16 (تفريغ ، مهلة) ؛
نهاية
آخر
النتيجة: = readRombiosnt (تفريغ ، مهلة) ؛
rrbmgeneric:
النتيجة: = readRombios16 (تفريغ ، مهلة) ؛
RRBMMEMORY:
النتيجة: = readRombios9x (Dump) ؛
rrbmphysical:
النتيجة: = readRombiosnt (تفريغ ، مهلة) ؛
آخر
setlasterror (error_invalid_parameter) ؛
نهاية؛
نهاية؛
{## طلب ## طلب ################################################## ##
#/t/t/t/t/t/t/t/t/t/t/t/t #
# الأدوات المساعدة لتبسيط الوصول إلى البيانات كنوع قياسي عام #
#/t/t/t/t/t/t/t/t/t/t/t/t #
################################################## ########################################################################### ######################################}}
وظيفة getrombiosbuffer (const dump: trombiosdump ؛ العنوان: مؤشر ؛
var buffer ؛
يبدأ
النتائج: = 0 ؛
إذا (cardinal (العنوان)> = منخفض (TrombiOsdump)) و
(الكاردينال (العنوان) <= High (TrombiOsdump)) ثم
يبدأ
النتيجة: = المخزن المؤقت ؛
إذا (Cardinal (العنوان) + مخزن مؤقت> مرتفع (trombiOsdump)) ثم
النتيجة: = عالية (trombiosdump) - الكاردينال (العنوان) + 1 ؛
نقل (تفريغ [الكاردينال (العنوان)] ، المخزن المؤقت ، النتيجة) ؛
نهاية؛
نهاية؛
وظيفة getrombiostring (const dump: trombiosdump ؛ العنوان: مؤشر): سلسلة ؛
يبدأ
النتائج: = '' '' ؛
إذا (cardinal (العنوان)> = منخفض (TrombiOsdump)) و
(الكاردينال (العنوان) <= High (TrombiOsdump)) ثم
النتيجة: = string (pchar (dump [cardinal (address))) ؛
نهاية؛
وظيفة getrombioslonglong (تفريغ const: trombiosdump ؛ العنوان: مؤشر): longlong ؛
يكتب
plonglong = ^longlong ؛
يبدأ
النتائج: = 0 ؛
إذا (cardinal (العنوان)> = منخفض (TrombiOsdump)) و
(Cardinal (العنوان) <= High (TrombiOsdump) - Sizeof (Longlong) + 1) ثم
النتيجة: = plonglong (dump [cardinal (address)])^؛
نهاية؛
وظيفة getRombiosdword (Const Dump: TrombiOsdump ؛ العنوان: مؤشر): Dword ؛
يبدأ
النتائج: = 0 ؛
إذا (cardinal (العنوان)> = منخفض (TrombiOsdump)) و
(Cardinal (العنوان) <= High (TrombiOsdump) - Sizeof (dword) + 1) ثم
النتيجة: = pdword (dump [cardinal (address)])^؛
نهاية؛
وظيفة getRombiosword (const dump: trombiosdump ؛ العنوان: مؤشر): كلمة ؛
يبدأ
النتائج: = 0 ؛
إذا (cardinal (العنوان)> = منخفض (TrombiOsdump)) و
(الكاردينال (العنوان) <= High (TrombiOsdump) - SizeOf (Word) + 1) ثم
النتيجة: = pword (dump [cardinal (address)])^؛
نهاية؛
وظيفة getrombiosbyte (const dump: trombiosdump ؛ العنوان: مؤشر): بايت ؛
يبدأ
النتائج: = 0 ؛
إذا (cardinal (العنوان)> = منخفض (TrombiOsdump)) و
(Cardinal (العنوان) <= High (TrombiOsdump) - Sizeof (Byte) + 1) ثم
النتيجة: = pbyte (dump [cardinal (address)])^؛
نهاية؛
نهاية.
==========================================
4. الحصول على معلومات تاريخ BIOS
{------------------------------------------- ---------------------------------}
{احصل على معلومات تاريخ BIOS ، يُقدر أنها قد تنطبق بموجب عام 2000 ، ولكنها قد تتطلب إذنًا}
وظيفة getBiosDate1: سلسلة ؛
var
المخزن المؤقت: صفيف [0..8] من شار ؛
N: DWORD ؛
يبدأ
ReadProcessMemory (GetCurrentProcess ،
PTR ($ FFFF5) ،
buffer ،
8 ،
ن) ؛
المخزن المؤقت [8]: = #0 ؛
النتيجة: = Strpas (عازلة)
نهاية؛
وظيفة getBiosdate2: سلسلة ؛
يبدأ
النتيجة: = String (PCHAR (PTR ($ FFFF5))) ؛
نهاية؛