首页
社区
课程
招聘
未解决 [求助]关于windows驱动编程中的内核函数ZwReadFile的问题,希望师傅们可以指点我一下,不胜感激
发表于: 2019-5-1 23:25 1209

未解决 [求助]关于windows驱动编程中的内核函数ZwReadFile的问题,希望师傅们可以指点我一下,不胜感激

2019-5-1 23:25
1209
**前置条件:
环境win_xp
最近在学习Rootkit关于文件隐藏的知识,病毒学习的例子是AK922,结合大佬的博客和自己逆向静态分析,大致弄清楚了其隐藏文件的原理:
一、判断当发送的IRP请求类型为IRP_MJ_DIRECTORY_CONTROL && IRP_MN_QUERY_DIRECTORY 时,表示返回的数据关于文件目录的,将这个IRP包做修改,删除其中的AK922,做到了对普通文件浏览器的隐藏。这部分没有什么问题
二、判断当发送的IRP请求为IRP_MJ_READ时,如果发送的目标设备在设备列表中(这里的设备列表来自加载时遍历得到的),表示驱动在请求设备对象的数据。也就是磁盘数据,那么根据FAT32和NTFS文件系统的相关知识,FAT32下置删除位0xe5,再将文件名修改为0填充,NTFS下判断返回包中的FILE、INDX字符串,在对应文件名的偏移处做置0处理,做到了Disk级别的隐藏。
**问题:
我在理解上面的知识的前提下,使用CreateFile创建磁盘句柄,ZwReadFile读取返回句柄的信息,也就是读磁盘数据,这时我发现使用这个函数读取到的数据无论AK922是否加载,都没有变,这是为什么?
**疑惑的点:
一、ZwReadFile向磁盘发送IRP请求,请求的类型就是IRP_MJ_READ(不知道这么理解是不是对的),但为什么没有被AK922中的过滤掉(*****),使用ring3层 的函数readfile也是相同的结果,也就是说ReadFile能在AK922加载的条件下返回磁盘的真实数据来。这是为什么?
二、使用DiskGinus工具分析的时候,加载AK922后文件消失,说明AK922的确做到了disk级的隐藏,但我想查看DiskGinus中的16进制数据时可能由于驱动冲突蓝屏重启

希望师傅们可以指点一些,谢谢啦(:

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//