小甲鱼之浅谈杀与不杀

你杀或者不杀我,我就在那里不悲不喜 借用黑客防线的名言:在攻与防的对立统一中寻求突破! 小甲鱼从现在开始就厚着脸皮跟大家来谈谈杀毒软件查杀病毒、木马的原理以及病毒、木马如何做出应对和反击的措施。  

第一篇 杀毒软件的查杀病毒的原理以及木马、病毒的免杀伎俩。

杀毒软件查杀病毒的原理

话说当年中国第一批病毒石头和小球病毒跟随着软盘悄悄地通过香港和美国进入了中国内地,并在人们得懵懵懂懂之间在大型企业和研究所之间广为传播,那时候中国人们猛然惊醒,甚至有带着口罩使用计算机的闹剧发生。

事实上我们要认识到,病毒也是一段程序,跟普通程序看上去并没有什么差别,只是实现了一些比较“不和谐”(小甲鱼似乎很喜欢这词哈~文明社会,注意和 谐!)的功能罢了。况且病毒的种类很多,木马事实上严格归类也是属于病毒的一种。不同病毒的代码各不相同,因此杀毒软件不能用一个固定的模型来判别所有的 病毒程序。这么一来,计算机病毒就存在不可识别性,查杀病毒就必须先搜集已知病毒的样本,然后通过剖析病毒,再将病毒传播感染的过程逆向过来,使得被感染 的计算机程序恢复原状。(杀软真伟大,我要写病毒我一定把原来的PE文件删得面目全非,看你怎么逆向……邪恶了……) 

现在常见的杀毒软件查杀病毒技术主流有两种:特征码查杀启发式查杀

所谓特征码查杀技术,就是指杀毒软件将已知的病毒进行分析后,提取出该病毒的一组特征码,什么是特征码,我们知道,任何程序代码都有他自己的特点。就像世 界上永远没有两片相同的叶子,世界上永远没有两个讲课会讲苍井空的小甲鱼一样,特征码病毒文件中一句或者几句特殊的代码。通过特征码,杀毒软件就能认出这 程序是病毒程序。

病毒的特征码主要分为:文件特征码(病毒存放在硬盘上的阶段)和内存特征码(病毒存已经到内存中的阶段)等。

病毒特征码的提取主要还是要辛苦杀毒软件背后默默付出的分析人员的主观分析。他们绝对是园丁式的人物,日日夜夜的对着病毒代码进行跟踪、调试、反汇编,最 终在长达几千字节的病毒文件中提取最典型最独特的十几个字节程度的特征代码……由于不同的杀毒软件有不同的园丁哈,所以同一个病毒程序做了特征码免杀,他 丫丫这个过了杀软免杀,那个确还是被杀,简直没完没了的原因就是:特征码因为是园丁不辞辛苦提取出来的,所以不同杀软对同一病毒总是提取出不同的特征码~ 有些童鞋可能会问了:“一个病毒有那么多特征码呀?”那小甲鱼又会这么回答:“难道你除了生殖器官长得跟别人不一样之外,其他都一样吗?!”同理可证 哈…… 又有童靴会发问了:“要是丫丫的刚好有一个正经的程序也纯在这么一个相同的特征码组合的话怎么办?”小甲鱼笑笑答道:“这就会产生传说中的……误杀!”。 事实上这比中彩票要难点哈,小甲鱼给大家举个例子:就当一段特征码有十个字节,那么每个字节有八位,十个字节有多少种不同组合的排列?赶紧的算,中学概率 题的说……答案是:2^8^10(^代表次方),捏手算下大概结果是1208925819614629174706176种不同的组合,你说中彩票容易还 是误杀容易??

所谓启发式查杀技术,说白了就是蜜罐策略。什么是蜜罐策略呢?这个技术可先进了去……一般情况下是通过虚拟机技术通过虚拟一个运行环境的方式来执行需要检 查的文件,只要你的文件发作,呵呵,他不就知道你是病毒咯~那他怎么知道你发作呢?事实上我们说过了,病毒也是一段程序哈。但是呀,病毒终归是病毒,它始 终是要做坏事的,例如感染、而已删除文件、感染正常PE文件、修改注册表、添加自启动等等,他也可能通过调用系统底层函数来免杀杀软,或者进行更深层的 rootkit隐藏……这一切一切因为他都是要调用系统的api 函数来进行操作的,所以这个虚拟环境就能够由此侦测出来咯~ 

但是虚拟机技术由于存在误杀可能性比较大,目前仅是作为特征码查杀技术的一种补充而已,用于防范未知病毒。 
为啥误杀的可能性比较大?嘿嘿,你想想系统搞那么多api 函数来干啥?不就是来用的嘛~要是用一下这个函数就说是病毒,那跟那把水果刀在家里切黄瓜(小甲鱼又邪恶了)就被警察以杀人罪枪毙有何不同??

第二篇 揭开常见病毒免杀手法的面纱

由 前一篇我们知道,杀毒软件虽然技术日益更新,但主流的查杀方案还是通过特征码的方式来查杀病毒木马的:当一个新的病毒木马或可疑程序一旦出现在网络上后, 会被杀毒软件厂商截获并进行分析。分析程序执行的操作和特征,如复制、删除文件,修改注册表,新建并启动服务,格式化硬盘,打开并监听端口等,确认其存在 安全风险后,由杀软公司的分析员研究该程序的文件结构,找出并定位程序的特征码。最后将特征码保存到杀软公司的数据库,下次杀软更新后就能对此程序“免 疫”啦~

小甲鱼猜到应该有些朋友会有疑问了:杀软厂商哪来那么大的本事,能够最快和最全的收集到网络上出现的新病毒木马或者恶意程序呢?

其实,来源主要有两个:
第一是由用户提交可疑程序给杀软厂商分析,一般提交后24小时内会被处理并答复(卡巴大叔据说这方面效率奇快,一般两个小时内会有回复),更新下病毒数据库后就可以免疫该病毒了;

第二是布置大量蜜罐和蜜网系统让病毒、黑客自己往里钻。虾米是蜜罐系统?其实蜜罐技术由来已久,蜜罐好比是情报收集系统。蜜罐好像是故意让人攻击的目标,引诱黑客前来攻击。所以攻击者入侵后,你就可以知道他是如何得逞的,随时了解针对贵公司服务器发动的最新的攻击和漏洞。还可以通过窃听黑客之间的联系,收集黑客所用的种种工具,并且掌握他们的社交网络。

哎呀,小甲鱼讲课总喜欢天马星空,想到啥就顺便讲讲啦,希望各位别介意哈~
我们继续回归到本文题目来~

根据特征码查杀原理,目前市面上演化出的免杀方法有很多,主要可以分为对木马程序结构的修改和源代码的修改两种。简单的说免杀就是做整容,整得连老妈都不认得就行了。以下小甲鱼给大家概括一下市面上的基本免杀方案:

修改特征码:利用特征码定位工具(如MyCCL, CCL, multiCCL等)跟踪定位某杀软针对程序的所有特征码,并通过修改实现免杀(一般NOP掉)。

加花指令:就 是在程序开头加入一段计算用的汇编指令和一些入口点内存地址的乱跳转。因为计算与跳转的最后结果是没有实质的意义(让CPU做无用功而已),所以这么做并 不影响程序的正常运行。但能使一些杀毒软件无法正确识别木马程序(因为杀软并非完全智能,也并非有很多空闲一直跟踪你),从而达到免杀的效果。今后小甲鱼 会教大家自己写花指令,其实花指令无非就是一堆相当让人郁闷的代码。需要汇编基础,建议学习小甲鱼的零基础入门学习汇编语言……

修改程序入口点:程序入口点修改就是改变入口点,通常用到的方法是在入口点的地址加1或把入口点地址拆开,也有加花指令之后把原入口点修改到花指令的入口点上令电脑先处理那段没意义的指令,再在花指令后再加跳转代码,跳转到程序执行数据的入口点上,令程序正常运行。
参考以下典型代码:


  1. <span style="font-family:KaiTi_GB2312;font-size:18px;">mov ebp,esp push ebp        ;把基址指针寄存器压入堆栈  
  2. pop ebp         ;把基址指针寄存器弹出堆栈   
  3. push eax        ;把数据寄存器压入堆栈  
  4. pop eax         ;把数据寄存器弹出堆栈   
  5. nop             ;不执行   
  6. add esp,1       ;指针寄存器加1   
  7. sub esp,1       ;指针寄存器减1   
  8. inc ecx         ;计数器加1   
  9. dec ecx         ;计数器减1   
  10. sub esp,1       ;指针寄存器加1   
  11. sub esp,-1      ;指针寄存器加-1   
  12. push 321BA      ;跳到内存入口地址321BA   
  13. retn            ;反回到入口地址   
  14. jb 456CD        ;跳到内存入口地址456CD   
  15. jnb 321BA       ;跳到内存入口地址321BA   
  16. mov eax,456CD   ;跳到内存入口地址456CD   
  17. jmp eax         ;跳到程序入口地址   
  18. jmp 321BA       ;跳到程序入口地址   
  19. push 123AB      ;把入口地址123AB压入堆栈   
  20. mov eax,123AB   ;把入口地址123AB转送到数据寄存器中。   
  21. jmp 123AB       ;跳到入口地址123AB(程序执行数据的入口点)</span>  


修改程序入口点:通用手段,将程序入口点+1处理。

乾坤大挪移:人为修改打乱 PE 段的位置,或者将 PE 段转移到空白处。

源码免杀:关键先要有源码,如 gh0st 等开源软件可以获取其源代码,通过修改被定位特征码位置的源代码(加注释、用等同语句替换、加冗杂语句等),使得源代码面目全非后并不影响原来的执行就行哈~

 


修改程序的输入表:每 个可执行文件一般都有输入表,用于定位动态链接库文件中的函数的地址,因为即使是病毒,在 windows系统的“呵护”下,所有的“恶意”操作都只能是通过调用 API函数来实现(windows妈妈有点像米国哈,啥都管! の对了…… windows好像也是米国的……怪不得……)。查找到输入表函数名并将其移位。

加密:对文件被定位特征码的区段进行加密,一般推荐选用 VMprotect,玩破解的童鞋都知道,这个不好搞。

加壳:其 实加壳本来就分加密壳和压缩壳,上边提到的 VMprotect本身就是一个虚拟机加密壳软件,有点重复,但为了显得小甲鱼经验丰富点,嘿嘿,分出来吧,毕竟还是有点差别。加壳嘛,可以尽量加,用不 同的壳加,当然要确认加了几次壳后程序能不能正常运行哈,毕竟有时候代码会相互覆盖就不好了。

…… ……小甲鱼技术粗鄙,其实还有的,大家自己发挥发挥就出新玩意啦~ 

最 后,需要说明的是,不同的杀软对特征码的定位位置并不相同,因此一种技术很难做到全体免杀的效果。不过一般来说全局性的搅乱(变种)会使大部分杀毒软件认 不出来的。最后,技术原理才是核心,别人教你怎么免杀,但是等会换了个杀软或者换种杀法就懵了。小甲鱼想说的是,免杀技术绝对要懂得汇编,要懂得计算机原 理,要懂得杀毒软件运作原理,这样才能知己知彼百战不殆。

本文来自:鱼C工作室<a href=http://www.fishc.com>

你可能感兴趣的:(小甲鱼之浅谈杀与不杀)