环境:win7 32bit,
目标:拦截hookport.sys
方法:
通常拦截驱动,可以在nt!MmLoadSystemImage下断点。 1、显示驱动全名并显示驱动基址:
bp nt!MmLoadSystemImage".if(1){!ustr poi(esp+4); dd poi(esp+0x18);}.else{gc;}"
poi(esp+0x18)就是保存驱动基址的指针ImageBaseAddress
2、nt!MmLoadSystemImage返回后,dd ImageBaseAddress,显示的就是驱动基址
3、给驱动起点函数下断点
bp 驱动基址+poi(poi(驱动基址+0x3c)+ 驱动基址+0x28)
4、运行,就停在驱动的起点函数
NTSTATUS
MmLoadSystemImage (
IN PUNICODE_STRING ImageFileName,
IN PUNICODE_STRING NamePrefix OPTIONAL,
IN PUNICODE_STRING LoadedBaseName OPTIONAL,
IN BOOLEAN LoadInSessionSpace,
OUT PVOID *ImageHandle,
OUT PVOID *ImageBaseAddress
)
bcdedit /set {bootmgr} bootdebug on
bcdedit /set {bootmgr} debugtype serial
bcdedit /set {bootmgr} debugport 1
bcdedit /set {bootmgr} baudrate 115200
设置windbg
连接上后...
kd> sxe ld:hookport.sys
kd> g
nt!DbgLoadImageSymbols+0x47:
83a55fa6 cc int 3
kd> lmvm hookport
start end module name
8f263000 8f284e80 hookport (deferred)
kd> bp 8f263000+poi(poi(8f263000+3c)+8f263000 +28)