杀毒软件运行在ring0下还是ring3下?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了杀毒软件运行在ring0下还是ring3下?相关的知识,希望对你有一定的参考价值。

如题
如果杀毒软件是在ring3下,那么如果病毒如果用了rootkit技术进入ring0层,杀毒软件岂不是就成了摆设了,还能耐病毒如何??

请直接针对问题回答~

  一般来说,杀毒软件属于外部软件,是用户自行安装的应用软件,工作在Ring3层,与工作在Ring0层的操作系统不同。
  但是,随着反病毒技术的不断加深,目前的杀毒软件虽然仍然工作在Ring3层中,但是已经具备了查杀Ring0层病毒的技术。因此,杀毒软件属于一种工作在Ring3层,但是可以工作在Ring0层中。
  注意:类似于Windows Defender等操作系统开发时即嵌入在操作系统中的杀毒软件,默认是运行在Ring0层中的。
参考技术A windows分4层保护结构,最核心的ring0,最外面的是ring3,ring0层的应用程序可以直接和硬件打交道,其他层的就必须通过hal.dll来调用相应的api来和硬件打交道,所以如果想突破限制,搞些破坏就要进入ring0.
Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3。Windows只使用其中的两个级别RING0和RING3,RING0只给操作系统用,RING3谁都能用。
我看只有在RING3下....

Rootkit类的病毒就是将其自身的进程隐藏,以达到用户无法结束其进程的目的。
杀毒软件则通过检测来发现其进程,如果发现对应的进程含有恶意程序则将向用户报警。本回答被提问者采纳

ring0下编程

目前我只会C,C++,还有VC++可视化程序设计,不过写出来的程序都是ring3下的,越来越感觉到要实现某些功能很困难。比如怎样保护自己的程序不被非法结束,这在毕业设计的时候有用。我用ring3下的api hook但是仍然非常脆弱,在CMD下有条命令就可以搞定。再比如像杀毒软件在系统登录前开始杀毒,如何在登录前获得CPU控制权。类似问题还有很多,听人说要在ring0下编程,要写驱动程序。可是我很纳闷,驱动程序都是要访问硬件的啊,而我上面的问题,和硬件有什么关系呢?我就是想让自己编写出来的程序运行在核心态,比用户态的程序有更高的权限,请问该怎么做。顺便问个很菜的问题,像CMD下的HELLO WORLD程序,能不能在核心态也写个CMD下的HELLO WORLD?
再补充个问题,像冰刃那样的工具,应该也是RING0层的吧,可是这样的工具和硬件有关系吗?

驱动程序都是要访问硬件

你理解错了,驱动程序不一定都要访问硬件,没听说过虚拟设备驱动程序吗

另外在核心态下是没有CMD可用的,在核心态你已经到达了操作系统级别了,在我们用户的程序中,驱动程序是最高级别的了,杀毒软件多数是通过加载这些驱动程序来实现的

你到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
就看到你系统加载的驱动程序了

另外,驱动程序的编写的测试都非常复杂……通常需要系统级调试器~~
参考技术A 要想提高权限 ring 0下是你的选择。可以看看The Windows 2000 Device Driver Book(Second Edition).chm,看雪上也有一本 驱动程序设计,你可以了解一下。蛮不错的。现在病毒基本都采用驱动方式 参考技术B 驱动也可以访问虚拟设备,驱动也是运行在ring0下的。

以上是关于杀毒软件运行在ring0下还是ring3下?的主要内容,如果未能解决你的问题,请参考以下文章

RING3到RING0的函数跟踪

Ring3创建事件Ring0设置事件

跟踪 Ring3 - Ring0 的运行流程

全虚拟化和半虚拟化的区别 cpu的ring0~ring3又是什么概念?

ring0

结束进程的N种方法(RING0 AND RING3)