Крис Касперски - Восстановление данных. Практическое руководство

Тут можно читать онлайн Крис Касперски - Восстановление данных. Практическое руководство - бесплатно ознакомительный отрывок. Жанр: Все книги в жанре Компьютерное "железо", издательство БХВ-Петербург, год 2006. Здесь Вы можете читать ознакомительный отрывок из книги онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.

Крис Касперски - Восстановление данных. Практическое руководство краткое содержание

Восстановление данных. Практическое руководство - описание и краткое содержание, автор Крис Касперски, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Книга представляет собой пошаговое руководство по восстановлению поврежденных данных на жестких и оптических дисках. Подробно рассмотрена структура популярных файловых систем: NTFS, ext2/ext3, UFS/FFS и др. Описаны автоматические методы восстановления данных для операционных систем Windows и Linux. Приведены способы ручного восстановления, используемые в случае, когда автоматическое восстановление невозможно. Материал сопровождается большим количеством полезных советов и исчерпывающим справочным материалом. На компакт-диске помешены полезные утилиты и исходные коды, приведенные в книге.

Для пользователей ПК

Восстановление данных. Практическое руководство - читать онлайн бесплатно ознакомительный отрывок

Восстановление данных. Практическое руководство - читать книгу онлайн бесплатно (ознакомительный отрывок), автор Крис Касперски
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

MOV CX, [SI+2] ; Стартовый сектор с цилиндром INT 13h

JC error ; Ошибка чтения

;Обрабатываем считанный boot-сектор или расширенную таблицу разделов

;===================================================================

;

CMP byte [SI], 80h

JZ LOAD_BOOT ; Это загрузочный сектор

; Передаем на него управление

CMP byte [SI+4], 05h

JZ LOAD_CHS_EXT ; Это расширенная таблица разделов

; в формате CHS

CMP byte [SI+4], 0Fh

JZ LOAD_LBA_EXT ; Это расширенная таблица разделов

; в формате LBA

ADD SI, 10h ; Переходим на следующий раздел

CMP SI, 1EEh

JNA read_all_partitions ; Читаем все разделы один за другим

... buf rb 512 ; Буфер на 512 байт

Запись сектора в режиме CHS происходит практически точно так же, только регистр AHравен не 02h, a 03h. С режимом LBA разобраться намного сложнее, но мы, как настоящие хакеры, его обязательно осилим.

Чтение сектора осуществляется функцией 42h( AH = 42h). В регистр DL, как и прежде, заносится номер привода, а вот регистровая пара DS:SIуказывает на адресный пакет (disk address packet), представляющий собой продвинутую структуру формата, описанного в табл. 5.4.

Таблица 5.4. Формат адресного пакета, используемый для чтения и записи секторов в режиме LBA

Смещение Тип Описание
00h BYTE Размер пакета — 10hили 18h
01h BYTE Поле зарезервировано и должно быть равно нулю
02h WORD Сколько секторов читать
04h DWORD 32-разрядный адрес буфера-приемника в формате seg:offs
08h QWORD Стартовый номер сектора для чтения
10h QWORD 64-разрядный плоский адрес буфера-приемника. Используется только в случае, если 32-разрядный адрес равен FFFF:FFFF

Код, читающий сектор в режиме LBA, в общем случае выглядит так, как показано в листинге 5.7.

Листинг 5.7. Код, осуществляющий чтение сектора с диска в режиме LBA

MOV DI, 1BEh ; Перейти к первому разделу

MOV AX, CS ; Настраиваем...

MOV buf_seg ; ...сегмент

MOV EAX, [DI+08h] ; Смещение partition относительно

; начала раздела

ADD EAX, EDI ; EDI должен содержать номер сектора

; текущего MBR

MOV [X_SEC] ;

...

read_all_partitions:

MOV АН, 42h ; Читать сектор в режиме LBA

MOV DL, 80h ; Читать с первого диска

MOV SI, dap ; Смещение адресного пакета INT 13h

JC error ; Ошибка чтения

...

dap:

packet_size db 10h ; размер пакета 10h байт

reserved db 00h ; "Заначка" для будущих расширений

N_SEC dw 01h ; Читаем один сектор

buf_seg dw 00h ; Сюда будет занесен сегмент буфера-приемника

buf_off dw buf ; Смещение буфера-приемника

X_SEC dd 0 ; Сюда будет занесен номер сектора для чтения

dd 0 ; Реально не используемый хвост

; 64-битного адреса

buf rb 512 ; Буфер на 512 байт

Запись осуществляется аналогично чтению, только регистр AHсодержит не 42h, a 43h. Регистр ALопределяет режим: если бит 0 равен 1, BIOS выполняет не запись, а ее эмуляцию. Бит 2, будучи взведенным, задействует запись с проверкой. Если регистр ALравен 0, выполняется обыкновенная запись по умолчанию.

Теперь, освоившись с дисковыми прерываниями, перейдем к обсуждению остальных аспектов программирования.

Создаем код загрузчика

Лучше всего загрузчики программируются на FASM. С точки зрения ассемблера загрузчик представляет собой обыкновенный двоичный файл, предельно допустимый объем которого составляет 1BBh(443) байт. Немного? Но не будем спешить с выводами. Всякий раздел всегда начинается с начала цилиндра, а это значит, что между концом MBR и началом раздела имеется, по меньшей мере, n свободных секторов, где n == sectors per track. Практически все современные винчестеры имеют по 64 сектора на дорожку, что дает нам: 443 + 63*512 == 32 699байт или приблизительно 32 Кбайт. Да в этот объем даже графический интерфейс с мышью уместить можно! Однако делать этого мы не будем. Настоящие хакеры работают в текстовом режиме с командной строкой.

Как уже говорилось, BIOS загружает MBR по адресу 7C00h, поэтому в начале ассемблерного кода должна стоять директива ORG 7C00h, а еще — USE16, ведь загрузчик выполняется в 16-разрядном реальном режиме. Позже, при желании, он может перейти в защищенный режим, но это будет уже потом. Не будем лезть в такие дебри.

Обнаружив загрузочный раздел (а обнаружить это можно по флагу 80h, находящемуся по нулевому смещению от начала раздела), загрузчик должен считать первый сектор этого раздела, поместив его в памяти по адресу 0000:7C00h, то есть в точности поверх своего собственного тела. А вот это уже нехорошо! И чтобы не вызвать крах системы, загрузчик должен заблаговременно перенести свое тело по другому адресу, что обычно осуществляется командой MOVSB. Копироваться можно по любому из адресов памяти — от 0080:0067hдо 9FE00h. Память, расположенную ниже 0080:0067h, лучше не трогать, так как здесь находятся вектора прерываний и системные переменные BIOS, а от A000hи выше начинается область отображения ПЗУ, так что предельно доступный адрес равен A000h - 200h (размер сектора) == 9FE00h.

Не забывайте, что трогать регистр DLни в коем случае нельзя, поскольку в нем передается номер загрузочного привода. Некоторые загрузчики содержат ошибку, всегда загружаясь с первого жесткого диска, и это в то время, как BIOS уже больше 10 лет как позволяют менять порядок загрузки, и потому загрузочным может быть любой привод.

По правде говоря, FASM — это единственный известный мне ассемблер, "переваривающий" команду дальнего вызова JMP 0000:7C00hнапрямую. Все остальные ассемблеры заставляют извращаться приблизительно так: PUSH offset_of_target/PUSH segment_of_target/RETF. Здесь мы заталкиваем в стек сегмент и смещение целевого адреса и выполняем дальний RETF, переносящий нас на нужное место. Еще можно воспользоваться самомодифицирующимся кодом, собрав команду JMP FAR"вручную", или просто расположить целевой адрес в одном сегменте с исходным адресом (например, 0000:7C00h0000:7E00h). Однако эти подходы муторны и утомительны.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Крис Касперски читать все книги автора по порядку

Крис Касперски - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Восстановление данных. Практическое руководство отзывы


Отзывы читателей о книге Восстановление данных. Практическое руководство, автор: Крис Касперски. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x