参考360挂钩

Hookport.sys是360安全卫士对系统进行挂钩操作的核心模块。其中主要方式对SSDT和shadowSSDT安装钩子函数。但其使用了一种较为特殊的实现方法,使众多常规ARK软件很难检测出360安全卫士所的钩子。由于此方法对系统表操作很少,比较稳定
  Hookport.sys只提供了最为基本的过滤操作和桩函数,本身并没有实现策略部分。策略部分由360SelfProtection.sys实现,并通过设备扩展进行沟通。

整体框架简介  HookPort总共Hook了57h个SSDT或SHADOWSSDT函数,其实现不是通过修改KeServiceDescriptorTable或KeServiceDescriptorShadowTable中函数地址完成,而是通过HookKiFastCallEntry函数实现的。HookPort准备了两个表,SERVICE_FILTER_INFO_TABLE和FILTERFUN_RULE_TABLE。前者保存了SSDT和ShadowSSDT中的原函数地址和Hook函数地址,是按照函数在SSDT中的位置为索引的,后者保存了过滤函数的地址和规则,是按照57h个函数作为索引的。
  当程序因为系统调用而进入KiFastCallEntry函数时,会经过两次跳转进入到一个函数中,这个函数会返回一个函数地址,这个地址可能是SSDT中原函数的地址,也可能是SERVICE_FILTER_INFO_TABLE表中Hook函数的地址。到底返回哪个要根据FILTERFUN_RULE_TABLE中的规则来判断。这样就达到了SSDTHOOK的目的。
  被Hook的57h个函数名称:
  服务名称 索引
  ==============================================================================
  NtCreateKey 0x00
  NtQueryValueKey 0x01
  NtDeleteKey 0x02
  NtDeleteValueKey 0x03
  NtRenameKey 0x04
  NtReplaceKey 0x05
  NtRestoreKey 0x06
  NtSetValueKey 0x07
  NtCreateFile 0x08
  NtFsControl 0x09
  NtSetInformationFile 0x0A
  NtWriteFile 0x0B
  NtWriteFileGather 0x0B //和NtWriteFile共用一个过滤函数
  NtCreateProcess 0x0D
  NtCreateProcessEx 0x0E
  NtCreateUserProcess 0x0F //OnlyonVista orlater
  NtCreateThread 0x10
  NtCreateThreadEx 0x10 //与NtCreateThread共用同一个过滤函数
  NtOpenThread 0x11
  NtDeleteFile 0x12
  NtOpenFile 0x13
  NtReadVirtualMemory 0x14
  NtTerminateProcess 0x15
  NtQueueApcThread 0x16
  NtSetContextThread 0x17
  NtSetInformationThread 0x18
  NtProtectVirtualMemory 0x19
  NtWriteVirtualMemory 0x1A
  NtAdjustGroupToken 0x1B
  NtAdjustPrivilegesToken 0x1C
  NtRequestWaitReplyPort 0x1D
  NtCreateSection 0x1E
  NtOpenSecton 0x1F
  NtCreateSymbolicLinkObject 0x20
  NtOpenSymbolicLinkObject 0x21
  NtLoadDriver 0x22
  NtUnloadDriver 0x22 //和NtLoadDriver共用一个过滤函数
  NtQuerySystemInformation 0x23
  NtSetSystemInformation 0x24
  NtSetSystemTime 0x25
  NtSystemDebugControl 0x26
  NtUserBuildHwndList 0x27
  NtUserQueryWindow 0x28
  NtUserxxxWindowEx 0x29
  NtUserWindowFromPoint 0x2A
  NtUserMessageCall 0x2B
  NtUserPostMessage 0x2C
  NtUserSetWindowsHookEx 0x2D
  NtUserPostThreadMessage 0x2E
  NtOpenProcess 0x2F
  NtDeviceIoControlFile 0x30
  NtUserSetParent 0x31
  NtOpenKey 0x32
  NtDuplicateObject 0x33
  NtResumeThread 0x34
  NtUserChildWindowFromPointEx 0x35
  NtUserDestroyWindow 0x36
  NtUserInternalGetWindowText 0x37
  NtUserMoveWindow 0x38
  NtUserRealChildWindowFromPoint 0x39
  NtUserSetInformationThread 0x3A
  NtUserSetInternalWindowPos 0x3B
  NtUserSetWindowLong 0x3C
  NtUserSetWindowPlacement 0x3D
  NtUserSetWindowPos 0x3E
  NtUserSetWindowRgn 0x3F
  NtUserShowWindow 0x40
  NtUserShowWindowAsync 0x41
  NtQueryAttributesFile 0x42
  NtUserSendInput 0x43
  NtAlpcSendWaitReceivePort 0x44
  NotifyRoutine 0x45//SetCreateProcessNotifyRoutine中的函数
  NtUnmapViewOfSection 0x46
  NtUserSetWinEventHook 0x47
  NtSetSecurityObject 0x48
  NtUserCallHwndParamLock 0x49
  NtUserRegisterUserApiHok 0x4A
  KeUserModeCallback 0x4B
  NtUserRegisterWindowMessage 0x4C
  NtUserCallNoParam 0x4D
  NtAllocateVirtualMemory 0x4E
  NtUserCallOneParam 0x4F
  NtCreateMutant 0x50
  NtOpenMutant 0x51
  NtVdmControl 0x52
  NtGetNextThread 0x53
  NtGetNextProcess 0x54
  NtRequestPort 0x55
  NtFreeVirtualMemory 0x56




希望 瑞星借鉴 ,金山 也采用了这种挂钩


用户系统信息:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.802.30 Safari/535.1 SE 2.X MetaSr 1.0