最近学习调试内核方面的知识,就先拿某P下刀,系统是XP
根据之前大牛发表的帖子,驱动加载之后,会对KdSendPacket和KdReceivePacket这两个函数IAT HOOK,可是用XT检测了一下,没有HOOK
然后退出游戏,并且卸载了某P驱动,windbg按ctrl+break断不下来....它调用了KdDisableDebugger,那我就手动修改了KdDebuggerEnabled为1,KiDebugRoutine指向KdpTrap,之后按ctrl+break仍然断不下来.windbg显示:
Send Break in ...
READ: Wait for type 7 packet
>>>> ReadAll(0x800703E3,1,0) fails.
READ: Timeout.
每当发生时钟中断,会调用到KeUpdateSystemTime,该函数检测KdDebuggerEnabled的值,不为0,则调用KdPollBreakIn,后者再调用KdReceivePacket,根据packet,回复windbg
百思不得其解,莫非某P对其他地方做了手脚,让windbg收不到pakcet,或者让内核调试引擎发不了packet?
问题二:用windbg在游戏加载前对KdDisableDebugger下断,虚拟机卡住,之后用virtualkd双机调试,加载游戏之前,先bp KdDisableDebugger,然后断下来了,将函数头部直接ret,返回后,看到如下代码
edf0318e 8b0424 mov eax,dword ptr [esp]
edf03191 e9adcd0100 jmp edf1ff43
edf03196 7b8d jnp edf03125
edf03198 642404 and al,4
edf0319b ffd6 call esi //此处调用KdDisableDebugger
edf0319d e96d99ffff jmp edefcb0f
edf031a2 e25b loop edf031ff
edf031a4 5b pop ebx
edf031a5 893c24 mov dword ptr [esp],edi
edf031a8 8b3c24 mov edi,dword ptr [esp]
edf031ab 89bc2404000000 mov dword ptr [esp+4],edi
edf031b2 50 push eax
edf031b3 c7c07cdcc63a mov eax,3AC6DC7Ch
edf031b9 8d80b4659313 lea eax,[eax+139365B4h]
为什么用windbg对KdDisableDebugger下断虚拟机卡住,virtualKD却不会呢?
这边的汇编代码和以前帖子贴出来的代码变化很大.....看大牛贴出来的代码,汇编的代码要干什么,还是能知道的.现在是
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课