今天学了下找NT!openprocess的地址 当前地址和起源地址 为什么有当前地址和起源 因为如果被SSDT被hook了地址就发生变化
第一个函数功能是找到OpenProcess在SSDT中的当前地址 并保存在szSSDT_NtOpenProcess中
第二个函数功能是找到OpenProcess在SSDT中的起源地址 并保存在szSSDT_OldNTOpenProcess中
szOldOpenProcess dw 'N','t','O','p','e','n','P','r','o','c','e','s','s',0
.
.
.
szSSDT_NtOpenProcess dd ?
szSSDT_CurNTOpenProcess dd ?
.
.
.
_FindOpenSSDTaddr proc
pushad
mov eax,KeServiceDescriptorTable
mov eax,dword ptr [eax]
mov eax,dword ptr [eax]
mov ebx,7ah
shl ebx,2
add eax,ebx
mov eax,dword ptr [eax]
mov szSSDT_NtOpenProcess,eax
popad
ret
_FindOpenSSDTaddr endp
_FindOpenSSDTOldaddr proc ;找到NT!OpenProcess在在SSDT中的起源地址 并保存在szSSDT_CurNTOpenProcess中
local OldOpenPrecessaddr:UNICODE_STRING
pushad
invoke RtlInitUnicodeString,addr OldOpenPrecessaddr,offset szOldOpenProcess
invoke MmGetSystemRoutineAddress,addr OldOpenPrecessaddr
mov szSSDT_CurNTOpenProcess,eax
popad
ret
_FindOpenSSDTOldaddr endp