刻苦钻研了使用驱动直接使用IN/OUT指令来修改MBR,但是读取成功了,而写MBR却一直没有进展,到现在也没有写进去,汗…
根据网友提供的链接发现了这篇文章,http://www.codeproject.com/KB/system/rawsectorio.aspx。以下所有的个人看法全部依据本文。
在看这篇文章之前倒是了解过winhex这款软件,也使用这个软件在ring3下修改了MBR,所以就怀着一腔的幻想去调试winhex,结果可想而知,莫有结果,只找到一个函数KiFastSystemCall,由于之前对这些深层的东西没有什么了解,所以也算是有所收获,到这里也就以失败告终了。
发现KiFastSystemCall函数时以为winhex内部用了非正常手段,看了这篇文章后才突然觉悟可能是winhex内部调用的系统API然后由API调用的KiFastSystemCall函数(好像是用来跳转到ring0的吧),所以也就纠正了原来的错误,通过那篇文章(当然要保证链接到文章的正确性),另外了解到的是IoCallDriver原来也是可以利用的。
之前还一直认为IoCallDriver会把IRP传递给传入的DEVICE_OBJECT参数的device stack的栈顶DEVICE_OBJECT,现在回头想想,简直太可笑了,因为这肯定是错误的,IoCallDriver肯定不可能这样做,如果这样做的话IRP就不会被一层层传递下去了,呵呵(自嘲…)
绕过过滤驱动:IoCallDriver与自定义IRP

本文介绍了如何利用IoCallDriver直接传递自定义IRP给目标设备,以绕过过滤驱动。通过IoGetDeviceObjectPointer获取DeviceObject指针,或者使用未文档化的ObReferenceObjectByName函数获取DriverObject指针,从而访问设备。虽然无法避免底层Driver的HOOK,但此方法可以避开一些上层Driver。构造IRP是难点,建议参考网上的资源进行学习。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



