YJX_Driver_019_读出原函数地址

Posted DebugSkill

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了YJX_Driver_019_读出原函数地址相关的知识,希望对你有一定的参考价值。

1、

1.4.3读出原函数地址-19课
A、集成上一课代码至GetNt_CurAddr函数
B、MmGetSystemRoutineAddress
C、书写GetNt_OldAddr函数
D、测试结果

PVOID MmGetSystemRoutineAddress
(
__in PUNICODE_STRING SystemRoutineName
);

ULONG GetNt_OldAddr();


ULONG GetNt_CurAddr() //获取当前SSDT_NtOpenProcess的当前地址
{

LONG *SSDT_Adr,SSDT_NtOpenProcess_Cur_Addr,t_addr;
KdPrint(("驱动成功被加载中.............................\n"));
//读取SSDT表中索引值为0x7A的函数
//poi(poi(KeServiceDescriptorTable)+0x7a*4)
t_addr=(LONG)KeServiceDescriptorTable->ServiceTableBase;
KdPrint(("当前ServiceTableBase地址为%x \n",t_addr));
SSDT_Adr=(PLONG)(t_addr+0x7A*4);
KdPrint(("当前t_addr+0x7A*4=%x \n",SSDT_Adr));
SSDT_NtOpenProcess_Cur_Addr=*SSDT_Adr;
KdPrint(("当前SSDT_NtOpenProcess_Cur_Addr地址为%x \n",SSDT_NtOpenProcess_Cur_Addr));
return SSDT_NtOpenProcess_Cur_Addr;
}

ULONG GetNt_OldAddr()
{
UNICODE_STRING Old_NtOpenProcess;
ULONG Old_Addr;
RtlInitUnicodeString(&Old_NtOpenProcess,L"NtOpenProcess");
Old_Addr=(ULONG)MmGetSystemRoutineAddress(&Old_NtOpenProcess);//取得NtOpenProcess的地址
KdPrint(("取得原函数NtOpenProcess的值为 %x",Old_Addr));
return Old_Addr;
}

 

 

2、

 

以上是关于YJX_Driver_019_读出原函数地址的主要内容,如果未能解决你的问题,请参考以下文章

YJX_Driver_020_JMP地址转换公式推导

YJX_Driver_009_DDK_HelloWorld_NT

YJX_Driver_014_VM+Wlndbg调试驱动

YJX_Driver_016_为DDK_HelloWorld添加默认派遣例程

YJX_Driver_024_驱动代码中C和C++代码区别

YJX_Driver_021_绕过驱动保护