You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++如何指定MBR偏移量?仅覆盖MBR末尾2字节引导签名的方法

如何仅覆盖MBR末尾的2字节引导签名?

嘿,这完全可以实现!你目前的代码已经走对了方向,只需要调整一下文件指针的位置,精准命中MBR最后那两个字节的引导签名就行。下面是具体的修改步骤和完整代码示例:

关键修改点

  • 精准定位目标位置:MBR总大小是512字节,引导签名55h AAh位于第510和511字节(从0开始计数),所以需要把文件指针移动到偏移量510的位置(起始点为文件开头)。
  • 调整写入数据的长度:你只需要写入2个0字节,所以数组可以简化为char dataWrite[2] = {0x00, 0x00};。
  • 增加错误检查:对CreateFile、SetFilePointer、WriteFile的返回值做判断,避免操作失败却不知情。

完整修正代码

#include <windows.h>
#include <stdio.h>

int main() {
    // 准备要写入的2个0字节
    char dataWrite[2] = {0x00, 0x00};
    DWORD bytesWritten;

    // 打开物理驱动器0(注意:必须以管理员权限运行)
    HANDLE MasterBootRecord = CreateFile(
        "\\\\.\\PhysicalDrive0",
        GENERIC_WRITE,
        FILE_SHARE_READ | FILE_SHARE_WRITE,
        NULL,
        OPEN_EXISTING,
        0,
        NULL
    );

    if (MasterBootRecord == INVALID_HANDLE_VALUE) {
        printf("打开驱动器失败!错误码:%d\n", GetLastError());
        return 1;
    }

    // 将文件指针移动到MBR的第510字节位置(从0开始计数)
    DWORD dwPtr = SetFilePointer(
        MasterBootRecord,
        510,  // 偏移量:MBR最后2字节的起始位置
        NULL,
        FILE_BEGIN  // 从文件开头开始计算偏移
    );

    if (dwPtr == INVALID_SET_FILE_POINTER) {
        printf("设置文件指针失败!错误码:%d\n", GetLastError());
        CloseHandle(MasterBootRecord);
        return 1;
    }

    // 写入2个0字节覆盖引导签名
    BOOL writeSuccess = WriteFile(
        MasterBootRecord,
        dataWrite,
        sizeof(dataWrite),
        &bytesWritten,
        NULL
    );

    if (!writeSuccess || bytesWritten != sizeof(dataWrite)) {
        printf("写入失败!错误码:%d,实际写入字节数:%d\n", GetLastError(), bytesWritten);
        CloseHandle(MasterBootRecord);
        return 1;
    }

    printf("成功覆盖MBR引导签名!\n");
    CloseHandle(MasterBootRecord);
    return 0;
}

重要注意事项

  • 必须管理员权限:操作物理驱动器需要极高权限,一定要以管理员身份运行程序,否则CreateFile会失败。
  • 风险预警:修改MBR可能导致系统无法启动,操作前务必备份MBR(可以先读取512字节保存到文件)。
  • 错误处理:代码里的错误检查非常重要,能帮你快速定位问题,比如驱动器不存在、权限不足等情况。

内容的提问来源于stack exchange,提问作者x3kuro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:03:16