(1)
在有源代码的情况下,最常见的方法:载入*.PDB 进入调试器,然后在WinMain, DriverEntry下断点。
(2)
但是如果没有源代码,最常见的方法是在驱动或程序入口点改成CC或F1,被调试器截获后,将代码改回去,EIP回拨一格,继续执行。
(3)
对于驱动程序,因为系统的装载机制,还有一种办法可行。
系统装载驱动程序的实际代码在IopLoadDriver中,这个函数在内部会调用驱动程序入口点函数。
在这个调用处下个断点,单步跟下去,就会到驱动程序入口点。
在不同的操作系统上源代码实现都是如此,但汇编代码可能不同
-----------------------------
Figure 1. C source
status = driverObject->DriverInit( driverObject, ®istryPath->Name );
-----------------------------
Figure 2. Assembly
; 5.1.2600
FF B5 70 FF FF FF push [ebp+P]
57 push edi
FF 57 2C c all dword ptr [edi+2Ch]
-----------------------------
(4)
在看了系统对可执行文件的装载机制后,发现:第三种方法对.exe文件不可行。
XP创建进程在CreateWindowProcessInternalW中实现。
大致的函数流为:
NtCreateProcess -> NtCreateThread -> NtResumeThread -> KeResumeThread -> KiWaitTest
绕了一大圈后,任务还是交给了任务调度器去完成。
--------------------------------------------------------------------------
FF 81 A0 01 00 00 inc dword ptr [ecx+1A0h]
81 C1 9C 01 00 00 add ecx, 19Ch
33 D2 xor edx, edx
E8 4E 36 FE FF call @KiWaitTest@8 ; KiWaitTest(x,x)
--------------------------------------------------------------------------
在有源代码的情况下,最常见的方法:载入*.PDB 进入调试器,然后在WinMain, DriverEntry下断点。
(2)
但是如果没有源代码,最常见的方法是在驱动或程序入口点改成CC或F1,被调试器截获后,将代码改回去,EIP回拨一格,继续执行。
(3)
对于驱动程序,因为系统的装载机制,还有一种办法可行。
系统装载驱动程序的实际代码在IopLoadDriver中,这个函数在内部会调用驱动程序入口点函数。
在这个调用处下个断点,单步跟下去,就会到驱动程序入口点。
在不同的操作系统上源代码实现都是如此,但汇编代码可能不同
-----------------------------
Figure 1. C source
status = driverObject->DriverInit( driverObject, ®istryPath->Name );
-----------------------------
Figure 2. Assembly
; 5.1.2600
FF B5 70 FF FF FF push [ebp+P]
57 push edi
FF 57 2C c all dword ptr [edi+2Ch]
-----------------------------
(4)
在看了系统对可执行文件的装载机制后,发现:第三种方法对.exe文件不可行。
XP创建进程在CreateWindowProcessInternalW中实现。
大致的函数流为:
NtCreateProcess -> NtCreateThread -> NtResumeThread -> KeResumeThread -> KiWaitTest
绕了一大圈后,任务还是交给了任务调度器去完成。
--------------------------------------------------------------------------
FF 81 A0 01 00 00 inc dword ptr [ecx+1A0h]
81 C1 9C 01 00 00 add ecx, 19Ch
33 D2 xor edx, edx
E8 4E 36 FE FF call @KiWaitTest@8 ; KiWaitTest(x,x)
--------------------------------------------------------------------------