OD附加DXF的时候,在OD下面显示一系列的XXX线程创建成功,然后看起来就什么都不做了,OD也没卡死,模块信息也不显示,汇编窗口和数据窗口都是空白
OD附加已运行进程调用DebugActiveProcess函数,该函数调用到DbgUiDebugActiveProcess,转到内核NtDebugActiveProcess
NtDebugActiveProcess调用DbgkpPostFakeProcessCreateMessages,该函数调用DbgkpPostFakeThreadMessages和DbgkpPostFakeModuleMessages用来向调试对象发送杜撰的消息
windbg !process 0 0,显示有2个DXF进程,OD看得见的那个DXF进程,PEB ->Ldr字段为NULL,DbgkpPostFakeModuleMessages需要Ldr,用来遍历已加载模块,为NULL的话,就遍历不到模块,OD就不到调试信息
看了DbgkpPostFakeModuleMessages相关代码,发现Ldr为空,它依然执行,但是取地址+偏移后,会有内存访问异常,它的__try()__exception(这里为空,什么都没做),即便这样,它的返回状态还是STATUS_SUCCESS
自己创建了一个进程,将该进程PEB结构的Ldr字段改为NULL,该进程就卡死了,为什么DXF的不卡死呢,还是说windbg读取它的peb -> Ldr字段时,驱动保护做了修改?
windbg !process 0 0 发现各有几个进程是相同的PEB地址,windbg的PEB和另一个DXF的PEB值是一样的.......
刚学驱动,软件调试,小白一个,不嫌弃的话,加我QQ1612095567
做了个实验,当OD附加记事本程序,调用DebugActiveProcess,函数执行完ZwDebugActiveProcess,人为的跳到DebugActiveProcess尾部,不执行DbgUiIssueRemoteBreakin 这个函数,发现OD的表现和附加DXF的表现一样,下面只显示了一系列线程创建消息,不显示模块加载的信息,OD汇编窗口和数据窗口一片空白,ALT+C显示模块窗口,里面也是一片空白
是不是因为没有产生断点异常,所以才会什么都空白呢.
CPU执行到int3,然后从IDT表里调用KiTrap03,该例程将一些和异常相关的信息传递给CommonDispatchException,后者分配一个EXCEPTION_RECORD结构,并填写好后,调用KiDispatchException将异常发给调试器,后者调用DbgkForwardException......现在,就是因为没有异常,所以OD接受不到这些信息,然后汇编窗口和数据窗口都空白的原因吗??
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)