驱动中的object hook指的是什么?

如题所述

楼上的问牛答马
人家问的目标HOOK是什么
你给他整个系统快速关机/重启的函数。
不过这个函数视乎很伤硬盘。HOOK也有难度。
OBJECT HOOK 就是你要HOOK的目标,或者说你要挂钩的函数。
比如NtUserCallOneParam这个函数。传递第2个参数为0X34的时候就是关机。
你就可以HOOK它来实现阻当调用这个函数的时候做一些你想要做的事。你入阻止它关机。
那么NtUserCallOneParam就可以说是Object Hook
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-05-05

OBJECT hook的组成,主要是3部分 如下图:

第2个回答  2011-03-29
楼上是傻X,啥玩意不懂,解释了原意
HOOK在计算机里就是只本来A程序要调用a函数,但是B程序对a函数做了处理,使得b函数替换了a函数,从而改变了函数调用,这个就是一个HOOK,当然HOOK的种类不止这些
还有INLINE HOOK:B程序不再只是简单的改变函数的调用地址,而是改写了a函数的内部数据,在内部加入了一条跳转指令(不一定是这样),使A在调用a时跳入b,这种处理叫做INLINE HOOK追问

不是我不清楚hook,跟INLINE HOOK。而是object hook。
对于hook的深层原理我是很清楚的。

第3个回答  2011-03-29
def struct _SERVICE_DESCRIPTOR_TABLE
{
PVOID ServiceTableBase;
PULONG ServiceCounterTableBase;
ULONG NumberOfService;
ULONG ParamTableBase;
}SERVICE_DESCRIPTOR_TABLE,*PSERVICE_DESCRIPTOR_TABLE;
extern PSERVICE_DESCRIPTOR_TABLE KeServiceDescriptorTable;
VOID Hook();
ULONG JmpAddress;//要HOOK到的地址
ULONG OldServiceAddress;//原来NtShutdownSystem的地址
__declspec(naked) NTSTATUS __stdcall NtShutdownSystem(PHANDLE ProcessHandle,
ACCESS_MASK DesiredAccess,
POBJECT_ATTRIBUTES ObjectAttributes,
PCLIENT_ID ClientId)
{
//这里填写HOOK后要做的一些事情
}
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)
{
DriverObject->DriverUnload = OnUnload;
DbgPrint("Unhooker load");
Hook();
return STATUS_SUCCESS;
}
VOID Hook()
{
ULONG Address; //获得原函数地址
Address = (ULONG)KeServiceDescriptorTable->ServiceTableBase + 0xF9 * 4;//0xF9为NtShutdownSystem服务ID
DbgPrint("Address:0x%08X",Address);

OldServiceAddress = *(ULONG*)Address;//保存原来NtShutdownSystem的地址
DbgPrint("OldServiceAddress:0x%08X",OldServiceAddress);

DbgPrint("MyNtShutdownSystem:0x%08X",MyNtShutdownSystem);

JmpAddress = (ULONG)MyNtShutdownSystem ; //跳转到MyNtShutdownSystem函数,即是跳转到我们自己的处理函数
DbgPrint("JmpAddress:0x%08X",JmpAddress);

__asm{//去掉内存保护
cli
mov eax,cr0
and eax,not 10000h
mov cr0,eax
}

*((ULONG*)Address) = (ULONG)NtShutdownSystem;//HOOK SSDT

__asm{//恢复内存保护
mov eax,cr0
or eax,10000h
mov cr0,eax
sti
}
}
第4个回答  2011-03-29
object hook指插件程序
相似回答
大家正在搜