积累系统性知识
积聚技术精华
  首页    个人中心    撰写积文    建立课题    订立目标    整理积文    管理课题    管理目标    技能Get    代码积累 
流氓软件及反流氓软件的技术分析
error997 (error997)    2014-11-20 20:37:28      目标    课题
   作  者:jacklzw88 (不可爱咯)
   流氓软件的技术五花八门,任何一项功能都有可能成为流氓技术,就象武器,用好了可以伸张正义,用歪了却成为罪恶的帮凶。
首先我从win32下的一些流氓着数分析开始:
1。我想做为一个流氓软件,首先要做到的是实时运行,譬如在注册表的run下,在boot下增加它的启动。这应该是比较老的方法,以前 3721好象就是在run下,但是现在一般的人都知道了。
2。作为流氓软件,已经改变了以前一些木马的特性了,他没必要使自己一定要实时启动了,而是需要自己的时候再启动,譬如说打开一个浏览器窗口,这是一般流氓软件的方法,因为他需要连上网才能有利益可图,所以浏览器肯定是流氓软件必定监控的进程。
3。使用BHO插件,这种技术早先特别流行,这是微软提供的接口,本意是让IE浏览器可以扩充功能。每当一个ie浏览器启动的时候,都会调用BHO下必要的插件,流氓软件就是利用这一点。监控了浏览器所有事件与信息。
4。还有最笨的办法就是利用进程快照监控进程,判断有它自己所监控的进程启动,就使用atl得到浏览器指针,从而监控浏览器所有事件与信息。
5,还有一种方法就是使用spi,这是我在网上看到的。spi是分层协议,当winsock2启动的时候都会调用它的dll,可以监控所有应用层数据包。从而监控用户信息,而且能实时启动。
6。hook方法,hook技术可以所应用太广泛了,特别是监控方面。所以流氓软件也不会错过。首先应用的是api函数hook,譬如windows核心编程里的apihook类,或者微软的detous都可以完成,两者方法其实相同就是修改IDT函数入口地址。api hook钩住createprocess 就可以监控进程,比进程快照性能更强,可以钩住spi下的函数可以完成spi下的所有功能。还有消息hook,鼠标消息,键盘消息,日子消息等等钩子,方法实在太多,都可以利用。
上面列举了一些流氓软件的使用方法,但是流氓软件的一个特性是他无法卸载。所以它又要使用下面的方法了
因为上面的很多方法都可以删除注册表卸载他们,那怎么办呢,那就会时时监控,它会在它的进程,或者线程里监控注册表项,设置一个循环监控,发现没了就继续安装,增加。我想这应该是很多流氓软件的技术。
那现在又出现了一个新问题,那就是流氓软件的进程线程要是结束掉怎么办呢???看西面
7。一种方法就是上面的api hook技术,钩住openprocess ,用自己的函数判断只要打开的是自己进程就返回正确,使用这种方法,用户或者一般的软件就无法结束它的进程了。
8。还有一种是上面象bho,spi根本没有进程。一般的用户也无法删除他
9。还有一种方法是远程线程,这个技术用的也很普遍,首先是象api hook一样向目标进程里申请一段内存空间,然后使用自己映射过去,然后使用CreateRemoteThread创建远程线程。一般很多流氓软件或者以前的一些木马程序,都是把线程注入到系统进程譬如explorer,service等等,使用用户或者一般的杀毒软件很难处理或者结束。。
10。注册成服务后,也可以简单的隐藏进程。还有更可笑的是把自己的进程名跟一些系统进程名譬如lsass相同后,也就无法结束了。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
从我上面列举的方法已经差不多可以形成好几款流氓软件了。但是你别高兴太早,因为这些技术只是应用层的,现在出现了一堆驱动层的反流氓软件工具,譬如超级兔子,完美卸载,木马克星,雅虎助手,还有现在火热的360安全卫士。
这些反流氓软件的方法删除以上流氓软件软件就比较简单。优先于流氓软件启动,截获所有访问流氓软件文件的irp,然后删除注册表项,删除文件。轻松的完成了反流氓任务。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
为了针对这些反流氓软件,流氓软件出现了内核层的了。
1。首先是使用文件过滤驱动,保护自己的文件,流氓软件过滤了create里对于自己文件的所有fileopen外的所有irp和SetInformation下所有的irp,从而有效的保护了自己的文件。
2。内核级hook技术,可hook住所有公开的或者未公开的内核函数,譬如zwcreatefile,zwSetInformation,也可以有效的保护文件。
3。驱动层下的流氓软件还使用内核级hook技术,替换Regdeletekey,RegDeleteValueKey,RegSetValueKey从而有效的保护了注册表
4。利用内核级hook技术还有隐藏进程,或者监控进程,重起进程。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
对于上面的流氓软件的方法一些驱动层下的反流氓软件工具又有点束手无策了。因为同是驱动程序相互拦截irp等于大家都无法操作,反流氓软件工具的删除irp会被拦截,或者删除函数会被替换。删除注册表函数会被替换。虽然驱动的加载有先后,但是无法保证能完全的删除流氓软件,从而出现了一些更顶级的反流氓软件,他直接发删除文件irp到文件系统.,删除注册表也直接发送到文件系统。这类流氓软件又能有效的完成了反流氓任务,但是根据我了解,这样的软件不多。现在火热的360安全卫士都还只是使用了笨办法,优先于驱动流氓软件启动,创建一个驱动流氓软件同设备名的设备,,使流氓驱动创建不成功。具我了解他优先于流氓驱动启动是把自己创建于PNP_TDI这个组下面,就是简单的ndis就能优先于360启动。如果前面的组,那360就束手无策了。所以对付这类流氓驱动只能用直接发irp到文件系统。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
流氓软件又怎么来防止直接发irp到文件系统的反流氓软件呢?rootkit,我看很多对于rootkit有误解,很多都认为hook也是rootkit.呵呵,rootkit说白了就是嵌入操作系统文件。你不是发irp到文件系统吗?,可是我把文件系统给改了,不过rootkit根据我的观察unix或者linex下比较多,在windows下还是比较少的,因为需要使用汇编了,哎太晚了,不写了,我想如果流氓软件做到这个技术程度,它也没必要做流氓了,直接做操作系统得了:),下次继续分析吧。我不善于言语,可能错别字或者病句很多,大家见量。还是第一次写这么长的文章:)):)哎最近为数据挖掘的算法郁闷,希望大家能给点意见

转自 http://blog.csdn.net/y___y/article/details/1252510
(+0)技能Get

建议楼主:搜索关键字 |参考其他资源 |回复 |追问
  error997(error997):   个人中心    课题    目标    代码积累