分析了一下360安全卫士的hook(zt)

分析了一下360安全卫士的hook(zt) 2010-6-3 18:36阅读(12)
连接: http://blog.csdn.net/lionzl/article/details/7738179

分析了一下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  否

本实例由VS2008开发,在提供了一套驱动开发框架的同时,又演示了如何获取Shadow SSDT表函数原始地址的办法。 主要函数:ULONG GetShadowSSDT_Function_OriAddr(ULONG index); 原理说明: 根据特征码搜索导出函数KeAddSystemServiceTable来获取Shadow SSDT基址,以及通过ZwQuerySystemInformation()函数获取win32k.sys基址,然后解析PE定位到Shadow SSDT在win32k.sys的偏移地址,并通过进一步计算来得到Shadow SSDT表函数的原始地址。 这里只测试了三个函数:(460)NtUserMessageCall、(475)NtUserPostMessage和(502)NtUserSendInput,具体使用时可以举一反三,网上完整的源代码实例并不太多,希望可以帮到真正有需要的朋友。 系统环境: 在WinXP SP3系统 + 瑞星杀毒软件 打印输出: [ LemonInfo : Loading Shadow SSDT Original Address Driver... ] [ LemonInfo : 创建“设备”值为:0 ] [ LemonInfo : 创建“设备”成功... ] [ LemonInfo : 创建“符号链接”状态值为:0 ] [ LemonInfo : 创建“符号链接”成功... ] [ LemonInfo : 驱动加载成功... ] [ LemonInfo : 派遣函数(DispatchRoutine) IRP 开始... ] [ LemonInfo : 派遣函数(DispatchRoutine) IRP Enter IRP_MJ_DEVICE_CONTROL... ] [ LemonInfo : 获取ShadowSSDT表 (460)NtUserMessageCall 函数的“当前地址”为:0xB83ECFC4,“起源地址”为:0xBF80EE6B ] [ LemonInfo : 获取ShadowSSDT表 (475)NtUserPostMessage 函数的“当前地址”为:0xB83ECFA3,“起源地址”为:0xBF8089B4 ] [ LemonInfo : 获取ShadowSSDT表 (502)NtUserSendInput 函数的“当前地址”为:0xBF8C31E7,“起源地址”为:0xBF8C31E7 ] [ LemonInfo : 派遣函数(DispatchRoutine) IRP_MJ_DEVICE_CONTROL 成功执行... ] [ LemonInfo : 派遣函数(DispatchRoutine) IRP 结束... ] [ LemonInfo : UnLoading Shadow SSDT Original Address Driver... ] [ LemonInfo : 删除“符号链接”成功... ] [ LemonInfo : 删除“设备”成功... ] [ LemonInfo : 驱动卸载成功... ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值