wordpress适合做大型网站吗,容桂做pc端网站,app是基于什么开发的,看网站搜索什么关键词原文发表于百度空间#xff0c;2009-07-14 标准的驱动与ring3的通信过程是这样的#xff1a;驱动中创建设备#xff0c;并为设备创建符号链接#xff0c;ring3用CreateFile打开符号链接得到设备句柄#xff0c;然后DeviceIoControl发送ControlCodeDeviceIoControl的内容被…原文发表于百度空间2009-07-14 标准的驱动与ring3的通信过程是这样的驱动中创建设备并为设备创建符号链接ring3用CreateFile打开符号链接得到设备句柄然后DeviceIoControl发送ControlCodeDeviceIoControl的内容被封装成IRP到达DeviceDevice其所属Driver的对应派遣例程对IRP进行处理处理完后IoCompleteRequest完成该IRP最后返回到ring3.如果有必要的话还得用Event进行一下同步~ 如果没有Device(甚至还可能没有DriverObject)这一切该如何进行道理其实是很简单的我们不要拘泥于某些固定的东西不变来好好想一想。先扯点通信的东西。通信就是把信息从发信者传送到收信者的过程信息传输的通道就是信道。我们的目标是把信息从ring3传递到驱动中去,上面的标准通信过程其实只不过是相当于我们自己建立了一个标准信道没有Device只是说不能用标准信道来通信了但是还可以有别的通信方法只要我们能把信息从ring3传递给驱动任何方法都可以~~我来随便说几种吧 一、共享内存Eventring3用CreateFileMapping创建一块命名的共享内存,还有一个事件对象ring0中获取相应的对象共享内存中的内容事先定好格式比如哪里是ControlCode哪里是InputLength,哪里是OutputLength哪里是InputBuffer哪里是OutputBuffer构成一个简单的协议包这其实相当于一个变形的IRP结构~~当需要通信的时候ring3将相应的内容写入共享内存然后设置Event通知驱动驱动收到后就可以从共享内存中取到ControlCode,InputLen,InputBuffer等等信息进行相应处理就可以了处理完后再以Event通知ring3ring3就可以从OutputBuffer中获取处理结果了不过这里没有考虑异步模式一般自己的驱动也很少用异步~ 二、Hook IopXxxControlFileNtDeviceIoControlFile直接调用IopXxxControlFile进行处理很容易Hook(Call替换方式hook最好安全)也没有SSDT Hook那么扎眼。Hook该函数最大的好处是你仍然可以使用标准的DeviceIoControl来发送ControlCode和驱动通信.Hook成功后可以打开任意一个Device比如Beep然后就可以用DeviceIoControl发送ControlCode了当然ControlCode得有点特殊标记(比如某个特殊标志位)总之你得能认出来这是你的ring3 App发来的ControlCode就行,然后Hook函数中如果是自己的ControlCode就进行相应处理否则调用原始函数让系统处理去吧。或者自己使用一个特殊的无效句柄(但是要保证能通过检查到达ring0)来发DeviceIoControl驱动中检查此句柄是否是某特殊值是则认为是自已人发的ControlCode进行处理就OK了。 稍微变形一点直接Hook掉Beep的IRP_MJ_DEVICE_CONTROL派遣例程然后ring3直接打开Beep用DeviceIoControl发ControlCode就行了~~ 三、Hook NativeAPI先举两个例子:HideToolz没有Device,是使用ZwTerminateProcess来通信的~某游戏的驱动用ZwQueryVirtualMemory来通信~~不需要说什么了吧NativeAPI都要经过syscall进入ring0然后可能继续到达某些XX位置只要在适当的位置拦截一下取走自己的信息就行了~其实只要能把信息传递给驱动很多API都可以(当然纯ring3实现的API不行哦) 方法还有好多好多标准方法就那么一两种但是非标准的方法有多少种尽情发挥想像吧~~转载于:https://www.cnblogs.com/achillis/p/10181781.html