1. 程式人生 > >【舊文章搬運】分析了一下360安全衛士的HOOK

【舊文章搬運】分析了一下360安全衛士的HOOK

x11 pla href nta cse memory owa nts send

原文發表於百度空間及看雪論壇,2009-10-08

看雪論壇地址:https://bbs.pediy.com/thread-99128.htm

看時間,09年的國慶節基本上就搞這玩意兒了。。。
==========================================================================

分析了一下360的HOOK,通過直接hook KiFastCallEntry實現對所有系統調用的過濾。

我分析的版本如下:
主程序版本: 6.0.1.1003
HookPort.sys版本: 1, 0, 0, 1005
HookPort.sys的TimeStamp: 4A8D4AB8

簡單說明:360把所有被hook的系統服務的過濾函數放在了一個表裏,索引即對應的系統服務在該過濾函數表中的索引。所有列出來的函數都會被hook掉的,是否處理指某個系統服務有沒有相應的過濾函數進行處理,拒絕還是放行就是在過濾函數中完成判斷的。不處理的系統服務,將會直接調用原始服務例程。

函數如下:
服務名稱 索引 是否處理 備註
==============================================================================
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 是 //Only on Vista or later
NtCreateThread 0x10 是
NtCreateThreadEx 0x10 是 //和NtCreateThread共用一個過濾函數,for vista or later
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 是
NtSetSystemTime 0x25 否
NtSystemDebugControl 0x26 是
NtUserBuildHwndList 0x27 是
NtUserQueryWindow 0x28 是
NtUserFindWindowEx 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 是 //和NtSetParent共用一個過濾函數
NtUserRealChildWindowFromPoint 0x39 是 //和NtUserChildWindowFromPointEx共用一個過濾函數
NtUserSetInformationThread 0x3A 否
NtUserSetInternalWindowPos 0x3B 是 //和NtSetParent共用一個過濾函數
NtUserSetWindowLong 0x3C 是 //和NtSetParent共用一個過濾函數
NtUserSetWindowPlacement 0x3D 是 //和NtSetParent共用一個過濾函數
NtUserSetWindowPos 0x3E 是 //和NtSetParent共用一個過濾函數
NtUserSetWindowRgn 0x3F 是 //和NtSetParent共用一個過濾函數
NtUserShowWindow 0x40 是
NtUserShowWindowAsync 0x41 是 //和NtUserShowWindow共用一個過濾函數
NtQueryAttributesFile 0x42 否
NtUserSendInput 0x43 否
NtAlpcSendWaitReceivePort 0x44 是 //for vista or later
NtUnmapViewOfSection 0x46 是
NtUserSetWinEventHook 0x47 否
NtSetSecurityObject 0x48 是
NtUserCallHwndParamLock 0x49 是
NtUserRegisterUserApiHok 0x4A 否

【舊文章搬運】分析了一下360安全衛士的HOOK