首页
社区
课程
招聘
[求助]捕获win32k.sys中指针访问异常
发表于: 2013-10-30 11:54 4794

[求助]捕获win32k.sys中指针访问异常

2013-10-30 11:54
4794
在windows 2003上运行一个旧程序时很容易出现蓝屏。使用windbg调试发现,在win32k!NtGdiQueryFontAssocInfo中有一处空指针异常,即图中的test语句:

在windbg中,手动修改了一下异常出现后对应的寄存器,使它变为堆栈中的另一个变量而不是空指针,程序就可以继续运行下去。如何用程序来解决这个问题,而且不用启动内核调试模式?

我想到的方法有两个,一是修改win32k.sys文件,增加代码,使之在使用指针前检查一下是否为空指针。但是windows有系统文件保护机制,而且也不知道如何像windows补丁那样在重启后自动替换原来的文件。二是修改ssdt里NtGdiQueryFontAssocInfo,使之指向一个新函数。这种方式有可能被杀毒软件识别并禁止。

不知道各位有没有好的办法?我上面说的两个方法是否可行?

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这个问题多半是你那个旧程序的问题,而不是什么win32k.sys出现空指针的问题。你的旧程序,调用了某个系统调用,传入的参数应该不是NULL的时候,未经检查,传入了一个NULL参数,结果导致win32k.sys出现空指针。
这不是win32k.sys的问题,而是你那个旧程序的问题。
2013-10-30 14:09
0
雪    币: 195
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这个异常肯定与那个旧应用程序相关,因为只有它运行时才不定时出现蓝屏。所以,我花了较多的时间来跟踪异常产生时每个函数调用,但并没有发现任何异常。它是一个DEPHI程序,异常产生时堆栈如下:


虽然异常产生是arg0为00000000,但向上看,所有的系统函数以及VCL库函数的参数都是正确的,即有效字符串和正确的字符串长度。以正确的参数调用了系统函数,中间出现了错误,这显然不是应用程序的问题 -- 它至多有间接影响。

另外,我单步跟踪时发现在调用NtGdiQueryFontAssocInfo时,arg0这个位置的值并不是零,而是在调用LFONTOBJ::LFONTOBJ之后它才变为零的。
上传的附件:
2013-10-30 15:01
0
雪    币: 195
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
有人可以解决这个问题吗?有报酬的。
2013-10-31 09:45
0
游客
登录 | 注册 方可回帖
返回
//