On-Line Библиотека www.XServer.ru - учебники, книги, статьи, документация, нормативная литература.
       Главная         В избранное         Контакты        Карта сайта   
    Навигация XServer.ru


Лучшие тестомесильные машины instpass.ru.





 

Как узнать па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


Литература по Assembler