c语言木马源代码教程扫盲 进阶 深度剖析.docx
《c语言木马源代码教程扫盲 进阶 深度剖析.docx》由会员分享,可在线阅读,更多相关《c语言木马源代码教程扫盲 进阶 深度剖析.docx(76页珍藏版)》请在冰豆网上搜索。
c语言木马源代码教程扫盲进阶深度剖析
一.疱丁解马-木马查杀深度剖析之扫盲篇……………………………………………………
(1)
二.疱丁解马-木马查杀深度剖析之进程篇
(一)……………………………………………(3)
三.疱丁解马-木马查杀深度剖析之进程篇
(二)……………………………………………(7)
四.疱丁解马-木马查杀深度剖析之进程篇(三)……………………………………………(12)
五.疱丁解马-木马查杀深度剖析之进程篇(四)……………………………………………(18)
六.疱丁解马-木马查杀深度剖析之自启动项篇
(一)………………………………………(24)
七.疱丁解马-木马查杀深度培析之自启动项篇
(二)………………………………………(30)
八.疱丁解马-木马查杀深度培析之自启动项篇(三)………………………………………(35)
九.疱丁解马-木马查杀深度培析之自启动项篇(四)………………………………………(41)
十.疱丁解马-木马查杀深度剖析之文件篇
(一)……………………………………………(46)
十一.疱丁解马-木马查杀深度剖析之文件篇
(二)……………………………………………(52)
十二.疱丁解马-木马查杀深度剖析之文件篇(三)……………………………………………(61)
疱丁解马-木马查杀深度剖析之扫盲篇
一、前言
在进入正文之前呢,容我先说几句废话。
在写此文之前,我曾写过一篇“高级木马的自我保护技术与查杀之策”,承蒙各位朋友的厚爱,被各网站所转载,亦曾有许多朋友来信求助。
由于该文是心血来潮后的随笔所写,所以并没有经过深思熟虑,也并没有脉络可循,至使有的朋友能看懂,有的却看不懂。
而看得懂的呢,亦有很大一部分并不能真正的应用文中所提的查杀技巧。
故一直有心再写一篇文章,帮助深受木马毒害的朋友们了解木马是什么,又如何查杀。
本文适于下列人员阅读:
能熟练使用计算机的人
想自己动手解决问题的人
钱没有多到电脑一出问题就扔到电脑修理公司的人
适于下列人员参考:
电脑维修人员
微机管理人员
安全相关的程序开发人员
本文所要达到的目的是:
让菜鸟也可以了解系统安全自己来动手查毒杀马,由求助者变为帮助它人者。
在杀毒软件无能为力的情况下,借助本文的知识让你仍然能借助工具完成清理查杀的任务。
让您真正的明白一些看似神秘的、高深莫测的专用术语与技术的内幕。
让您了解Windows系统的底层知识。
本文以手动查杀为主,辅以必要的工具,文中用到的工具与测试用的仿木马小程序都提供了下载地址,供朋友们下载试用。
本文作者为MuseHero,您可在网络上任意转载,但请注明出处、作者并保持文章的完整性,谢谢。
二、木马知识扫盲篇
什么是木马呢?
木马只是一类程序的名字,为实现特殊目的而制作并偷偷植入目的计算机中的程序的统称。
其名字源于古希腊神话《木马屠城记》,全名为“特洛伊木马”有兴趣的可以翻看相关资料,很不错的一篇故事。
那什么又是程序呢?
呵,即然是扫盲篇,我们就不能回避这些让人头都大的问题,先从最基本的开始,熟悉计算机的朋友们可以直接跳到第三章去。
我们先了解一些基本的概念:
概念一:
计算机。
就是我们的电脑了,指的就是一堆硬件,显示器、主机、键盘、鼠标等等,当然了,拆开主机还有一堆零碎。
我们只需要了解其中几个后面会提到的就行了。
CPU:
计算机的指令处理单元。
所有的工作都是由它来做的,同一个CPU同一时间只能处理一条指令,就是说一旦CPU被某一程序占用,那在同一时刻内其它程序就肯定是空闲等待状态(双核的可以同时执行两条,以此类推)。
内存:
内部存储器。
CPU执行的指令都是由内存中读取的,所以,一个程序要运行首先要装入到内存中。
磁盘:
外部存储器。
存放文件数据的地方。
计算机中所有的数据平时都是存在这里的,只有在需要执行或查看时,才读取到内存中。
但只有硬件,是不能使用的,还需要软件的配合,我们买电脑时电脑中大都安装了某一操作系统,主流的就是MSWindows系统了(还有其它的操作系统如Linux等,这里不做讨论)。
这就是我们需要了解的也是以后要频繁出现的第二个概念了“系统”。
概念二:
系统。
系统其实在大多数情况下都指的是操作系统,也就是帮我们使用与管理硬件的软件系统,当我们按下机箱电源后,即由主板上的BIOS检测硬件、再交由硬盘中的引导程序启动操作系统,然后就出现了我们所熟悉的Windows主窗口(计算机在启动时做了些什么,我们会在后面详细的讲解),而以后我们的所有工作,看电影、听歌曲、玩游戏、上网浏览等等都是在这个窗口中进行。
操作系统维持这个窗口的显示及一些常用功能的完成,而这些功能是由一系列的程序来实现的,这又引出了我们的第三个概念“程序”
概念三:
程序。
程序是什么呢?
程序就是一组指令执行序列。
呵,有点专业了是不?
什么又叫指令执行序列呢?
举例来说:
我管理着一个工厂,正常情况下我让工人们按这样来工作“先去原料仓库取原料---进行初步加工---进行精细加工--进行零配件组装---验收---合格则送入成品库--不合格则销毁”。
这就是一个指令执行序列,当情况为正常时,工人们执行的是这个序列也就是这个“程序”。
而在旺销的季节呢,我还有第二个程序“取原料----进行初步加工----组装----进成品库”。
当情况为供不应求时,我就执行第二个程序。
还有第三个、第四个……等等,在不同的情况下,我让工人们执行不同的程序。
计算机程序也是一样的,跟据用户要求的不同,执行不同的指令序列,比如您要画图,你可能会这么操作“点击开始菜单--选择所有程序--在所有的程序中选择附件--再在附件中选择画图”,这就是你向操作系统下达的指令。
操作系统得到您的指令后,则会执行画图程序,也就是实现画图目的的一系列指令,而这些画图的指令储存在“mspaint.exe”文件中。
操作系统会将mspaint.exe中的指令装入到内存中交由CPU开始一条条的执行。
总结一下:
程序是什么呢?
说白了就是一个计划书,里面记载了先做什么后做什么。
好的程序是好的计划,坏的程序就是坏的计划,比如:
“收集炸药--买雷管--制成炸弹-放到张三的床下面-引爆”,这就是一个坏计划,相对于计算机来说就是一个坏程序。
坏程序有破坏作用吗?
也就是说你写了个爆了张三的计划书就可以炸了张三吗?
当然不可以,只有计划是不行的,还要去执行才能真正起到作用。
所以,一个木马程序仅仅是存在于您的计算机中时并不可怕,可怕的是它执行起来。
程序执行起来是什么呢?
那就是我们要说的第四个概念“进程”--执行中的程序。
概念四:
进程。
程序一旦进入内存中开始执行,就叫做进程(进程其实就是容纳指令与资源的容器)。
也就是说,他已经开始工作了,开始买炸药、制炸弹了,等执行到引爆那一条指令时,张三也就完蛋了。
所以,检查可疑进程,就是查杀木马的关键环节,也是重要的手段与方法。
找到木马的进程,并结束它,在它执行到引爆这条指令之前,就停止它的执行,并将它的程序自计算机中删除掉,就是我们所要达到的目的。
说到这里,细心的读者们可能想到了一个问题,画图程序的执行,是因为我们向操作系统下达了画图的指令,所以操作系统才调入画图程序开始执行画图的指令序列。
但是木马程序又是谁给操作系统下达的指令让木马的工作计划得到执行的呢?
这就是我们下面要说的第五个概念“自启动程序”
概念五:
自启动程序。
顾名思义,自启动程序,也就是不用您自己动手它自己就可以启动起来开始执行的程序。
这是些什么程序呢?
为什么要允许程序这样做呢?
难道是专为木马准备的?
呵,当然不是。
自启动程序有二大类,一是系统需要的;二是用户需要的。
系统需要的,是因为有些工作是无须经过用户同意,必须去做的。
比如,鼠标驱动。
为了能让用户使用鼠标,系统要自动加载鼠标驱动程序并执行。
用户需要的,一些重复性工作可能用户想让系统自动去做,而不是每天每时的重复这份工作。
比如:
用户可以设定多长时间无操作,就自动运行屏幕保护程序以便保护屏幕不被烧坏。
这显然必须要屏幕保护程序能自动的运行,用户是不可能每次手动去执行这个程序的。
而木马就是利用了这些本来是为系统或用户提供方便的手段,来实现自动运行它们自己的目的。
如:
木马用自己来取代屏幕保护程序,这样,长时间无操作时,运行的就不再是屏幕保护程序而是木马了。
在系统中有很多地方或方法是可以让程序自动运行起来的,这个我们在后面将一一讲述。
而清掉自启动项,让木马程序得不到执行,显然也就成为了我们查杀木马的重要手段之一。
而系统又是如何知道,哪一个程序应该在开机后就自动运行,无须等用户来操作呢?
朋友们应该能猜到,系统肯定是把这些需要自动运行的程序都记录到了某一个地方,记录到哪里了呢?
这就是我们要讲的第六个概念“注册表”
概念六:
注册表。
注册表是什么呢?
是系统记录信息用的一个数据库,举例来说它就像公司档案柜一样,发工资时,财务人员要查阅档案,以确定哪个员工应该发多少钱。
就像系统启动时查阅注册表,确定哪个程序应该自动启动起来一样。
这是一个非常宠大的数据中心,系统的关键信息都记录到那里,与现实中我们的档案柜一样,都很重要,一旦损坏将造成无可挽回的后果,所以微软公司不建议直接对注册表进行操作。
当然了,木马的作者通常是不会理会微软的建议的。
所以,木马通常都会将自己写入到注册表的某个自启动项中,以便开机时自动运行,而无须经过用户的同意。
讲到这里,又有一个不容回避的问题出现了,上面我们说了,木马程序其实就是一个计划书,而为了执行这份计划书,木马需要把自己写到注册表中的自启动程序序列中去。
而问题就是,这份计划书是如何来的呢?
如果得不到执行,它又如何将自己写到注册表的自启动程序中去呢?
不放到自启动程序中它就得不到执行,而得不到执行,它也就无法起到作用也包括无法将自己写到注册表中去……晕了,这成了先有鸡还是先有蛋的问题了。
那么木马是如何进入我们的计算机并获得首次执行的呢?
这就是我们要讲的第七个概念了“侵入”
概念七:
侵入。
侵入是什么呢?
也就是侵略进入喽,侵略需要被侵略者同意吗?
当然不需要。
将木马程序放入您的计算机,并让它得到首次执行的过程就是侵入。
侵入的方法有很多种,我们将在后面主动防御一章中详细讲解。
因为,相信现在朋友们最关心的并不是如何不让他进来,而是……我的电脑中现在是不是正在执行着木马程序呢?
已经执行到了哪一步呢?
是否马上就要引爆了呢?
我关机后下次还能打开不?
好,接下来,就让我们进入下一章,一起来看看,电脑中正在执行的木马程序“木马进程”。
疱丁解马-木马查杀深度剖析之进程篇
(一)
三、木马的查杀之进程篇
1、进程的查看
进程,我们上面说过了,狭义上讲就是正在执行中的程序。
那如何来查看系统中都有哪些程序正在执行呢?
(先看下图03-1:
)
系统自带了一个“任务管理器”可以使我们看到系统中当前的进程,在桌面下方的任务栏按右键,选择“任务管理器”或同时按下“Ctrl Alt Del”三个键、或同时按下“CtrlShift ESC”三个键,都可以打开任务管理器程序,看到上面的窗口。
看到上面的图时,会不会有点发昏?
20个进程,哪个是好的哪个是坏的呢?
上面的信息又都是些什么意思呢?
不要着急,让我来教教你怎么来看这些信息。
首先,显示哪些信息,是可以自由选择的,看到最上面的菜单没?
就是“文件、选项、查看、关机、帮助”。
依次选择“查看”---“选择列”并勾选里面的相应项就可以显示相应的信息。
举报帖子
我们关心的是前五个,即:
映像名称、PID、CPU、CPU时间、内存使用,下面依次进行介绍。
l映像名称:
即进程所对应的同名程序名字。
其中有两个是例外,“System”代表的是系统,并没有对应的同名程序;“System Idle Process”代表的是空闲进程,同样没有对应的同名程序,它占据了CPU的空闲时间。
我们可以依据此栏,来找到进程对应的程序文件。
lPID:
英文件缩写,即进程的ID,是一个唯一的数字,唯一的代表一个进程。
我们可以依据此栏来区分进程,尤其是同名的进程,比如:
SVCHOST.EXE进程。
lCPU:
即该进程当前消耗CPU的百分比,如果某个进程正在工作,那么CPU一列的数值就会是非零,工作量越大,其数值越高。
例外的是“System Idle Process”进程,它的数值越高,说明当前的系统越是空闲,所有进程的CPU一栏的数值相加等于100%CPU占用。
我们可以依据此栏来查看,哪些进程正在工作,哪些进程是空闲的。
上面我们说过,同一CPU在同一时间只能处理一个工作,所以如果某一进程长时间大量占用CPU,那么将会导致其它进程得不到或得到很少的CPU时间来处理,使系统反应速度严重迟缓。
这种情况的出现,通常是程序出现了问题,我们就要考虑结束掉霸占CPU不放的进程,并尽量查明原因。
lCPU时间:
自运行以来,该进程占用的全部CPU时间,此数值越大,代表该进程工作时间越长,注意,不是运行时间而是工作时间,如果运行后,进程只是等待,并没有工作,那么此时间也会很小。
例外的仍然是“System Idle Process”进程,它占据了CPU全部的空闲时间。
我们可以据此来判断,哪些进程在一直的工作,而这一直工作的进程是不是应该工作的正常进程。
比如我们一直在画图,那画图程序mspaint.exe的进程CPU时间很长,那就是很正常的;而如果我们在听音乐,从来没画过图,但这里却显示画图程序用了大量的CPU时间,那很可能就是某个黑客或木马或其它进程正在偷偷的使用画图程序呢。
l内存使用:
标明了该进程使用的内存数量,要知道,系统中的内存数量是有限的,当某一个进程大量占用内存时,就会导至系统或其它进程可用内存量减少,而至使系统运行速度减慢。
在某些情况下,可以依此来找出系统变慢的原因,并尽量使用占用内存小的程序来提高系统的性能。
虽然现在机器的配置都高了,内存也都大了,但在同等条件下,优先考虑使用占用资源少的程序也是有必要的。
要在这些进程中区分哪些是系统进程,哪些不是,用任务管理器显然很难做到,最好的办法是借助专业工具。
(看下图:
03-2)
上图是用反黑工具狙剑查看进程时的样子,狙剑程序的下载地址:
启动狙剑,并选择“进程管理”
就可以打开进程管理页面,与任务管理器相比,首先映像文件带了路径,使您可以直接定位到程序文件。
其次,多了父ID一栏,这个标明了该进程是由谁启动的,比如:
smss.exe的进程ID是540,父ID是4 那么,我们就可以知道,smss.exe是由进程ID为4的system进程启动的,而smss.exe又启动了csrss.exe与 winlogon.exe,接着由winlogon.exe启动了lsass.exe与 services.exe。
注意,有的进程并没有看到父进程,比如:
Explorer.exe 它的父ID是:
1216 但进程中并没有进程ID为1216的进程,这是因为系统在初始化时还有一个程序会自动运行,那就是Userinit.exe这个程序负责用户初始化工作,并负责启动Explorer.exe,而工作完成后,它就退出运行了,所以进程中并没有它。
最近有个木马是通过感染Userinit.exe来启动的,由于Userinit.exe启动后就退出了,所以通过查看进程很难发现问题,这问题我们将在“自启动项”一篇中详细讲解。
以上就是系统启动的顺序,从System开始,依次启动了几个进程,正常情况下,上面这几个进程都是系统关键进程,结束它们的运行将导至系统出现问题。
有很多朋友对开机以后系统都做了些什么比较感兴趣,而这对系统不能启动时的故障查明也有帮助,可以通过判断系统停在了哪个环节来断定是哪个部分出了问题,在这里,我就对系统的启动过程进行一下简单的说明:
系统的启动过程:
1、当你按下开机键时,最早是由主板BIOS蕊片中的BIOS程序来执行硬件检测任务的,如果检查过程中发现关键硬件的故障,就会发出特定的响声通知用户,并停止启动。
而BIOS程序是哪里来的呢?
这是在主板出厂时固化在芯片中的一段程序。
2、当硬件没有问题时,BIOS程序就会读入硬盘的主引导记录,将下面的任务交给主引导记录代码去完成。
而主引导记录又是哪里来的呢?
这是在安装操作系统时对磁盘进行分区格式化操作时,写到硬盘中的。
如果找不到主引导记录,会出错停止,告诉你这是非法的系统启动盘。
3、主引导记录代码的工作是读入磁盘主分区的根目录,在里面读出Ntldr文件,并装入内存,然后将控制权交给它。
注意看一下,你的硬盘根目录下是不是有个Ntldr文件?
这个文件的属性是隐藏、系统,所以查看时要选择查看所有,且不隐藏被保护的系统文件才可看到。
这个文件是哪里来的?
呵,当然是安装操作系统时拷贝到硬盘上的,下面提到的文件都是在安装操作系统时拷上去的。
如果没能找到Ntldr文件,则会停止启动,显示Ntldr没找到的错误信息。
4、Ntldr又做了些什么呢?
它会将系统由原来的16位实模式切换到32位保护模式或64位长模式。
它的工作是读取根目录下的Boot.ini文件,显然引导菜单,在多操作系统的计算机中,可以看到这个菜单。
接着它会清屏,并在Win2000下显示一个黑白的进度条,在XP下显示XP的标志图同时显示下面不断滚动的蓝色进度条,提示你它正在加载一些重要的文件。
它在加载什么呢?
它首先会加载Ntoskrnl.exe、Hal.dll,如果这两个文件找不到会出错停机,并显示找不到相应文件的信息。
接着它读入注册表的SYSTEM键文件,从中找出自动启动的各类驱动程序,这是很关键的,因为有些内核级的木马就是在这时启动的。
每加载一个屏幕上的进度条就滚动一下子。
中间如果某个驱动出问题,也可能会导至系统蓝屏崩溃。
5、接下来的工作由Ntoskrnl.exe(或Ntkrnlpa.exe)来进行,这是内核程序,它做的工作实在是太多了,这里就不再细说了。
它的最后一步工作就是创建会话管理子系统,也就是我们上面说过的,由System进程创建的Smss.exe进程。
6、Smss.exe进程负责创建用户模式环境,由用户模式环境向Windows提供可视的窗口界面。
它会运行BootExecute中定义的程序,正常情况下是Autochk,一个检查磁盘的程序。
但有些杀毒软件会把自己的程序加到这里,来实现引导时杀毒,如果您的系统安装了江民类的杀毒软件,那么此时就会执行它的引导期杀毒程序,就是进入系统前出现的蓝底蓝字的病毒扫描窗口。
Smss.exe还会执行SessionManager中的文件删除、移动操作,也就是调用API:
MoveFileEx并选择重启后移除文件的,就是在这个环节执行了。
当前有很多号称可以删除一切文件的安全工具都使用了MoveFileEx来实现文件的删除,但是现在我们可以知道了,它的文件删除是在这个阶段执行的,而这时驱动程序已经加载了,所以用它们来清除驱动级的木马显然是不胜任的。
创建附加的页面文件。
加载Win32k.sys,这个东西又是做什么的呢?
这是一个内核模式的系统驱动程序,它负责了窗口的显示、屏幕的输入、鼠标键盘和其它设备的输入及消息的传递等。
所以也是由Win32k.sys将显示器的分辩率设置为默认值的,也就是这个时候,咱们的计算机屏幕才真正的细致起来,在此以前都是VGA模式,当然了视频驱动是上面装载驱动程序时就已经加载了的,现在只是起到作用而已。
再然后呢,就是启动我们上面说过的那两个进程了。
就是Csrss.exe与Winlogon.exe进程。
启动完这两个进程后,Smss.exe就进入了无限的等待,它在等什么呢?
它在等它创建的Csrss.exe与Winlogon.exe,等着看这两个进程什么时候死掉,一旦他们中有死掉的,Smss.exe马上罢工,让系统彻底崩溃。
(在XP以后Csrss的死亡是由内核使系统崩溃的,而不是Smss.exe),所以千万不要结束系统进程。
Csrss.exe是做什么的呢?
它负责的工作是创建或删除进程、线程,控制台与虚拟DOS机的支持等。
它到此就开始工作了,不再参于后面的启动过程。
但是Winlogon.exe还有很多工作要做呢,我们接下来看看后面的启动过程。
7、Winlogon.exe是做什么的呢?
看它的名字应该看出个大概了吧。
是的,它是与登录相关的,但现在还不到显示登录窗口的时候,它还要先启动Services.exe及Lsass.exe进程,然后读取注册表GinaDLL中标明的DLL,由这个DLL来显示一个登录对话话,也就是我们在进入系统时输入用户名与口令的窗口。
为什么要先启动Lsass.exe呢?
因为,这是本地安全认证子系统,负责的就是本机系统的安全,用户名与口令的验证工作是由它来进行的。
还有一个我们上面提到过的进程也是这个时候由Winlogon.exe来启动的,是哪一个呢?
就是那个Userinit.exe,这是在用户登录进系统后,Winlogon.exe启动此进程来进行用户初始化。
你也可以自己加一个程序与Userinit.exe放在一起,那么,在这个时候Winlogon.exe会将那一位置的所有程序都启动起来。
当然了,相信你也想到了,这个还有那个GinaDLL也就成了木马启动的一个可选位置。
8、最后,由Winlogon.exe启动的Services.exe开始加载标明为自启动的各个服务,及标明为手动的却是有必要加载的服务(它所做的工作我们在后面细讲)。
9、而Userinit.exe呢,它在完成用户初始化后,就启动了Explorer.exe,并功成身退。
10、最后,Explorer.exe就成了我们的服务员,等待在那里静候我们的指令,听从我们的吩咐,进行相关程序的启动与功能的处理。
疱丁解马-木马查杀深度剖析之进程篇
(二)
接着上面的一篇来讲:
看完系统的启动过程后,我们再回过头去看那个进程图,是不是明白了很多呢?
除掉系统启动环节中启动的进程外,我们再看其它的进程,注意看一下儿,剩余的进程是不是都是由Services.exe或 Explorer.exe中的一个启动的。
Explorer.exe是系统的Shell程序,响应用户的请求,并执行对应的程序的工作就是由它来完成的,比如上面我们说过的,您想画图时,将画图程序启动起来的就是这个程序。
你想上网时,将浏览器启动起来的也是它。
当然了,一些用户的自动任务也是由它来完成启动过程的。
(这些我们将在下面的自启动程序一章中详细讲解)
Services.exe是系统的服务控制管理器,由它启动的进程称为“服务”,是一组特殊的进程。
此类进程是开机自动运行的,不依赖于用户的交互,说白了就是不用您管,它自己就会运行并且开始自己的工作,工作过程也无须您的干预。
说到这里,您可能会想,这不就是木马所需要的么?
不错,有很多木马是以服务进程的形式存在的。
那我们可以管理这些服务吗?
答案是肯定的,我们的计算机,我们当然有权力管理了。
看下面的图03-3:
在桌面上“我的电脑”上面按右键,选择“管理”就可以打开如上图所示的窗口。
依次选择:
服务与应用程序----服务 就可以看到上图右侧的服务列表。
最左侧的一列是服务的名称,需要注意的是这里列出的并非是对应的程序文件的名称,而仅仅是服务本身的名称。
那我们又怎么知道这个服务对应的是哪个程序文件呢?
如果我们想停止这个服务,并删除对应的程序文件,我们应该怎么做呢?
再看下图03-4:
在某一个服务上面按鼠标右键,选择“属性”,就可以打开此服务对应的属性页面,如上图所示。
在这里,我们可以看到一些有用的信息,并对此服务进行启动、停止、禁用等操作。
最上面的是服务名称,第二列是显示名称,第三列是关于服务的描述,也就是这个服务是做什么用的。
当然了,我们不能迷信这里的描述,因为木马可以自行设定这个描述。
再下面