阅读:1531回复:8
hook ssdt怎么受driverstudio的影响呢?
在我的XP系统里面我hook了zwopenprocess,BSOD发生了,但同样的代码在一些机器上运行正常。我在本机装上Compuware_DriverStudio_v3.1准备调试,结果装完后又好了,但我卸载了driverstudio以后又发生了BSOD。然后我用windbg分析dump文件,结果是:
FAULTING_IP: ProSer!HookSystemCall+25 [d:\proser_w2k\proser.c @ 96] f7b00651 c704815205b0f7 mov dword ptr [ecx+eax*4],offset ProSer!NewZwOpenProcess (f7b00552) 我的源码是: typedef struct ServiceDescriptorEntry { unsigned int *ServiceTableBase; unsigned int *ServiceCounterTableBase; //Used only in checked build unsigned int NumberOfServices; unsigned char *ParamTableBase; } ServiceDescriptorTableEntry_t, *PServiceDescriptorTableEntry_t; __declspec(dllimport) ServiceDescriptorTableEntry_t KeServiceDescriptorTable; #define SYSTEMSERVICE(_function) KeServiceDescriptorTable.ServiceTableBase[ *(PULONG)((PUCHAR)_function+1)] VOID HookSystemCall() { OldZwOpenProcess = (ZW_OPENPROCESS)(SYSTEMSERVICE(ZwOpenProcess)); _asm cli (ZW_OPENPROCESS)(SYSTEMSERVICE(ZwOpenProcess)) = NewZwOpenProcess; _asm sti } 我的问题是,以上代码有什么不对劲吗?但是为什么又在某些机器上运行正常?并且怎么受driverstudio的影响呢? |
|
沙发#
发布于:2007-10-25 07:13
老掉牙的问题了,内存写保护,SOFTICE会自动进行写保护禁止,所以你没事,没看见很多家伙修改的时候不是搞CR0,就是搞MDL,当他们吃饱了撑的阿???
|
|
|
板凳#
发布于:2007-10-25 09:32
谢谢wowocock ,那为什么上面的代码在大多数机器还是可以正常运行呢?我一直以为 cli指令打开了cr0.
|
|
驱动小牛
|
地板#
发布于:2007-10-25 19:47
晕,又是一只和我一样菜的牛犊.
像ssdt 修改,网上的代码太多了,不用来问的 哦哦cock牛 的. |
地下室#
发布于:2007-10-26 14:09
这些家伙其实就是吃饱了撑的
|
|
5楼#
发布于:2007-10-31 12:42
就是搞不懂为什么有些机器运行很正常,而且这些机器并没有装softice呀.
|
|
6楼#
发布于:2007-11-01 22:18
不是所有的机器都会开启system code write protection的
只有当Win2000的系统内存> 128MB(XP 或2003 >255MB)时,系统才会开启这一机制 |
|
|
7楼#
发布于:2007-12-28 13:38
remove lock确实比计数器好用,
|
|
8楼#
发布于:2008-01-31 12:48
|
|
|