убрать пароль с учетной записи

Тема в разделе "WASM.BEGINNERS", создана пользователем San62, 29 мар 2007.

  1. lukash

    lukash New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2006
    Сообщения:
    142
    l_inc

    Извиняюсь. Ссылка действительно не по теме вопроса.

    P.S. Лучше не получилось:dntknw:
    А тема была - защита секторов ЖД. Из ПЗУ:)
     
  2. lukash

    lukash New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2006
    Сообщения:
    142
    l_inc

    Я вроде как немного разобрался, поправьте, если что не так.

    1) Сперва копируем себя в отрезанный у кусок памяти. С and al, 0FCh я так и не разобрался.
    2) Далее ИМНО прочитанный второй сектор с дискеты читается для того, чтоб проверить, находится наш код в обработчике 13-го прерывания, а НЕ для копирования 2-го сектора в MBR.

    Код (Text):
    1. seg000:002E                 mov     ax, 201h
    2. seg000:0031                 mov     cl, 2
    3. seg000:0033                 cdq
    4. seg000:0035                 mov     bh, 2
    5. seg000:0037                 int     13h          
    6. seg000:0039                 jb      short loc_50
    7. seg000:003B                 cli
    8. seg000:003C                 mov     eax, dword ptr ds:unk_4C
    9. seg000:0040                 mov     es:77h, eax
    10. seg000:0045                 mov     word ptr ds:unk_4C, 6Ah
    11.  
    12.  
    13. seg000:0050 loc_50:                                 ; CODE XREF: seg000:0039j
    14. seg000:0050                 push    es
    15. seg000:0051                 push    55h
    16. seg000:0054                 retf
    И если нашего кода в обработчике нет, по смещению 003C устанавливаем вектор 13-го прерывания на наш обработчик.

    3) Далее переходим по смещению 55h, который и копирует первый сектор с винта (cx = 1!) по адресу 0:7с00h, и передает управление MBR командой jmp far ptr 0:7C00h

    4) Наш код в обработчике 13-го прерывания проверяет(смещение seg000:006A, которое было выставлено по смещению seg000:0045), произошло ли чтение с диска, если да, проверяем что мы читаем, и если нужно, подменяем информацию.

    Начало 13-го обработчика:

    Код (Text):
    1.  loc_6A:                                 ; DATA XREF: seg000:5A045o
    2. seg000:006A                 pushf
    3. seg000:006B                 cmp     ah, 42h ; 'B'
    4. seg000:006E                 jz      short loc_7B
    5. seg000:0070                 cmp     ah, 2
    6. seg000:0073                 jz      short loc_7B
    7. seg000:0075                 popf
    8. seg000:0076
    9. seg000:0076 loc_76:                                 ; DATA XREF: seg000:0082r
    10. seg000:0076                                         ; seg000:5A040w
    11. seg000:0076                 jmp     far ptr loc_0
    Вот еще цитата со статьи:

     
  3. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    lukash
    Большое спасибо. Разобрался. Вы правы.
    Только в приведенном коде у Вас 5 байтов пропущены: как раз там, где сегментная часть смещения на место указателя на обработчик пишется и разрешаются прерывания.