特洛伊木马是什么意思?
特洛伊木马的故事是在古希腊传说中,希腊联军围困特洛伊久攻不下,于是假装撤退,留下一具巨大的中空木马,特洛伊守军不知是计,把木马运进城中作为战利品。夜深人静之际,木马腹中躲藏的希腊士兵打开城门,特洛伊沦陷。后人常用“特洛伊木马”这一典故,用来比喻在敌方营垒里埋下伏兵里应外合的活动。特洛伊木马也是著名电脑木马程序的名字。特洛伊木马是一种基于远程控制的病毒程序,该程序具有很强的隐蔽性和危害性,它可以在你并不知情的的状态下控制你或者监视你的电脑。下面就讲讲木马经常藏身的地方和清除 *** 。 首先查看自己的电脑中是否有木马 1、集成到程序中 其实木马也是一个服务器-客户端程序,它为了不让用户能轻易地把它删除,就常常集成到程序里,一旦用户激活木马程序,那么木马文件和某一应用程序捆绑在一起,然后上传到服务端覆盖原文件,这样即使木马被删除了,只要运行捆绑了木马的应用程序,木马又会被安装上去了。绑定到某一应用程序中,如绑定到系统文件,那么每一次Windows启动均会启动木马。 2、隐藏在配置文件中 木马实在是太狡猾,知道菜鸟们平时使用的是图形化界面的操作系统,对于那些已经不太重要的配置文件大多数是不闻不问了,这正好给木马提供了一个藏身之处。而且利用配置文件的特殊作用,木马很容易就能在大家的计算机中运行、发作,从而偷窥或者监视大家。不过,现在这种方式不是很隐蔽,容易被发现,所以在Autoexec.bat和Config.sys中加载木马程序的并不多见,但也不能因此而掉以轻心哦。 3、潜伏在Win.ini中 木马要想达到控制或者监视计算机的目的,必须要运行,然而没有人会傻到自己在自己的计算机中运行这个该死的木马。当然,木马也早有心理准备,知道人类是高智商的动物,不会帮助它工作的,因此它必须找一个既安全又能在系统启动时自动运行的地方,于是潜伏在Win.ini中是木马感觉比较惬意的地方。大家不妨打开Win.ini来看看,在它的[windows]字段中有启动命令“load=”和“run=”,在一般情况下“=”后面是空白的,如果有后跟程序,比方说是这个样子:run=c:\windows\file.exe load=c:\windows\file.exe 这时你就要小心了,这个file.exe很可能是木马哦。 4、伪装在普通文件中 这个 *** 出现的比较晚,不过现在很流行,对于不熟练的windows操作者,很容易上当。具体 *** 是把可执行文件伪装成图片或文本----在程序中把图标改成Windows的默认图片图标, 再把文件名改为*.jpg.exe, 由于Win98默认设置是"不显示已知的文件后缀名",文件将会显示为*.jpg, 不注意的人一点这个图标就中木马了(如果你在程序中嵌一张图片就更完美了)。 5、内置到注册表中 上面的 *** 让木马着实舒服了一阵,既没有人能找到它,又能自动运行,真是快哉!然而好景不长,人类很快就把它的马脚揪了出来,并对它进行了严厉的惩罚!但是它还心有不甘,总结了失败教训后,认为上面的藏身之处很容易找,现在必须躲在不容易被人发现的地方,于是它想到了注册表!的确注册表由于比较复杂,木马常常喜欢藏在这里快活,赶快检查一下,有什么程序在其下,睁大眼睛仔细看了,别放过木马哦:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion下所有以“run”开头的键值;HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion下所有以“run”开头的键值;HKEY-USERS\.Default\Software\Microsoft\Windows\CurrentVersion下所有以“run”开头的键值。 6、在System.ini中藏身 木马真是无处不在呀!什么地方有空子,它就往哪里钻!这不,Windows安装目录下的System.ini也是木马喜欢隐蔽的地方。还是小心点,打开这个文件看看,它与正常文件有什么不同,在该文件的[boot]字段中,是不是有这样的内容,那就是shell=Explorer.exe file.exe,如果确实有这样的内容,那你就不幸了,因为这里的file.exe就是木马服务端程序!另外,在System.ini中的[386Enh]字段,要注意检查在此段内的“driver=路径\程序名”,这里也有可能被木马所利用。再有,在System.ini中的[mic]、[drivers]、[drivers32]这三个字段,这些段也是起到加载驱动程序的作用,但也是增添木马程序的好场所,现在你该知道也要注意这里喽。 7、隐形于启动组中 有时木马并不在乎自己的行踪,它更注意的是能否自动加载到系统中,因为一旦木马加载到系统中,任你用什么 *** 你都无法将它赶跑(哎,这木马脸皮也真是太厚),因此按照这个逻辑,启动组也是木马可以藏身的好地方,因为这里的确是自动加载运行的好场所。动组对应的文件夹为:C:\windows\start menu\programs\startup,在注册表中的位置:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ Explorer\ShellFolders Startup="C:\windows\start menu\programs\startup"。要注意经常检查启动组哦! 8、隐蔽在Winstart.bat中 按照上面的逻辑理论,凡是利于木马能自动加载的地方,木马都喜欢呆。这不,Winstart.bat也是一个能自动被Windows加载运行的文件,它多数情况下为应用程序及Windows自动生成,在执行了Win.com并加载了多数驱动程序之后开始执行(这一点可通过启动时按F8键再选择逐步跟踪启动过程的启动方式可得知)。由于Autoexec.bat的功能可以由Winstart.bat代替完成,因此木马完全可以像在Autoexec.bat中那样被加载运行,危险由此而来。 9、捆绑在启动文件中 即应用程序的启动配置文件,控制端利用这些文件能启动程序的特点,将 *** 好的带有木马启动命令的同名文件上传到服务端覆盖这同名文件,这样就可以达到启动木马的目的了。 10、设置在超级连接中 木马的主人在网页上放置恶意代码,引诱用户点击,用户点击的结果不言而喻:开门揖盗!奉劝不要随便点击网页上的链接,除非你了解它,信任它,为它死了也愿意等等。 下面再看木马的清除 *** 1、检查注册表中RUN、RUNSERVEICE等几项,先备份,记下可以启动项的地址, 再将可疑的删除。 2、删除上述可疑键在硬盘中的执行文件。 3、一般这种文件都在WINNT,SYSTEM,SYSTEM32这样的文件夹下,他们一般不会单独存在,很可能是有某个母文件复制过来的,检查C、D、E等盘下有没有可疑的.exe,.com或.bat文件,有则删除之。 4、检查注册表HKEY_LOCAL_MACHINE和HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main中的几项(如Local Page),如果被修改了,改回来就可以。 5、检查HKEY_CLASSES_ROOT\inifile\shell\open\command和HKEY_CLASSES_ROOT\txtfile\shell\open\command等等几个常用文件类型的默认打开程序是否被更改。这个一定要改回来。很多病毒就是通过修改.txt,.ini等的默认打开程序让病毒“长生不老,永杀不尽”的。 6、如果有可能,对病毒的母文件进行反汇编,比如我上次中的那个病毒,通过用IDA反汇编,发现它还偷窃系统密码并建立 %systemroot%\system\mapis32a.dll 文件把密码送到一个邮箱中,由于我用的是W2K,所以它当然没有得手。 至此,病毒完全删除! 笔者建议有能力的话,时刻注意系统的变化,奇怪端口、可疑进程等等。 现在的病毒都不象以前那样对系统数据破坏很严重,也好发现的多,所以尽量自己杀毒(较简单的病毒、木马)。
如何判断电脑是否感染木马病毒
电脑一旦感染病毒是比较难判断的,有些病毒会潜伏在电脑了,过一段时间才回发作,但一般电脑要是中了病毒,就会使电脑的速度减慢,占有大量系统资源,还有,就是主机箱上的硬盘指示灯,在没有操作的情况下,会长时间的闪动,那就基本上可以肯定是有了病毒,在就是 *** 木马,只要检查一下你对外连接的端口就可以查出来,木马进入电脑后,会开放一个端口,与外界进行连接,一般情况下,接入 *** 开放的端口是137、138和139端口,在就是一些软件的端口,比如,讯雷默认端口是3077,其余的端口在不使用的时候是不开放的,如果你发现有长时间开放的端口,那就是中了木马。
木马简介前言
在我潜意识中说起“木马”马上就联想到三国时期诸葛亮先生发明的木牛流马,当初怎么就想不通它与病毒扯上关系了。经过一番了解,原来它是借用了一个古希腊士兵藏在木马中潜入敌方城市,从而一举占领敌方城市的故事,因为现在所讲的木马病毒侵入远程主机的方式在战略上与其攻城的方式一致。通个这样的解释相信大多数朋友对木马入侵主机的方式所有领悟:它就是通过潜入你的电脑系统,通过种种隐蔽的方式在系统启动时自动在后台执行的程序,以“里应外合”的工作方式,用服务器/客户端的通讯手段,达到当你上网时控制你的电脑,以窃取你的密码、游览你的硬盘资源,修改你的文件或注册表、偷看你的邮件等等。
一旦你的电脑被它控制,则通常表现为蓝屏然死机;CD-ROM莫名其妙地自己弹出;鼠标左右键功能颠倒或者失灵或文件被删除;时而死机,时而又重新启动;在没有执行什么操作的时候,却在拼命读写硬盘;系统莫明其妙地对软驱进行搜索;没有运行大的程序,而系统的速度越来越慢,系统资源占用很多;用 CTRL+ALT+DEL调出任务表,发现有多个名字相同的程序在运行,而且可能会随时间的增加而增多等等。
不过要知道,即使发现了你的机器染上木马病毒,也不必那么害怕,因为木马病毒与一般病毒在目的上有很大的区别,即使木马运行了,也不一定会对你的机器造成危害。但肯定有坏处,你的上网密码有可能已经跑到别人的收件箱里了,这样黑客们就可以盗用你的上网账号上网了!木马程序也是病毒程序的一类,但更具体的被认为黑客程序,因为它入侵的目的是为发布这些木马程序的人,即所谓的黑 *** 务的。
本文将就木马的一些特征、木马入侵的一些常用手法及清除 *** 以及如何避免木马的入侵以及几款常见木马程序的清除四个方面作一些综合说明。
木马的基本特征
木马是病毒的一种,同时木马程序又有许多种不同的种类,那是受不同的人、不同时期开发来区别的,如BackOrifice(BO)、 BackOrifice2000、Netspy、Picture、Netbus、Asylum、冰河等等这些都属于木马病毒种类。综合现在流行的木马程序,它们都有以下基本特征:
1、隐蔽性是其首要的特征
如其它所有的病毒一样,木马也是一种病毒,它必需隐藏在你的系统之中,它会想尽一切办法不让你发现它。很多人的对木马和远程控制软件有点分不清,因为我前面讲了木马程序就要通过木马程序驻留目标机器后通过远程控制功能控制目标机器。实际上他们两者的更大区别就是在于这一点,举个例子来说吧,象我们进行局域网间通讯的常软件——PCanywhere大家一定不陌生吧,大家也知道它是一款远程通讯软件。PCanwhere在服务器端运行时,客户端与服务器端连接成功后客户端机上会出现很醒目的提示标志。而木马类的软件的服务器端在运行的时候应用各种手段隐藏自己,不可能还出现什么提示,这些黑客们早就想到了方方面面可能发生的迹象,把它们扼杀了。例如大家所熟悉木马修改注册表和ini文件以便机器在下一次启动后仍能载入木马程式,它不是自己生成一个启动程序,而是依附在其它程序之中。有些把服务器端和正常程序绑定成一个程序的软件,叫做exe-binder绑定程式,可以让人在使用绑定的程式时,木马也入侵了系统,甚至有个别木马程序能把它自身的exe文件和服务器端的图片文件绑定,在你看图片的时候,木马也侵入了你的系统。它的隐蔽性主要体现在以下两个方面:
a、不产生图标
它虽然在你系统启动时会自动运行,但它不会在“任务栏”中产生一个图标,这是容易理解的,不然的话,凭你的火眼金睛你一定会发现它的。我们知道要想在任务栏中隐藏图标,只需要在木马程序开发时把“Form”的“Visible ”属性设置为“False”、把“ShowintaskBar”属性设置为“Flase”即可;
b、木马程序自动在任务管理器中隐藏,并以“系统服务”的方式欺骗操作系统。
2、它具有自动运行性
它是一个当你系统启动时即自动运行的程序,所以它必需潜入在你的启动配置文件中,如win.ini、system.ini、winstart.bat以及启动组等文件之中。
3、木马程序具有欺骗性
木马程序要达到其长期隐蔽的目的,就必需借助系统中已有的文件,以防被你发现,它经常使用的是常见的文件名或扩展名,如“dll\win\sys \explorer等字样,或者仿制一些不易被人区别的文件名,如字母“l”与数字“1”、字母“o”与数字“0”,常修改基本个文件中的这些难以分辨的字符,更有甚者干脆就借用系统文件中已有的文件名,只不过它保存在不同路径之中。还有的木马程序为了隐藏自己,也常把自己设置成一个ZIP文件式图标,当你一不小心打开它时,它就马上运行。等等这些手段那些编制木马程序的人还在不断地研究、发掘,总之是越来越隐蔽,越来越专业,所以有人称木马程序为“骗子程序”。
4、具备自动恢复功能
现在很多的木马程序中的功能模块已不再是由单一的文件组成,而是具有多重备份,可以相互恢复。
5、能自动打开特别的端口
木马程序潜入人的电脑之中的目的不主要为了破坏你的系统,更是为了获取你的系统中有用的信息,这样就必需当你上网时能与远端客户进行通讯,这样木马程序就会用服务器/客户端的通讯手段把信息告诉黑客们,以便黑客们控制你的机器,或实施更加进一步入侵企图。你知不知道你的电脑有多少个对外的“门”,不知道吧,告诉你别吓着,根据TCP/IP协议,每台电脑可以有256乘以256扇门,也即从0到65535号“门,但我们常用的只有少数几个,你想有这么门可以进,还能进不来?当然有门我们还是可以关上它们的,这我在预防木马的办法中将会讲到。
6、 功能的特殊性
通常的木马的功能都是十分特殊的,除了普通的文件操作以外,还有些木马具有搜索cache中的口令、设置口令、扫描目标机器人的IP地址、进行键盘记录、远程注册表的操作、以及锁定鼠标等功能,上面所讲的远程控制软件的功能当然不会有的,毕竟远程控制软件是用来控制远程机器,方便自己操作而已,而不是用来黑对方的机器的。
7、黑客组织趋于公开化
以往还从未发现有什么公开化的病毒组织(也许是我孤陋寡闻),多数病毒是由个别人出于好奇(当然也有专门从事这一职业的),想试一下自己的病毒程序开发水平而做的,但他(她)绝对不敢公开,因为一旦发现是有可能被判坐牢或罚款的,这样的例子已不再什么新闻了。如果以前真的也有专门开发病毒的病毒组织,但应绝对是属于“地下”的。现在倒好,什么专门开发木马程序的组织到处都是,不光存在,而且还公开在网上大肆招兵买马,似乎已经合法化。正因如此所以黑客程序不断升级、层出不穷,黑的手段也越来越高明。我不知道为什么,但据讲其理由是“为了自卫、为了爱国” 。
木马入侵的常用手法及清除 ***
虽然木马程序千变万化,但正如一位木马组织的负责人所讲,大多数木马程序没有特别的功能,入侵的手法也差不多,只是以前有关木马程序的重复,只是改了个名而已,现在他们都要讲究效率,据说他们要杜绝重复开发,浪费资源。当然我们也只能讲讲以前的一些通用入侵手法,因为我们毕竟不是木马的开发者,不可能有先知先觉。
1、在win.ini文件中加载
一般在win.ini文件中的[windwos]段中有如下加载项:
run= load= ,一般此两项为空,如图1所示。
图1
如果你发现你的系统中的此两项加载了任何可疑的程序时,应特别当心,这时可根据其提供的源文件路径和功能进一步检查。我们知道这两项分别是用来当系统启动时自动运行和加载程序的,如果木马程序加载到这两个子项中之后,那么当你的系统启动后即可自动运行或加载了。当然也有可能你的系统之中确是需要加载某一程序,但你要知道这更是木马利用的好机会,它往往会在现有加载的程序文件名之后再加一个它自己的文件名或者参数,这个文件名也往往用你常见的文件,如command.exe、sys.com等来伪装。
2、在System.ini文件中加载
我们知道在系统信息文件system.ini中也有一个启动加载项,那就是在[BOOT]子项中的“Shell”项,如图2所示。
图2
在这里木马最惯用的伎俩就是把本应是“Explorer”变成它自己的程序名,名称伪装成几乎与原来的一样,只需稍稍改"Explorer”的字母“l”改为数字“1”,或者把其中的“o”改为数字“0”,这些改变如果不仔细留意是很难被人发现的,这就是我们前面所讲的欺骗性。当然也有的木马不是这样做的,而是直接把“Explorer”改为别的什么名字,因为他知道还是有很多朋友不知道这里就一定是“Explorer”,或者在 “Explorer”加上点什么东东,加上的那些东东肯定就是木马程序了。
3、修改注册表
如果经常研究注册表的朋友一定知道,在注册表中我们也可以设置一些启动加载项目的,编制木马程序的高手们当然不会放过这样的机会的,况且他们知道注册表中更安全,因为会看注册表的人更少。事实上,只要是”Run\Run-\RunOnce\RunOnceEx\ RunServices \RunServices-\RunServicesOnce 等都是木马程序加载的入口,如[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Windows\CurrentVersion\Run或\RunOnce],如图3所示;
图3
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run或Run -或RunOnce或RunOnceEx或RunServices或RunServices-或RunServicesOnce],如图4所示。
图4
你只要按照其指定的源文件路径一路查过去,并具体研究一下它在你系统这中的作用就不难发现这些键值的作用了,不过同样要注意木马的欺骗性,它可是最善于伪装自己呵!同时还要仔细观察一下在这些键值项中是否有类似netspy.exe、空格、.exe或其它可疑的文件名,如有则立即删除。
4、修改文件打开关联
木马程序发展到了今天,他们发现以上的那些老招式不灵了,为了更加隐蔽自己,他们所采用隐蔽的手段也是越来越高明了(不过这也是万物的生存之道,你说呢?),它们采用修改文件打开关联来达到加载的目的,当你打开了一个已修改了打开关联的文件时,木马也就开始了它的运作,如冰河木马就是利用文本文件(.txt)这个最常见,但又最不引人注目的文件格式关联来加载自己,当有人打开文本文件时就自动加载了冰河木马。
修改关联的途经还是选择了注册表的修改,它主要选择的是文件格式中的“打开”、“编辑”、“打印”项目,如冰河木马修改的对象如图5所示,
图5
如果感染了冰河木马病毒则在[HKEY_CLASSES_ROOT\txtfile\shell\open\command]中的键值不是“c:\windows\notepad.exe %1”,而是改为“sy***plr.exe %1”。
以上所介绍的几种木马入侵方式,如果发现了我们当然是立即对其删除,并要立即与 *** 断开,切断黑客通讯的途径,在以上各种途径中查找,如果是在注册表发现的,则要利用注册表的查找功能全部查找一篇,清除所有的木马隐藏的窝点,做到彻底清除。如果作了注册表备份,更好全部删除注册表后再导入原来的备份注册表。
在清除木马前一定要注意,如果木马正在运行,则你无法删除其程序,这时你可以重启动到DOS方式然后将其删除。有的木马会自动检查其在注册表中的自启动项,如果你是在木马处于活动时删除该项的话它能自动恢复,这时你可以重启到DOS下将其程序删除后再进入Win9x下将其注册表中的自启动项删除。
下载东西老提示是病毒,怎样识别哪些是木马病毒?
1.伪装成图片文件。这是黑客常用来骗别人执行木马的 *** 。将木马说成为图像文件,比如说是照片,只要入侵者扮成美眉及更改服务端程序的文件名为“类似”图像文件的名称,然后再假装传送照片给受害者,一般情况下受害者就会立刻执行它,致使电脑系统感染木马。
2.伪装成应用程序扩展组件。这类扩展组件的木马最难识别。黑客通常将木马程序写成各种类型的文件,然后挂到一个出名软件的安装目录中,由于软件本身很出名,所以通常不会有人怀疑它的安全性,更不会检查它的文件是否多了,当运行这个软件的时候,木马也会同时运行。
3.逆名木马伪装成JPG 、TXT文件。木马作者通过技术手段,使得文件名逆向显示为:扩展名+文件名(exe.txt),让木马文件名看上去跟记事本文件完全一样,即使是经验丰富的IT技术人员也会很容易被该木马欺骗。
4.利用你的惯性点击心理,伪装成文件夹。把木马文件伪装成文件夹图标后,放在一个文件夹中,然后在外面再套三四个空文件夹,很多人出于连续点击的习惯,点到那个伪装成文件夹木马时,也会收不住鼠标点下去,这样木马就成功运行了。
5.邮件冒名欺骗。该类木马植入的前提是,用匿名邮件工具冒充好友或大型网站、机构单位向别人发带木马附件的邮件,只要下载附件并打开的话就中木马了。
6.伪装成RAR等压缩文件。木马作者会将木马和一个热门的资源(比如 *** 照片)捆绑成一个自解压包文件,同时文件图标会更换成为RAR图标,由于图片相似度极高,用户很容易就误操作,同时,为了防止被用户识破木马,作者还会修改rar等压缩包的关键数据结构,这样一来用户很难通过解压的方式来辨别文件中是否包含木马。
什么是木马?
什么是木马?
特洛伊木马(以下简称木马),英文叫做“Trojan house”,其名称取自希腊神话的特洛伊木马记。
它是一种基于远程控制的黑客工具,具有隐蔽性和非授权性的特点。
所谓隐蔽性是指木马的设计者为了防止木马被发现,会采用多种手段隐藏木马,这样服务端即使发现感染了木马,由于不能确定其具 *** 置,往往只能望“马”兴叹。
所谓非授权性是指一旦控制端与服务端连接后,控制端将享有服务端的大部分操作权限,包括修改文件,修改注册表,控制鼠标,键盘等等,而这些权力并不是服务端赋予的,而是通过木马程序窃取的。
从木马的发展来看,基本上可以分为两个阶段。
最初 *** 还处于以UNIX平台为主的时期,木马就产生了,当时的木马程序的功能相对简单,往往是将一段程序嵌入到系统文件中,用跳转指令来执行一些木马的功能,在这个时期木马的设计者和使用者大都是些技术人员,必须具备相当的 *** 和编程知识。
而后随着WINDOWS平台的日益普及,一些基于图形操作的木马程序出现了,用户界面的改善,使使用者不用懂太多的专业知识就可以熟练的操作木马,相对的木马入侵事件也频繁出现,而且由于这个时期木马的功能已日趋完善,因此对服务端的破坏也更大了。
所以所木马发展到今天,已经无所不用其极,一旦被木马控制,你的电脑将毫无秘密可言。
参考资料:
回答者:完颜康康 - 探花 十一级 9-18 12:40
--------------------------------------------------------------------------------
DLL 木马揭秘
相信经常玩木马的朋友们都会知道一些木马的特性,也会有自己最喜爱的木马,不过,很多朋友依然不知道近年兴起的“DLL木马”为何物。什么是“DLL木马”呢?它与一般的木马有什么不同?
一、从DLL技术说起
要了解DLL木马,就必须知道这个“DLL”是什么意思,所以,让我们追溯到几年前,DOS系统大行其道的日子里。在那时候,写程序是一件繁琐的事情,因为每个程序的代码都是独立的,有时候为了实现一个功能,就要为此写很多代码,后来随着编程技术发展,程序员们把很多常用的代码 *** (通用代码)放进一个独立的文件里,并把这个文件称为“库”(Library),在写程序的时候,把这个库文件加入编译器,就能使用这个库包含的所有功能而不必自己再去写一大堆代码,这个技术被称为“静态链接”(Static Link)。静态链接技术让劳累的程序员松了口气,一切似乎都很美好。可是事实证明,美好的事物不会存在太久,因为静态链接就像一个粗鲁的推销员,不管你想不想要宣传单,他都全部塞到你的手上来。写一个程序只想用到一个库文件包含的某个图形效果,就因为这个,你不得不把这个库文件携带的所有的图形效果都加入程序,留着它们当花瓶摆设,这倒没什么重要,可是这些花瓶却把道路都阻塞了——静态链接技术让最终的程序成了大块头,因为编译器把整个库文件也算进去了。
时代在发展,静态链接技术由于天生的弊端,不能满足程序员的愿望,人们开始寻找一种更好的 *** 来解决代码重复的难题。后来,Windows系统出现了,时代的分水岭终于出现。Windows系统使用一种新的链接技术,这种被称为“动态链接”(Dynamic Link)的新技术同样也是使用库文件,微软称它们为“动态链接库”——Dynamic Link Library,DLL的名字就是这样来的。动态链接本身和静态链接没什么区别,也是把通用代码写进一些独立文件里,但是在编译方面,微软绕了个圈子,并没有采取把库文件加进程序的 *** ,而是把库文件做成已经编译好的程序文件,给它们开个交换数据的接口,程序员写程序的时候,一旦要使用某个库文件的一个功能函数,系统就把这个库文件调入内存,连接上这个程序占有的任务进程,然后执行程序要用的功能函数,并把结果返回给程序显示出来,在我们看来,就像是程序自己带有的功能一样。完成需要的功能后,这个DLL停止运行,整个调用过程结束。微软让这些库文件能被多个程序调用,实现了比较完美的共享,程序员无论要写什么程序,只要在代码里加入对相关DLL的调用声明就能使用它的全部功能。最重要的是,DLL绝对不会让你多拿一个花瓶,你要什么它就给你什么,你不要的东西它才不会给你。这样,写出来的程序就不能再携带一大堆垃圾了——绝对不会让你把吃剩的东西带回家,否则罚款,这是自助餐。
DLL技术的诞生,使编写程序变成一件简单的事情,Windows为我们提供了几千个函数接口,足以满足大多数程序员的需要。而且,Windows系统自身就是由几千个DLL文件组成,这些DLL相互扶持,组成了强大的Windows系统。如果Windows使用静态链接技术,它的体积会有多大?我不敢想。
二、应用程序接口API
上面我们对DLL技术做了个大概分析,在里面我提到了“接口”,这又是什么呢?因为DLL不能像静态库文件那样塞进程序里,所以,如何让程序知道实现功能的代码和文件成了问题,微软就为DLL技术做了标准规范,让一个DLL文件像奶酪一样开了许多小洞,每个洞口都注明里面存放的功能的名字,程序只要根据标准规范找到相关洞口就可以取得它要的美味了,这个洞口就是“应用程序接口”(Application Programming Interface),每个DLL带的接口都不相同,尽更大可能的减少了代码的重复。用Steven的一句话:API就是一个工具箱,你根据需要取出螺丝刀、扳手,用完后再把它们放回原处。在Windows里,最基本的3个DLL文件是kernel32.dll、user32.dll、gdi32.dll。它们共同构成了基本的系统框架。
三、DLL与木马
DLL是编译好的代码,与一般程序没什么大差别,只是它不能独立运行,需要程序调用。那么,DLL与木马能扯上什么关系呢?如果你学过编程并且写过DLL,就会发现,其实DLL的代码和其他程序几乎没什么两样,仅仅是接口和启动模式不同,只要改动一下代码入口,DLL就变成一个独立的程序了。当然,DLL文件是没有程序逻辑的,这里并不是说DLL=EXE,不过,依然可以把DLL看做缺少了main入口的EXE,DLL带的各个功能函数可以看作一个程序的几个函数模块。DLL木马就是把一个实现了木马功能的代码,加上一些特殊代码写成DLL文件,导出相关的API,在别人看来,这只是一个普通的DLL,但是这个DLL却携带了完整的木马功能,这就是DLL木马的概念。也许有人会问,既然同样的代码就可以实现木马功能,那么直接做程序就可以,为什么还要多此一举写成DLL呢?这是为了隐藏,因为DLL运行时是直接挂在调用它的程序的进程里的,并不会另外产生进程,所以相对于传统EXE木马来说,它很难被查到。
四、DLL的运行
虽然DLL不能自己运行,可是Windows在加载DLL的时候,需要一个入口函数,就如同EXE的main一样,否则系统无法引用DLL。所以根据编写规范,Windows必须查找并执行DLL里的一个函数DllMain作为加载DLL的依据,这个函数不作为API导出,而是内部函数。DllMain函数使DLL得以保留在内存里,有的DLL里面没有DllMain函数,可是依然能使用,这是因为Windows在找不到DllMain的时候,会从其它运行库中找一个不做任何操作的缺省DllMain函数启动这个DLL使它能被载入,并不是说DLL可以放弃DllMain函数。
五、DLL木马技术分析
到了这里,您也许会想,既然DLL木马有那么多好处,以后写木马都采用DLL方式不就好了吗?话虽然是这么说没错,但是DLL木马并不是一些人想象的那么容易写的。要写一个能用的DLL木马,你需要了解更多知识。
1.木马的主体
千万别把木马模块写得真的像个API库一样,这不是开发WINAPI。DLL木马可以导出几个辅助函数,但是必须有一个过程负责主要执行代码,否则这个DLL只能是一堆零碎API函数,别提工作了。
如果涉及一些通用代码,可以在DLL里写一些内部函数,供自己的代码使用,而不是把所有代码都开放成接口,这样它自己本身都难调用了,更不可能发挥作用。
DLL木马的标准执行入口为DllMain,所以必须在DllMain里写好DLL木马运行的代码,或者指向DLL木马的执行模块。
2.动态嵌入技术
Windows中,每个进程都有自己的私有内存空间,别的进程是不允许对这个私人领地进行操作的,但是,实际上我们仍然可以利用种种 *** 进入并操作进程的私有内存,这就是动态嵌入,它是将自己的代码嵌入正在运行的进程中的技术。动态嵌入有很多种,最常见的是钩子、API以及远程线程技术,现在的大多数DLL木马都采用远程线程技术把自己挂在一个正常系统进程中。其实动态嵌入并不少见,罗技的MouseWare驱动就挂着每一个系统进程-_-
远程线程技术就是通过在另一个进程中创建远程线程(RemoteThread)的 *** 进入那个进程的内存地址空间。在DLL木马的范畴里,这个技术也叫做“注入”,当载体在那个被注入的进程里创建了远程线程并命令它加载DLL时,木马就挂上去执行了,没有新进程产生,要想让木马停止惟有让挂接这个木马DLL的进程退出运行。但是,很多时候我们只能束手无策——它和Explorer.exe挂在一起了,你确定要关闭Windows吗?
3.木马的启动
有人也许会迫不及待的说,直接把这个DLL加入系统启动项目不就可以了。答案是NO,前面说过,DLL不能独立运行,所以无法在启动项目里直接启动它。要想让木马跑起来,就需要一个EXE使用动态嵌入技术让DLL搭上其他正常进程的车,让被嵌入的进程调用这个DLL的DllMain函数,激发木马运行,最后启动木马的EXE结束运行,木马启动完毕。
启动DLL木马的EXE是个重要角色,它被称为Loader,如果没有Loader,DLL木马就是破烂一堆,因此,一个算得上成熟的DLL木马会想办法保护它的Loader不会那么容易被毁灭。记得狼狈为奸的故事吗?DLL木马就是爬在狼Loader上的狈。
Loader可以是多种多样的,Windows的rundll32.exe也被一些DLL木马用来做了Loader,这种木马一般不带动态嵌入技术,它直接挂着rundll32进程运行,用rundll32的 *** (rundll32.exe [DLL名],[函数] [参数])像调用API一样去引用这个DLL的启动函数激发木马模块开始执行,即使你杀了rundll32,木马本体还是在的,一个最常见的例子就是3721中文实名,虽然它不是木马。
注册表的AppInit_DLLs键也被一些木马用来启动自己,如求职信病毒。利用注册表启动,就是让系统执行DllMain来达到启动木马的目的。因为它是kernel调入的,对这个DLL的稳定性有很大要求,稍有错误就会导致系统崩溃,所以很少看到这种木马。
有一些更复杂点的DLL木马通过svchost.exe启动,这种DLL木马必须写成NT-Service,入口函数是ServiceMain,一般很少见,但是这种木马的隐蔽性也不错,而且Loader有保障。
4.其它
到这里大家也应该对DLL木马有个了解了,是不是很想写一个?别急,不知道大家想过没有,既然DLL木马这么好,为什么到现在能找到的DLL木马寥寥无几?现在让我来泼冷水,最重要的原因只有一个:由于DLL木马挂着系统进程运行,如果它本身写得不好,例如没有防止运行错误的代码或者没有严格规范用户的输入,DLL就会出错崩溃。别紧张,一般的EXE也是这样完蛋的,但是DLL崩溃会导致它挂着的程序跟着遭殃,别忘记它挂接的是系统进程哦,结局就是……惨不忍睹。所以写一个能公布的DLL木马,在排错检查方面做的工作要比一般的EXE木马多,写得多了自己都烦躁……
六、DLL木马的发现和查杀
经常看看启动项有没有多出莫名其妙的项目,这是Loader的所在,只要杀了狼,狈就不能再狂了。而DLL木马本体比较难发现,需要你有一定编程知识和分析能力,在Loader里查找DLL名称,或者从进程里看多挂接了什么陌生的DLL,可是对新手来说……总之就是比较难啊比较难,所以,最简单的 *** :杀毒软件和防火墙(不是万能药,切忌长期服用)。
0条大神的评论