Как узнать паpоль после загpузки?
в 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
Hа 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 Tabl
Xlat
Call PutCh
Inc dl
Loop @@1
Pop dx cx bx ax
Ret
EndP
Tabl 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 the computer off 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 si ax
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 bx ax
Ret
EndP
End Start
|