分析了一下360的HOOK,通过直接hook KiFastCallEntry实现以所有系统调用的过滤。
我分析的版本如下:
主程序版本: 6.0.1.1003
HookPort.sys版本: 1, 0, 0, 1005
HookPort.sys的TimeStamp: 4A8D4AB8
简单说明:360把所有被hook的系统服务的过滤函数放在了一个表里,索引即对应的系统服务在该过滤函数表中的索引。
所有列出来的函数都会被hook掉的,是否处理指某个系统服务有没有相应的过滤函数进行处理,拒绝还是放行就是在过滤函数中完成判断的。
不处理的系统服务,将会直接调用原始服务例程。
函数如下:
服务名称 索引 是否处理 备注
===============================================
NtCreateKey 0×00 否
NtQueryValueKey 0×01 是
NtDeleteKey 0×02 是
NtDeleteValueKey 0×03 是
NtRenameKey 0×04 是
NtReplaceKey 0×05 是
NtRestoreKey 0×06 是
NtSetValueKey 0×07 是
NtCreateFile 0×08 是
NtFsControl 0×09 是
NtSetInformationFile 0×0A 是
NtWriteFile 0×0B 是
NtWriteFileGather 0×0B 是 //和NtWriteFile共用一个过滤函数
NtCreateProcess 0×0D 是
NtCreateProcessEx 0×0E 是
NtCreateUserProcess 0×0F 是 //Only on Vista or later
NtCreateThread 0×10 是
NtCreateThreadEx 0×10 是 //和NtCreateThread共用一个过滤函数,for vista or later
NtOpenThread 0×11 是
NtDeleteFile 0×12 是
NtOpenFile 0×13 是
NtReadVirtualMemory 0×14 否
NtTerminateProcess 0×15 是
NtQueueApcThread 0×16 是
NtSetContextThread 0×17 是
NtSetInformationThread 0×18 否
NtProtectVirtualMemory 0×19 否
NtWriteVirtualMemory 0×1A 是
NtAdjustGroupToken 0×1B 否
NtAdjustPrivilegesToken 0×1C 否
NtRequestWaitReplyPort 0×1D 是
NtCreateSection 0×1E 是
NtOpenSecton 0×1F 是
NtCreateSymbolicLinkObject 0×20 是
NtOpenSymbolicLinkObject 0×21 否
NtLoadDriver 0×22 是
NtUnloadDriver 0×22 是 //和NtLoadDriver共用一个过滤函数
NtQuerySystemInformation 0×23 是
NtSetSystemTime 0×25 否
NtSystemDebugControl 0×26 是
NtUserBuildHwndList 0×27 是
NtUserQueryWindow 0×28 是
NtUserFindWindowEx 0×29 是
NtUserWindowFromPoint 0×2A 是
NtUserMessageCall 0×2B 是
NtUserPostMessage 0×2C 是
NtUserSetWindowsHookEx 0×2D 是
NtUserPostThreadMessage 0×2E 是
NtOpenProcess 0×2F 是
NtDeviceIoControlFile 0×30 是
NtUserSetParent 0×31 是
NtOpenKey 0×32 是
NtDuplicateObject 0×33 是
NtResumeThread 0×34 否
NtUserChildWindowFromPointEx 0×35 是
NtUserDestroyWindow 0×36 是
NtUserInternalGetWindowText 0×37 否
NtUserMoveWindow 0×38 是 //和NtSetParent共用一个过滤函数
NtUserRealChildWindowFromPoint 0×39 是 //和NtUserChildWindowFromPointEx共用一个过滤函数
NtUserSetInformationThread 0×3A 否
NtUserSetInternalWindowPos 0×3B 是 //和NtSetParent共用一个过滤函数
NtUserSetWindowLong 0×3C 是 //和NtSetParent共用一个过滤函数
NtUserSetWindowPlacement 0×3D 是 //和NtSetParent共用一个过滤函数
NtUserSetWindowPos 0×3E 是 //和NtSetParent共用一个过滤函数
NtUserSetWindowRgn 0×3F 是 //和NtSetParent共用一个过滤函数
NtUserShowWindow 0×40 是
NtUserShowWindowAsync 0×41 是 //和NtUserShowWindow共用一个过滤函数
NtQueryAttributesFile 0×42 否
NtUserSendInput 0×43 否
NtAlpcSendWaitReceivePort 0×44 是 //for vista or later
NtUnmapViewOfSection 0×46 是
NtUserSetWinEventHook 0×47 否
NtSetSecurityObject 0×48 是
NtUserCallHwndParamLock 0×49 是
NtUserRegisterUserApiHok 0×4A 否