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