我对病毒分析的一点思考
看了置顶的“病毒分析之我见”的贴子,我对其中的很多想法还是很赞同的。同时,我也对病毒木马分析有些个人的思考,在这里贴出,与大家共享之。
1.我们为什么要分析恶意代码?个人认为分析恶意代码的主要目的应该是提高自已逆向水平,深入了解恶意代码机制,有可能的话还可以给出一些病毒木马的清除方法。同一类的病毒木马大多数功能类似,但其隐藏手法、躲避查杀的方法各不相同。其实在很多情况下调试一个病毒木马真正的乐趣在于看看它们都采用了哪些隐藏手段,免杀方式等等。所以那些被一个未知病毒感染而不知所措,希望版里人员能立即提供帮助的同学可能会失望了,因为分析一个病毒木马,到给出一个解决方案,其实需要投入很多精力的。到是像卡巴论坛,好像提供了上传样本并提供解决方案的。
2.如果你是想学习调试的新手,那你一定想知道调试病毒木马需要多高的门槛。对我而言,我认为至少需要具备这样的水平:(1)win32汇编基础,这个不多说。(2)要会使用动、静态调试工具各一套。这里对于新手,可以先会使用基本功能如动态调试中的下断,跟踪等,我是常用Ollydbg。静态工具像IDA pro的分析很详尽,有流图,有交叉引用很方便,我觉得挺好。这里我始终反对一个观点,说不要用IDA等工具以锻炼自已的调试水平。我个人觉得这还是目的问题,调病毒木马的目的我认为在于分析其各种与合法程序不同的机制,继而提高自已的逆向能力。如果只是想提高调试水平的话,找任一个二进制代码都可以。(3)我觉得很重要的一点就是你要对病毒木马有一定的认识,这对你分析病毒木马的行为很有用。比如病毒的感染机制,木马的隐藏机制等等。很多情况都是你看到代码中调用了哪些函数,然后直观上感觉它在做什么,然后再去分析调式都能验证你判断的正确性。(4)应该具备windows应用编程的经历。因为凡编过程的对win32 api有一定的了解,知道哪些函数是做什么的,即使不知道,也可通过MSDN查。这一点尤为重要,因为无论是什么代码,只要是运行在windows应用层,实现功能总要调用函数。当然,函数可能被隐藏。这里我似乎曾在版块中看过一个观点:要不要光盯着系统调用函数,要从分析中找“奇淫技巧”。这一点我也不太同意,我不知道什么算是“奇淫技巧”,我只知道,如果你真想知道程序在干什么,分析函数上下文代码是很必不可少的。
3.说说其它。(1)脱壳。我认为分析壳不应是本版的重点,其它版块有很多专业介绍。但现在大多数恶意代码都加了壳,这又是一个绕不开的工作。但就本版而言,我希望在精不在泛,上传的样本最好都是脱过壳的,这方面我并不擅长,不多说。这样有利于大家对病毒木马的真实分析。(2)动静分析。目前动态分析有两类:一类是沙箱,一类是动态调试。要说有利用提高分析病毒逆向水平的,无疑是动态调试。因为它能让你知道代码里的细枝末节,如何实现等等。但是沙箱,在不得已情况下也是有用的,比如你脱不了壳的代码,通过沙箱可以准确知道它们都调用了哪些系统函数,以及参数如何。这里我推荐一个老外的VSA,很好很强大,以前要么找到的是在线分析的网站,要么就是只给出代码对主机资源操作,从没在网上找到将所有函数和参数都截获的(只在一些英文论文里有但不对外提供)。代码的分析最好静动态结合。因为分析过程序的人都知道,有时读一段静态的代码很难理解,但动态调试很快你就知道它在干什么了。
4.病毒与木马。这两者的区别其实挺大的,虽然各大安全公司在杀毒时都不怎么区分。但在机制中,病毒更多的是感染,现在反而越来越少了。因为影响大,又没什么效益。木马重在于隐藏,现在种类繁多,因为它能给使用者带来巨大的经济效益,这一点不多说,如果你是报着干坏事儿的念头,我觉得和我是志不同道不和的。但从技术角度来讲,我其实更欣赏病毒,病毒绝大多数都是汇编写的,采用的变形,尤其是自动变形等技术到现在讲都不过时。如果你想对病毒研究的话,还得具备PE文件格式的基础知识。
5.分析精神。逆向一直都不是件容易的事,想真正分析一个病毒木马也不容易,尤其是功能全面的木马,代码量很大。因此这是一项花精力花时间的事,要做好心理准备。其实代码不用完全分析,比如木马,很多功能大同小异,那我们分析什么?我认为分析重点应在于它都采用了哪些保护自我的措施,如对关键字的加密,API的隐藏等,还有就是它运行过程中都创建了哪些文件,修改了哪些资源等等,有时分析得投入时确实觉得有些意思。
说了这么多,只是一家之言,不足之处,敬请指正。
另,最近分析了一个木马,有些收获,有时间放上来大家共享之。
