Восстановление данных. Практическое руководство, стр. 28
Обнаружив загрузочный раздел (а обнаружить это можно по флагу
80h0000:7C00hMOVSB0080:0067h9FE00h0080:0067hA000hA000h - 200h (размер сектора) == 9FE00hНе забывайте, что трогать регистр
DLПо правде говоря, FASM — это единственный известный мне ассемблер, "переваривающий" команду дальнего вызова
JMP 0000:7C00hPUSH offset_of_target/PUSH segment_of_target/RETFRETFJMP FAR0000:7C00h0000:7E00hВ общем, скелет нашего загрузчика будет выглядеть так, как показано в листинге 5.8.
Листинг 5.8. Скелет простейшего загрузчика, написанный на FASM
use16ORG 7C00hCLD ; Копируем слева направо ; (в сторону увеличения адресов)MOV SI,7C00h ; Откуда копироватьMOV DI,7E00h ; Куда копироватьMOV CX,200h ; Длина сектораREP MOVSB ; Копируем; // Выбираем раздел, который мы хотим загрузить,; // считываем его в память по адресу 0000:7C00h; // (см. листинги 5.7 и 5.6)JMP 0000:7C00h ; Передаём управление на загрузочный секторПод старушкой MS-DOS записать свой загрузчик в MBR было просто. Для этого достаточно дернуть прерывание
INT 13h03hCreateFile\\.\PHYSICALDRIVE0ReadFileWriteFiledwCreationDispositionOPEN_EXISTINGdwShareModeFILE_SHARE_WRITEЗаконченный пример вызова
CreateFileЛистинг 5.9. Открытие непосредственного доступа к жесткому диску под Windows NT
XOR EAX,EAXPUSH EAX ; hTemplateFilePUSH dword FILE_ATTRIBUTE_NORMAL ; dwFlagsAndAttributesPUSH dword OPEN_EXISTING ; dwCreationDispositionPUSH EAX ; lpSecurityAttributesPUSH dword FILE_SHARE_WRITE ; dwShareModePUSH dword (GENERIC_WRITE OR GENERIC_READ) ; dwDesiredAccessPUSH DEVICE_NAME ; Имя устройстваCALL CreateFile ; Открываем устройствоINC EAXTEST EAX,EAXJZ errorDEC EAX...DEVICE_NAME db "\\.\PHYSICALDRIVE0",0BUF RB 512 ; БуферОткрыв физический диск и убедившись в успешности этой операции, мы должны прочитать оригинальный MBR-сектор в буфер, перезаписать первые
1BBh55h AAhПравда, вполне возможно, что внесенные вами изменения и не подумают вступать в силу. Загрузчик жестоко мстит за малейшие ошибки проектирования. Поэтому, чтобы не потерять содержимое своих разделов, для начала лучше попрактиковаться на VMWare или любом другом эмуляторе PC.
Под Windows 9x, разумеется, трюк с
CreateFileПрежде чем писать собственный загрузчик, рекомендуется изучить существующие нестандартные загрузчики. Все перечисленные ниже загрузчики распространяются по лицензии GPL или BSD, то есть без ограничений.
□ Ge2000.asm — тщательно прокомментированный Stealth-вирус, подменяющий системный загрузчик своим собственным. Хоть это и вирус, но он не опасен и может быть использован в учебных целях.