什么是网页木马。怎么办?
"啥是木马? 特洛伊木马(以下简称木马),英文叫做“Trojan house”,其名称取自希腊神话的特洛伊木马记。 它是一种基于远程控制的黑客工具,具有隐蔽性和非授权性的特点。 所谓隐蔽性是指木马的设计者为了防止木马被发现,会采用多种手段隐藏木马,这样服务端即使发现感染了木马,由于不能确定其具体位置,往往只可以望“马”兴叹。 所谓非授权性是指一旦控制端与服务端连接后,控制端将享有服务端的大部分操作权限,包括修改文件,修改注册表,控制鼠标,键盘(keyboard)等等,而这类权力并不是服务端赋予的,而是通过木马程序窃取的。 从木马的发展来看,基本上可以分为2个阶段。 最初网络(互联网...全部
"啥是木马? 特洛伊木马(以下简称木马),英文叫做“Trojan house”,其名称取自希腊神话的特洛伊木马记。 它是一种基于远程控制的黑客工具,具有隐蔽性和非授权性的特点。 所谓隐蔽性是指木马的设计者为了防止木马被发现,会采用多种手段隐藏木马,这样服务端即使发现感染了木马,由于不能确定其具体位置,往往只可以望“马”兴叹。
所谓非授权性是指一旦控制端与服务端连接后,控制端将享有服务端的大部分操作权限,包括修改文件,修改注册表,控制鼠标,键盘(keyboard)等等,而这类权力并不是服务端赋予的,而是通过木马程序窃取的。
从木马的发展来看,基本上可以分为2个阶段。 最初网络(互联网)还处于以UNIX平台为主的时期,木马就产生了,当时的木马程序的功能相对容易,往往是将一段程序嵌入到系统(System)文件中,用跳转指令来执行有些木马的功能,在这个时期木马的设计者和用者大都是些技术人员,必须具备相当的网络(互联网)和编程知识。
而后随着WINDOWS平台的日益普及,有些基于图形操作的木马程序出现了,用户界面的改善,使用者不用懂太多的专业知识就可以熟练的操作木马,相对的木马入侵事件也频繁出现,并且由于这个时期木马的功能已日趋完善,因此对服务端的破坏也更大了。
因此所木马发展到今日,已经无所不用其极,一旦被木马控制,你的电脑(PC)将毫无秘密可言。 DLL 木马揭秘 相信常常玩木马的朋友们都会知道有些木马的特性,也会有自己最喜爱的木马,不过,特别多朋友依然不知道近年兴起的“DLL木马”为何物。
啥是“DLL木马”呢?它与一般的木马有啥不一样? 一、从DLL技术说起 要了解DLL木马,就必须知道这个“DLL”是啥意思,因此,让我们追溯到几年前,DOS系统(System)大行其道的日子里。
在那时候,写程序是一件繁琐的事情,由于每一个程序的代码都是独立的,有时候为了实现1个功能,就要为此写特别多代码,之后随着编程技术发展,程序员们把特别多常用的代码集合(通用代码)放进1个独立的文件里,并把这个文件称为“库”(Library),在写程序的时候,把这个库文件加入编译器,就能用这个库包含的全部功能而不必自己再去写一大堆代码,这个技术被称为“静态链接”(Static Link)。
静态链接技术让劳累的程序员松了口气,一切似乎都很美好。然而事实证明,美好的事物不会存在太久,由于静态链接就像1个粗鲁的推销员,不管你想不想要宣传单,他都全部塞到你的手上来。写1个程序只想用到1个库文件包含的某个图形效果,就由于这个,你不得不把这个库文件携带的全部的图形效果都加入程序,留着它们当花瓶摆设,这倒没啥重要,然而这类花瓶却把道路都阻塞了——静态链接技术让最终的程序成了大块头,由于编译器把整个库文件也算进去了。
时代在发展,静态链接技术由于天生的弊端,不能满足程序员的愿望,人们开始寻找一种更好的方法来处理代码重复的难题。之后,Windows系统(System)出现了,时代的分水岭终于出现。Windows系统(System)用一种新的链接技术,这种被称为“动态链接”(Dynamic Link)的新技术同样也是用库文件,微软称它们为“动态链接库”——Dynamic Link Library,DLL的名字就是这样来的。
动态链接本身和静态链接没啥区别,也是把通用代码写进有些独立文件里,可是在编译方面,微软绕了个圈子,并木有采取把库文件加进程序的方法,而是把库文件做成已经编译好的程序文件,给它们开个交换数据的接口,程序员写程序的时候,一旦要用某个库文件的1个功能函数,系统(System)就把这个库文件调入内存,连接上这个程序占有的任务进程,之后执行程序要用的功能函数,并把结果返回给程序显示出来,在我们看来,就像是程序自己带有的功能一样。
完成要的功能后,这个DLL停止运行,整个调出使用过程结束。微软让这类库文件能被多个程序调出使用,实现了比较完美的共享,程序员无论要写啥程序,只需要在代码里加入对相关DLL的调出使用声明就能用它的全部功能。
最重要的是,DLL绝对不会让你多拿1个花瓶,你要啥它就给你啥,你别的东东它才不会给你。这样,写出来的程序就不能再携带一大堆垃圾了——绝对不会让你把吃剩的东东带回家,否则罚款,这是自助餐。 DLL技术的诞生,使编写程序变成一件容易的事情,Windows为我们提供了几千个函数接口,足以满足大多数程序员的要。
并且,Windows系统(System)自身就是由几千个DLL文件组成,这类DLL相互扶持,组成了强大的Windows系统(System)。假如Windows用静态链接技术,它的体积会有多大?我不敢想。
二、应用程序接口API 上边我们对DLL技术做了个差不多分析,在里边我提到了“接口”,这又是啥呢?由于DLL不能像静态库文件那样塞进程序里,因此,怎么让程序知道实现功能的代码和文件成了问题,微软就为DLL技术做了标准规范,让1个DLL文件像奶酪一样开了许多小洞,每一个洞口都注明里边存放的功能的名字,程序只需要根据标准规范找到相关洞口就可以取得它要的美味了,这个洞口就是“应用程序接口”(Application Programming Interface),每一个DLL带的接口都不相同,尽最大可能的减少了代码的重复。
用Steven的一句话:API就是1个工具箱,你根据要取出螺丝刀、扳手,用完后再把它们放回原处。在Windows里,最基本的3个DLL文件是kernel32。dll、user32。dll、gdi32。
dll。它们共同构成了基本的系统(System)框架。 三、DLL与木马 DLL是编译好的代码,与一般程序没啥大差别,只是它不能独立运行,要程序调出使用。那么,DLL与木马能扯上啥关系呢?假如你学过编程并且写过DLL,就会发现,其实DLL的代码和其他程序几乎没啥两样,仅仅是接口和开启模式不一样,只需要改动一下代码入口,DLL就变成1个独立的程序了。
当然,DLL文件是木有程序逻辑的,这里并不是说DLL=EXE,不过,依然可以把DLL看做缺少了main入口的EXE,DLL带的各个功能函数可以看作1个程序的几个函数模块。DLL木马就是把1个实现了木马功能的代码,加上有些特殊代码写成DLL文件,导出相关的API,在他人看来,这只是1个普通的DLL,可是这个DLL却携带了完整的木马功能,这就是DLL木马的概念。
也许有人会问,既然同样的代码就可以实现木马功能,那么直接做程序就可以,为啥还要多此一举写成DLL呢?这是为了隐藏,由于DLL运行时是直接挂在调出使用它的程序的进程里的,并不会另外产生进程,因此相对于传统EXE木马来说,它很难被查到。
四、DLL的运行 虽然DLL不能自己运行,然而Windows在加载DLL的时候,要1个入口函数,就如同EXE的main一样,否则系统(System)没方法引用DLL。因此根据编写规范,Windows必须查找并执行DLL里的1个函数DllMain作为加载DLL的依据,这个函数不作为API导出,而是内部函数。
DllMain函数使DLL得以保留在内存里,有的DLL里边木有DllMain函数,然而依然能用,这是由于Windows在找不到DllMain的时候,会从其它运行库中找1个不做任何操作的缺省DllMain函数开启这个DLL使它能被载入,并不是说DLL可以放弃DllMain函数。
五、DLL木马技术分析 到了这里,您也许会想,既然DLL木马有那么多好处,以后写木马都采用DLL方式不就好了吗?话虽然是这么说没错,可是DLL木马并不是有些人想象的那么容易写的。要写1个能用的DLL木马,你要了解更多知识。
1。木马的主体 千万别把木马模块写得真滴像个API库一样,这不是开发WINAPI。DLL木马可以导出几个辅助函数,可是必须有1个过程负责主要执行代码,否则这个DLL只可以是一堆零碎API函数,别提工作了。
假如涉及有些通用代码,可以在DLL里写有些内部函数,供自己的代码用,而不是把全部代码都开放成接口,这样它自己本身都难调出使用了,更不可能发挥作用。 DLL木马的标准执行入口为DllMain,因此必须在DllMain里写好DLL木马运行的代码,或指向DLL木马的执行模块。
2。动态嵌入技术 Windows中,每一个进程都有自己的私有内存空间,别的进程是不允许对这个私人领地进行操作的,可是,实际上我们仍然可以利用种种方法进并操作进程的私有内存,这就是动态嵌入,它是将自己的代码嵌入正在运行的进程中的技术。
动态嵌入有特别多种,最常见的是钩子、API以及远程线程技术,目前的大多数DLL木马都采用远程线程技术把自己挂在1个正常系统(System)进程中。其实动态嵌入并不少见,罗技的MouseWare驱动(Drive)就挂着每1个系统(System)进程-_- 远程线程技术就是通过在另1个进程中创建远程线程(RemoteThread)的方法进那个进程的内存地址空间。
在DLL木马的范畴里,这个技术也叫做“注入”,当载体在那个被注入的进程里创建了远程线程并命令它加载DLL时,木马就挂上执行了,木有新进程产生,要想让木马停止惟有让挂接这个木马DLL的进程退出运行。
可是,特别多时候我们只可以束手无策——它和Explorer。exe挂在一起了,你确定要关掉Windows吗? 3。木马的开启 有人也许会迫不及待的说,直接把这个DLL加入系统(System)开启项目不就可以了。
答案是NO,前面说过,DLL不能独立运行,因此没方法在开启项目里直接开启它。要想让木马跑起来,就要1个EXE用动态嵌入技术让DLL搭上其他正常进程的车,让被嵌入的进程调出使用这个DLL的DllMain函数,激发木马运行,最后开启木马的EXE结束运行,木马开启完毕。
开启DLL木马的EXE是个重要角色,它被称为Loader,假如木有Loader,DLL木马就是破烂一堆,因此,1个算得上成熟的DLL木马会想方法保护它的Loader不会那么容易被毁灭。记得狼狈为奸的故事吗?DLL木马就是爬在狼Loader上的狈。
Loader可以是多种多样的,Windows的rundll32。exe也被有些DLL木马用来做了Loader,这种木马一般不带动态嵌入技术,它直接挂着rundll32进程运行,用rundll32的方法(rundll32。
exe [DLL名],[函数] [参数])像调出使用API一样去引用这个DLL的开启函数激发木马模块开始执行,即使你杀了rundll32,木马本体还是在的,1个最常见的例子就是3721中文实名,虽然它不是木马。
注册表的AppInit_DLLs键也被有些木马用来开启自己,如求职信病毒(virus)。利用注册表开启,就是让系统(System)执行DllMain来达到开启木马的目的。由于它是kernel调入的,对这个DLL的稳定性有很大要求,稍有错误就会导致系统(System)崩溃,因此很少看见这种木马。
有有些更复杂点的DLL木马通过svchost。exe开启,这种DLL木马必须写成NT-Service,入口函数是ServiceMain,一般很少见,可是这种木马的隐蔽性也不错,并且Loader有保障。
4。其它 到这里大家也应当对DLL木马有一个了解了,是不是很想写1个?别急,不知道大家想过木有,既然DLL木马这么好,为啥到目前能找到的DLL木马寥寥无几?目前让我来泼冷水,最重要的原因仅有1个:由于DLL木马挂着系统(System)进程运行,假如它本身写得不好,例如木有防止运行错误的代码或木有严格规范用户的输入,DLL就会出错崩溃。
别紧张,一般的EXE也是这样完蛋的,可是DLL崩溃会导致它挂着的程序跟着遭殃,别忘记它挂接的是系统(System)进程哦,结局就是……惨不忍睹。因此写1个能公布的DLL木马,在排错检查方面做的工作要比一般的EXE木马多,写得多了自己都烦躁…… 六、DLL木马的发现和清理 常常看看开启项有木有多出莫名其妙的项目,这是Loader的所在,只需要杀了狼,狈就不能再狂了。
而DLL木马本体比较难发现,要你有一定编程知识和分析能力,在Loader里查找DLL名称,或从进程里看多挂接了啥陌生的DLL,然而对新手来说……总之就是比较难啊比较难,因此,最容易的方法:杀毒软件和安全网关(不是万能药,切忌长期服用)。
"。收起