2009-360网络攻防比赛整理

360网络攻防007比赛第1题

磁盘保护挑战题
这个题一共写了5种写法的可能有重复的写法,先说说自己简单理解MBRPROT是怎么保护的首先加载MBRPROT后他会找到磁盘真实设备对象+0x28 DeviceExtension应该是个_FDO_EXTENSION结构会改变这个结构的+0xC DeviceObject 为自己的设备对象这样系统在进行读写操作时就会一步步的进入IoStartPacket函数中调用DeviceObject->DriverObject->DriverStartIo( DeviceObject, Irp )调用了MBRPROT的DriverStartIo函数然后他在自己的DriverStartIo进行判断是否为写1扇区的进行拦截。
MBRPROT拦截的流程

我的第1中写法是HOOK了IoStartPacket( 因为在IoStartPacket中会调用DriverStartIo进行读写)把调用DriverStartIo都改成atapi的DriverStartIo这样就再进行读写时就不会进到MBROPR的DriverStartIo中了。

第2中写法是自己找到真实设备对象然后把他的DeviceExtension+0xC DeviceObject改为正确的设备对象这样也不会进到MBROPR的DriverStartIo中了。
1,2种方法可以使任何软件工具都可以正常写入1扇区的。

第3种写法是自己直接发SRB写操作给atapi的DriverStartIo这样也会绕过MBRPROT的保护这样就可以写1扇区了但问题也出现了:如果说MBRPROT有2重保护的话我理解的是第1层是保护用WINHEX等不能往1扇区写入东西,就是拦截1扇区的写入,第2层是在拦截1扇区的写入同时自己也会发IRP来使1扇区清零的,这样如果你绕过第1层保护成功的写入了1扇区那你再用WINHEX查看并试着用WINHEX随便往1扇区写点东西来试MBRPROT的保护是否开启的时候MBRPROT也会让你第1次成功的写入变为没有的,这样我们刚才给atapi的DriverStartIo发的写操作也会变为没有的我采用的方法是在给atapi的DriverStartIo发写操作后HOOK atapi的DriverStartIo 判断如果是往1扇区写入操作的话我把他的Srb->DataBuffer内容改成自己的东西 因为MBRPROT清0操作会经过这里的。

Read More