学飞的龙 - 2009-7-29 20:37:00
老师这份资料非常好~病毒金钟罩,破坏流程以及查杀方法 ,,,很有用
我想问一下:
病毒破坏流程的时候,恢复杀软的SSDT钩子,使得杀软功能失效,这个是映像劫持吗?还有是“恢复”吗,怎么感觉是破坏才会失效,呵,不太理解啊
还有我用SysCheck查看 内核检测 发现大部分函数都被瑞星的HOOKHELP.sys占着,剩下的被spdr.sys占着,但我 定位文件 却找不到?除杀毒软件外要是 其他驱动 进入内核占用内核函数,它是病毒的概率是不是很大
newcenturymoon - 2009-7-29 20:44:00
恢复杀软的SSDT钩子,使得杀软功能失效 这个不是映像劫持
映像劫持是注册表上的一个键HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
在CreateProcess的时候(创建进程)系统会检查是否有一个子键和可执行映像的文件名和扩展名相同 如果确实有,那么检查该键是否存在一个名为debugger的值 如果存在咋该映像被改成该值中的字符串 也就是说启动的是另外一个进程了
病毒一般hook(也就是你说的占用)内核函数 不会很多 不会像杀毒软件那么多 一般只会挂钩他需要的函数
still刀刀 - 2009-7-29 20:46:00
调用NTWriteFile ntdll给出这函数在SSDT中的第几个的这个位置
然后这个序号通过服务转发器(函数)去查SSDT中该位置的NTWriteFile函数地址
调用NTWriteFile真正的函数
而SSDT hook 就是把表中的内容给改了。就会通过服务转发器查不到NTWriteFile的函数地址,也就无法调用NTWriteFile真正的函数
请教老师 还是有一点不明白, 我们最初是从调用NTWriteFile开始的,得出了该函数在SSDT中的第几个的这个位置,然后通过服务转发器函数查到了SSDT中该位置的NTWriteFile函数地址 ,这时候该函数的作用已经完成, 即找到自己 的函数地址, 那怎么又调用真正的NTWriteFile函数? 这是一种隐藏技术吗:kaka2:
(感觉有点钻牛角尖了。。。)
newcenturymoon - 2009-7-29 20:52:00
真正的起作用的 NTWriteFile函数是在ntoskrnl.exe中实现的
此ntdll中的NTWriteFile函数 非彼ntoskrnl.exe中的NTWriteFile函数
从三环中调用NTWriteFile的程序再说一下
调用ntdll.dll查找NTWriteFile在SSDT中的序号
服务转发器通过这个序号查找SSDT中NTWriteFile的地址(这个地址是ntoskrnl.exe中导出的真正的NTWriteFile函数)
然后去刚才那个地址调用真正的NTWriteFile函数(ntoskrnl.exe中导出的真正实现功能的函数)
零度的穷浪漫 - 2009-7-29 20:57:00
这下就知道查看出日志中的病毒后如何清楚了,豁然开朗,不过,上课的人好像不多诶,怎么回事呢?:kaka2:
零度的穷浪漫 - 2009-7-29 20:58:00
老师,那个流程图还是不太明白
言兮 - 2009-7-29 20:59:00
老师,那个在安全模式全盘查杀那种易复发的病毒干掉之后就断电,对付7楼讲义上所说的那种煮不烂的病毒是否有效呢?
newcenturymoon - 2009-7-29 21:01:00
原帖由 言兮 于 2009-7-29 20:59:00 发表
老师,那个在安全模式全盘查杀那种易复发的病毒干掉之后就断电,对付7楼讲义上所说的那种煮不烂的病毒是否有效呢?
理论上可以 但也要具体问题具体分析
言兮 - 2009-7-29 21:08:00
哦,那碰到了一定试试。:kaka12: 谢谢老师了!
最硬的石头 - 2009-7-29 21:34:00
原帖由 still刀刀 于 2009-7-29 20:46:00 发表
调用NTWriteFile ntdll给出这函数在SSDT中的第几个的这个位置
然后这个序号通过服务转发器(函数)去查SSDT中该位置的NTWriteFile函数地址
调用NTWriteFile真正的函数
而SSDT hook 就是把表中的内容给改了。就会通过服务转发器查不到NTWriteFile的函数地址,也就无法调用NTWriteFile真正的函数
请教老师 还是有一
所谓ssdt其实就是System Service Descriptor Table,也就是系统服务描述表,也就是本地系统服务地址,该表可以基于系统调用编号进行索引。作用就是把Ring3下的Win32 API和Ring0下的内核API联系起来。它通过对系统调用进行索引,然后定位函数的内存地址.应用程序是通过软中断进入内核模式的(不同的windows版本下方式略微有点不同,Windows 2000下是通过int2eh进入,Windows XP下是通过sysenter指令完成的)。软中断会把Native API的参数和系统服务号的参数一同传入内核模式。不同的Native API会对应不同的系统服务号,这时候就要用ssdt,Windows根据这个系统服务号为索引,从表中查找对应服务函数的内存地址,如图。
附件:
您所在的用户组无法下载或查看附件第二步的时候mov eax,XXXX(ServiceIndex),此时把系统服务号传给eax寄存器SSDT在这个过程中所扮演的角色是至关重要的。如下图。

附件:
您所在的用户组无法下载或查看附件
Lighting_Cui - 2009-7-30 17:19:00
这节课说实话 还是比较抽象哦~ 不是很好理解 期待后面的实践联系帮助理解。。
© 2000 - 2026 Rising Corp. Ltd.