社区
驱动开发/核心开发
帖子详情
在Hook的ZwCreateFile函数中读写注册表,加载该驱动重启失败
waltsin
2009-06-05 01:29:08
我Hook了ZwCreateFile,在里面读注册表,编译出来安装后,重启系统失败,查了一些资料,是不是跟ZwCreateFile运行的kernel mode或者user mode有关啊,应该怎么修改呢?
...全文
207
16
打赏
收藏
在Hook的ZwCreateFile函数中读写注册表,加载该驱动重启失败
我Hook了ZwCreateFile,在里面读注册表,编译出来安装后,重启系统失败,查了一些资料,是不是跟ZwCreateFile运行的kernel mode或者user mode有关啊,应该怎么修改呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bainan
2009-07-13
打赏
举报
回复
确实是Start值的问题
waltsin
2009-06-19
打赏
举报
回复
不好意思,前几天出去了一下
我把start值改成auto后,系统启动正常,程序功能正常
估计应该是注册表没有加载,或者这种文件过滤驱动(我是说挂钩ZwCreateFile的文件过滤驱动)本身需要依赖于某个程序
注册表中GroupOrderList下好多组,我试着将驱动放到组里,但是没成功
finicswang
2009-06-09
打赏
举报
回复
WinDBG 单步调试一下吧,确认一下究竟哪段代码出了问题.
装个虚拟机,然后双机调试,应该还是有帮助的.
同时你的驱动启动时,"注册表还没有加载"也是非常值得怀疑的.尝试一下把你的驱动和别的驱动之间加个Dependency,让驱动晚点被加载.
"如果你的驱动程序的Start值设置为0,在初始化时大部分注册表键是没有加载的,不能访问。"
把你的Start 值设置为手动再尝试一下.
jnkandy
2009-06-09
打赏
举报
回复
ZwOpenKey那行出错
刚开始接触驱动,双机调试还没弄好,还没跟出来错误原因
我在弄双机调试,呵呵
cnzdgs
2009-06-08
打赏
举报
回复
具体是哪行代码出什么错?
waltsin
2009-06-07
打赏
举报
回复
以下是部分代码:
RtlInitUnicodeString(®String, L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Services\\自定义项");
RtlInitUnicodeString(&ValueName, L"自定义键");
//KeStallExecutionProcessor(3000);
//初始化OBJECT_ATTRIBUTE
InitializeObjectAttributes(&objAttrib, ®String, OBJ_CASE_INSENSITIVE, NULL, NULL);
//打开注册表
status = ZwOpenKey(&hRegister, KEY_READ, &objAttrib);
if (!NT_SUCCESS(status))
{
return ((ZWCREATEFILE)(OldZwCreateFile)) (FileHandle, DesiredAccess,
ObjectAttributes, IoStatusBlock, AllocationSize, FileAttributes,
ShareAccess, CreateDisposition, CreateOptions, EaBuffer, EaLength);
}
//获取注册表键值数据长度并申请内存
……
//获取数据
status = ZwQueryValueKey(hRegister, &ValueName, KeyValuePartialInformation, KeyValue, ValueDataLen, &ValueDataLen);
if (!NT_SUCCESS(status))
{
if (hRegister != NULL)
{
ZwClose(hRegister);
hRegister = NULL;
}
if (KeyValue != NULL)
{
ExFreePool(KeyValue);
KeyValue = NULL;
}
return ((ZWCREATEFILE)(OldZwCreateFile)) (FileHandle, DesiredAccess,
ObjectAttributes, IoStatusBlock, AllocationSize, FileAttributes,
ShareAccess, CreateDisposition, CreateOptions, EaBuffer, EaLength);
}
if (hRegister != NULL)
{
ZwClose(hRegister);
hRegister = NULL;
}
请前辈指点
今天有点晚了,前辈有时间帮忙给看看吧
先谢过了 呵呵
asideu
2009-06-07
打赏
举报
回复
应该是加载顺序的问题吧 你试验下 双机调试 找找自己错误的来源
或者 你直接在不能访问的时候就 返回 看看能不能卡住
鸡生蛋蛋生鸡 启动的时候最麻烦了
如果真需要的话 不要把数据放注册表里面 放系统外面 比方硬盘上 bios里
waltsin
2009-06-07
打赏
举报
回复
路径没有写错
我这个程序中挂钩了两个函数
一个是ZwOpenFile,一个是ZwCreateFile
在ZwOpenFile中访问注册表没有问题
但是在ZwCreateFile中访问注册表,重启的时候就死住了
如果路径不对,调试的时候也应该报错才对
cnzdgs
2009-06-07
打赏
举报
回复
延迟是不行的。
驱动程序自己对应的注册表键是已经加载了的,可能是路径写法不对,你试试用DriverEntry函数参数中传过来的路径来访问。
waltsin
2009-06-07
打赏
举报
回复
找到一个延迟的函数KeStallExecutionProcessor,呵呵
waltsin
2009-06-07
打赏
举报
回复
但是我读的是HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下我自定义的键的,在初始化的时候应该已经加载了才对啊
waltsin
2009-06-07
打赏
举报
回复
对
我刚才查了资料,有人说加个延迟
但是我不知道驱动中如何延迟
应用程序中可以使用sleep,但是驱动中呢?
也有人说用ZwLoadKey加载的,不知道哪种方式好,我想都试试
呵呵
cnzdgs
2009-06-07
打赏
举报
回复
我现在只用WinDbg调试,虽然不太好用,但毕竟是MS提供的,调试MS的操作系统比较可靠。
如果你的驱动程序的Start值设置为0,在初始化时大部分注册表键是没有加载的,不能访问。
waltsin
2009-06-07
打赏
举报
回复
我使用DriverMonitor加载驱动,可以正常运行,功能也实现了,使用Syser加载也可以正常运行,但是重启时系统死住了
后来我把访问注册表的代码都屏蔽掉,重启系统就没事了
访问注册表我使用的是ZwOpenKey、ZwQueryValueKey函数,在调用ZwOpenKey的时候就死住了
实在想不通
waltsin
2009-06-07
打赏
举报
回复
楼上前辈使用什么调试工具啊?
除了DriverStdio之外,前辈可否推荐一款比较好用的
cnzdgs
2009-06-05
打赏
举报
回复
与mode无关,调试看执行到哪里出问题。
C++实现
HOOK
D3D绘制
函数
,实现透视,上色
只要是D3D游戏肯定会走D3D绘制
函数
,学会就能干掉所有D3D,实现透视。 深刻理解
HOOK
的原理,理解D3D
hook
原理,如何关闭Z缓冲,筛选人物模型,人物上色,注入器的写法,人物模型工具的写法。
逆向基础-Windows
驱动
开发(一)
驱动
开发
系统服务挂钩(
HOOK
) -1
开发者为了捕获各种事件,可以挂钩文件创建
函数
Create
File
,
注册表
访问
函数
Reg
Create
Key。使用挂钩可以改变操作系统的行为,只要适当地改变挂钩的数据结构和上下文,足够引起新的行为。例如,通过挂钩Nt
Create
File
...
恶意样本分析手册——API
函数
篇
文件类、网络类、
注册表
与服务类、进程线程类、注入类、
驱动
类、加密与解密、消息传递等各种类别恶意样本分析。 文件类 kernel32!
Create
File
功能:这是一个多功能的
函数
,可打开或创建以下对象,并返回可访问的...
对360沙盒的
驱动
的一点逆向分析
360沙箱文件系统监控分析一.360Box沙箱DriverEntry
函数
安装
驱动
过滤框架分析360Box沙箱的
驱动
入口代码如下所示,下面单步跟踪分析入口代码安装360对
注册表
、进程、文件系统等过滤
函数
的安装过程。从下代码可以...
驱动开发/核心开发
21,597
社区成员
21,709
社区内容
发帖
与我相关
我的任务
驱动开发/核心开发
硬件/嵌入开发 驱动开发/核心开发
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章