Як дізнатися пароль на BIOS після завантаження?
Як дізнатися пароль після завантаження?
у AMI bios ‘ e:

type String6=string[6];
function GetAMIPassword; assembler;
asm
cld
les di,@Result
mov si,di
mov al,37h
out 70h,al
in al,71h
and al,0F0h
xor bx,bx
xchg bh,al
stosb
@M1:
mov al,bl
add al,38h
out 70h,al
in al,71h
or al,al
jz @Exit
mov ah,al
xor cl,cl
@M2:
test al,80h
jz @M3
test al,61h
jnp @M4
stc
@M4:
rcl al,1
jmp @M6
@M3:
test al,61h
jp @M5
stc
@M5:
rcl al,1
@M6:
inc cl
cmp al,bh
jne @M2
inc byte ptr es:[si]
mov byte ptr es:[di],cl
inc di
mov bh,ah
inc bl
cmp bl,6
jb @M1
@Exit:
end;

У AWARD bios ‘ e: На відміну від інших різновидів bios-ів, Award-bios зберігає не пароль, а його 2-байтовую контрольну суму (кс) в cmos-e. Таким чином, існує велика кількість паролів, «відкривають» машину. Але не це головне.

У Award-bios-ах є універсальна кс (укс). Якщо підібрати рядок символів (не більше восьми) з тієї ж кс, то можна змусити комп’ютер працювати. Зрозуміло, таких паролів для кожної укс існує досить багато. Будь-який з таких паролів можна назвати універсальним паролем (уп). Довгий час в ходу були bios-и тільки з одного укс (взятої, швидше за все, від рядка AWARD_SW), і було знайдено кілька інших уп, таких як j262, j256, Syxz, lkwpeter, Wodj… Всі ці паролі, як Ви зрозуміли, що мають одну і ту ж кс.

Останнім часом з’явилися машини з іншими укс, взятими від якихось інших рядків або вигаданих «від балди». Мабуть це пов’язано з ліцензуванням (продажем) bios-а різним фірмам.

Але… алгоритм взяття кс від рядка залишився колишнім і місце укс в bios-і те ж саме. Поки мені відомо 5 варіантів укс (2 байти за адресою F000:EC60) Отже, якщо там кількість 0x1EAA, то паролем може служити всім відома комбінація AWARD_SW. Бувають також bios-и, де за цією адресою стоять інші числа. Для зручності по одному з варіантів уп (ті, які згенерувала моя програма) наводжу в табличці:

0x0604 KDD
0x1EAA ZJAAADC
0xBEA2 ZAAADA
0xAAAA UAABBA
0xFEA3 ZBAAACA

(Я підбирав паролі тільки з латинських заголовних літер. Звичайно, можна було б пошукати і більш осмислені комбінації символів, що мають ті ж кс, але це справа я готовий надати Вам (треба написати простеньку програму, запустити її працювати на ніч, а потім переглянути файл у кілька сот кіл 🙂 Для довідки: четырехбуквенных паролів для 0x1EAA-модифікації bios-ів існує 11656 штук, якщо брати набір символів від ‘!’ до ‘z’. П’яти-, шести-, семи – і восьмибуквенных набереться ще більше…
Резюме: На відміну від власників інших моделей комп’ютерів, Вам не доведеться розгвинчувати корпус і шукати там перемичку, сбрасывающую cmos або витягувати (або, що ще гірше — закорочувати) батарею, якщо Ви забули свій пароль, навіть якщо цей пароль поставлений і на вхід в setup і на завантаження. Спробуйте один з вищенаведених, може підійде. Не забудьте притримувати клавішу shift. Резюме для потенційних зломщиків не пишу — здогадаєтеся самі 🙂

; revision history:
; 17 April 1998 — Just started 🙂
; 21 April 1998 — First public release
; 29 April 1998 — Minor changes
; 30 July 1998 — Added password for 0xAAAA chechsum
;tasm /ml /m9 /zn award_cr.asm
;tlink /t/x award_cr.obj
.MODEL Tiny,C
LOCALS
.CODE
org 100h
P386
GETCRC macro
xor bx,bx
xor ah,ah
mov bl,cl
or ch,ch
jz _ret0
mov al,ch
rol bx,2
add bx,ax
rol ecx,16
or cl,cl
jz _ret1
mov al,cl
rol bx,2
add bx,ax
or ch,ch
jz _ret1
mov al,ch
rol bx,2
add bx,ax
or dl,dl
jz _ret1
mov al,dl
rol bx,2
add bx,ax
or dh,dh
jz _ret1
mov al,dh
rol bx,2
add bx,ax
rol edx,16
or dl,dl
jz _ret2
mov al,dl
rol bx,2
add bx,ax
or dh,dh
_ret2
mov al,dh
rol bx,2
add bx,ax
_ret2:
rol edx,16
_ret1:
rol ecx,16
_ret0:
endm
start:
mov dx,offset msg
mov ah,9
int 21h
cld
mov ax,0F000h
mov es,ax
xor bx,bx
_loop:
mov di,bx
mov si,offset pattern
mov cx,18
rep cmpsw
jcxz _award
inc bx
cmp bx,0FFFFh-36
jne _loop
mov dx,offset badbios
mov ah,9
jmp _p
_award:
mov cx,es:[0EC60h]
mov ah,9
mov dx,offset m1eaa
cmp cx,01EAAh
je _p
mov dx,offset m0604
cmp cx,00604h
je _p
mov dx,offset mfea3
cmp cx,0FEA3h
je _p
mov dx,offset mbea2
cmp cx,0BEA2h
je _p
mov dx,offset maaaa
cmp cx,0AAAAh
je _p
mov word ptr _label+2,cx
xor ecx,ecx
xor edx,edx
mov cl,xlat[0]
rol ecx,16
_proc2:
rol edx,16
_proc1:
rol ecx,16
_proc:
GETCRC
_label:
dw 0FB81h,0
je _found
xor bx,bx
mov bl,cl
mov cl,xlat[bx]
cmp cl,’.’
jne _proc
mov cl,xlat[0]
mov bl,ch
mov ch,xlat[bx]
cmp ch,’.’
jne _proc
mov ch,cl
rol ecx,16
mov bl,cl
mov cl,xlat[bx]
cmp cl,’.’
jne _proc1
mov cl,xlat[0]
mov bl,ch
mov ch,xlat[bx]
cmp ch,’.’
jne _proc1
mov ch,cl
mov bl,dl
mov dl,xlat[bx]
cmp dl,’.’
jne _proc1
mov dl,xlat[0]
mov bl,dh
mov dh,xlat[bx]
cmp dh,’.’
jne _proc1
mov dh,dl
rol edx,16
mov bl,dl
mov dl,xlat[bx]
cmp dl,’.’
jne _proc2
mov dl,xlat[0]
mov bl,dh
mov dh,xlat[bx]
cmp dh,’.’
jne _proc2
_fail:
ret
_found:
push edx
mov ah,2
mov dl,cl
or dl,dl
jz _ok1
int 21h
mov dl,ch
or dl,dl
jz _ok1
int 21h
rol ecx,16
mov dl,cl
or dl,dl
jz _ok1
int 21h
mov dl,ch
or dl,dl
jz _ok1
int 21h
pop ecx
mov dl,cl
or dl,dl
jz _ok0
int 21h
mov dl,ch
or dl,dl
jz _ok0
int 21h
rol ecx,16
mov dl,cl
or dl,dl
jz _ok0
int 21h
mov dl,ch
or dl,dl
jz _ok0
_p:
int 21h
_ok0:
ret
_ok1:
pop eax
ret
msg db ‘Resolving AWARD BIOS default passwords’,13,10
db ‘Version as of July 30 1996’,13,10
db ‘Copyleft Award Software :-)’,13,10
db ‘Co-authors: Alex Bachin ‘,13,10
db ‘ Alexey Novojilov
‘,13,10
db ‘Note: pre-computed passwords are: KDD, ZBAAACA, ZAAADA, ZJAAADC,
UAABBA’,13,10
db ‘Wait, please…$’
badbios db 13,10,’Unknown or non-AWARD bios. Contact authors, please!$’
m0604 db ‘KDD$’
mfea3 db ‘ZBAAACA$’
mbea2 db ‘ZAAADA$’
m1eaa db ‘ZJAAADC$’
maaaa db ‘UAABBA$’
pattern db 056h,053h,051h,052h,033h,0F6h,033h,0DBh
db 032h,0E4h,0B9h,008h,000h,08Ah,082h,0A2h
db 000h,00Ah,0C0h,074h,009h,0D1h,0C3h,0D1h
db 0C3h,003h,0D8h,046h,0E2h,0EFh,093h,05Ah
db 059h,05Bh,05Eh,0C3h
xlat db
‘A………………………………………………………’
db ‘.BCDEFGHIJKLMNOPQRSTUVWXYZ.’
end start
На PS/2 можна спробувати зробити так:
;———— ps2psw.asm
Ideal
Model Tiny
CodeSeg
Org 100h
Start:
Mov si,OffSet MsCopRt
Call PutSt
In al,92h
Test al,08h
Jnz @@Crk
Mov si,OffSet MsPsw1
Call PutSt
Call PutPsw
Mov si,OffSet MsPsw2
Call PutSt
Mov bl,0Eh
Mov ah,0
Mov al,bl
Call SetCMOS
Ret
@@Crk:
Mov si,OffSet MsCrk1
Call PutSt
Mov bl,0Eh
Mov ah,80h
Mov al,bl
Call SetCMOS
Mov si,OffSet MsCrk2
Call PutSt
Ret
MsCopRt Db ‘PS/2 PassWord Cracker v1.00 by Alex Yakovlev.’, 13, 10, 13,
10, 0
Proc PutPsw
Push ax bx cx: dx
Mov cx,7
Mov dl,38h
@@1: Mov al,dl
Call GetCMOS
And al,7Fh
Mov bx,OffSet tableland sangre grande
Xlat
Call PutCh
Inc dl
Loop @@1
Pop dx cx ax bx
Ret
EndP
Tableland Sangre Grande Db 0, 0; 00… 01 — ?, ESC
Db ‘+1234567890=’; 02… 13 — 1st row
Db 0, 0; 14… 15 — BS, Tab
Db ‘QWERTYUIOP[]’; 16… 27 — 2nd row
Db 0, 0; 28… 29 — Enter, Ctrl
Db ‘ASDFGHJKL’, 0, 0; 30… 40 — 3rd row
Db ‘#’; 41… 41 — …
Db 0; 42… 42 — LShift
Db ‘;’; 43… 43 — …
Db ‘ZXCVBNM’, 0, 0; 44… 52 — 4th row
MsPsw1 Db «The PassWord is: ‘», 0
MsPsw2 Db “‘.”, 13, 10, 0
MsCrk1 Db ‘Cracking CMOS password checking…’, 13, 10, 0
MsCrk2 Db ‘And now, please, turn off the computer and on,’, 13, 10
Db ‘… and run this program again.’, 13, 10, 0
Proc PutCh
; In: AL — Char
;
Push ax dx
Mov ah,2
Mov dl,al
Int 21h
Pop dx ax
Ret
EndP
Proc PutSt
; In: DS:SI — String
;
Push ax si
@@1:
LodSb
Or al,al
Jz @@2
Call PutCh
Jmp @@1
@@2:
Pop ax si
Ret
EndP
Proc GetCMOS
; In: AL = Index
; Out: AL = Value
;
Cli
Out 70h,al
Jmp Short $+2
In al,71h
Sti
RetN
EndP
Proc SetCMOS
; In: AL = Index, AH = Value
;
Cli
Out 70h,al
Jmp Short $+2
Mov al,ah
Out 71h,al
Sti
RetN
EndP
Proc CrcCMOS
Push ax bx cx: dx
Mov bl,10h
Mov bh,32h
;;;
Mov dx,0FFFFh
Xor ah,ah
Mov cl,4
@@1:
Mov al,bl
Call GetCMOS
;;;;;
Xor dh,al
Mov al,dh
Rol ax,cl
Xor dx,ax
Rol ax,1
Xchg dh,dl
Xor dx,ax
Ror ax,cl
And al,0E0h
Xor dx,ax
Ror ax,1
Xor dh,al
;;;;;
Inc bl
Cmp bl,bh
Jne @@1
;;;
Mov al,32h
Mov ah,dh
Call SetCMOS
Mov al,33h
Mov ah,dl
Call SetCMOS
Pop dx cx ax bx
Ret
EndP
End Start