木马免杀原理详解

首先来简单了解一下杀毒软件查杀病毒的原理,当前杀毒软件对病毒的查杀主要有特征代码法和行为监测法。其中前一个比较方法古老,又分为文件查杀和内存查杀,杀毒软件公司拿到病毒的样本以后,定义一段病毒特征码到病毒库中,然后与扫描的文件比对,如果一致则认为是病毒,内存查杀则是载入内存后再比对,第二个比较新,它利用的原理是某些特定的病毒会有某些特定的行为,来监测病毒。

免杀常用的工具:

Ollydbg 调试器简称OD,动态追踪工具peid 查壳工具PEditor PE文件头编辑工具

CCL,伯乐,MYCCL 特征码定位器oc 地址转换器reloc 修改EP段地址工具zeroadd 加区工具Uedit32 十六进制编辑器

免杀方法

一.文件免杀

1.加花

2.修改文件特征码

3.加壳

4.修改加壳后的文件

二.内存免杀

修改特征码

三.行为免杀

加花

加花是文件免杀的常用手段,加花原理就是通过添加花指令(一些垃圾指令,类似加1减1之类废话)让杀毒软件检测不到特征码。加花可以分为加区加花和去头加花。一般加花工具使用加区加花,当然也是可以手工加的,就是先用zeroadd添加一个区段,然后在新加区段里写入花指令,然后跳转到原入口;去头加花,是先NOP(汇编里的空操作)掉程序的入口几行,然后找到下方0000区,写入NOP掉的代码和一些花指令,再通过JMP(汇编里的无条件跳转)跳到原入口。

加花以后一些杀毒软件就认不出了,但有些比较强悍的杀毒,比如司机大叔(卡巴斯基)可能还是能查出来,这时就要定位特征码然后修改了,要修改首先必须知道特征码在哪里,所以需要先定位特征码,这是个难点,特别是复合特征码的定位。

特征码定位

特征码定位主要有两种方法:第一 直接替换法;第二 二叉数法;

直接替换法是最早开始出现的一种特征码定位方法,按一定的字节数逐个替换原代码并保存,比如木马总共100字节,可以先把0-10个字节用0替换,保存,然后用杀毒软件扫描,不被查杀说明特征码已经被覆盖掉了,如果还被查杀则替换10-20字节,再保存,扫描……直到找出特征码。替换法的优点是容易理解,速度快(对文件特征码而言),特征码定位工具伯乐以及CCL的手动方式就是利用的替换法原理,文件特征码定位经常使用的就是这种方法。但是对于内存特征码的定位这种方法就不太实用了,每次替换以后都要载入内存再扫描,如果木马较大,替换生成的文件会非常多,每个都要载入内存花费太多时间,除此之外它还有一个非常大的局限性,就是只能确定只有一处特征码的情况(某种特定情况下的多特征码也是适用的,下面的第3种情况将有讲述),杀毒软件还有别的定位特征码的机制,比如有的杀毒的定义了a,b两处特征码(三处或者更多原理是一样的,为了讲解方便,以下均以两处为例),只要a,b有一个存在便报毒,只有加大替换范围直到两处同时被替换才不报毒,如果两处距离比较远,定义出的范围将非常粗糙,很明显直接替换法将不再合适,这时第二种方法就有用武之地了。

二叉数法使用的原理是一半一半定位,CCL的自动方式就是运用的这个原理。将待检测段一分为二,分别替换并生成两个文件A和B,其中A是原文件后半部分被0替换后生成的,B是前半部分被0替换的,杀毒开始查杀生成文件(如果是内存特征码定位则先载入内存再扫描内存),有4种情况

(1)A存在,B被删:这种情况说明A文件中特征码已经被替换掉,因此将A的被替换部分一分为二,起始偏移为A的偏移,再进行检测;

(2)A被删,B存在:这种情况说明B文件中特征码已经被替换掉,因此将B的被替换部分一分为二,起始偏移为B的偏移,再进行检测;

(3)A存在,B存在:这种情况说明没法定位A和B中有没有特征码,因此分别对A和B再一分为二进行检测;

(4)A被删,B被删:这种情况说明两个区段都存在特征码,因此分别对A和B再一分为二进行检测。

对A再分时会将原来的B区段填充为0,相当于去除B区段的影响,只考虑A;同理对B再分时会将原来的A区段内容填0,相当于去除A区段的影响,只考虑B。

第(1)(2)对应的是只有一处特征码的情况,比较容易理解;

第(3)对应的是定义了a,b两处特征码的情况,但是和前面提到的那种不同,杀毒软件为避免误判,定义了a,b两处特征码,要ab同时存在时才报毒,假设a,b分别存在于A,B中,a,b不同时存在,杀毒对A,B均不报警,接下来该如何判断呢?举个例子说明一下

木马原来是…a……b…,第一次替换以后A:…a…000000,B:000000…b…,现在ab不同时存在,A,B都不被杀,则分别对A,B再次一分为二,…a……b000,…a…000…,000……b…,…a000…b…,再次扫描就可以找到两处特征码的位置,如果还是不行,再继续分……直到全部找到;其实这种类型的多特征码直接替换也是可以定位的,甚至效果更好,按一定位数替换,然后扫描,只要替换了一个特征码就不再报毒,所以不报毒的便是特征码被覆盖的,不管有几处都可以定位出,而且修改时也只要修改任意一处就可以了。

第(4)种对应的情况也是杀毒定义了多处特征码,就是上面提到的那种情况,只要有一处符合就认定是病毒。还是以a,b两处特征码为例,第一次替换后的结果同(3),两部分分开考虑,互不影响,相当于分解成两个单个特征码的情况,第二次替换后变成000000…b000,000000…000…,000…000000,…a000000000,依此类推,直到精确定位出所有特征码,如果有N处特征码就相当于分解成N个单特征码来定位,现在N一般小于等于3,这种情况定位出的所有特征码必须全部修改了才能免杀。

二叉数法是个很不错的思路,可以解决大部分的问题,但是不是无懈可击呢?回答是否定的!可恶的杀毒软件还有一个杀手锏,就是复合特征码,给我们定位特征码带来了很大的麻烦。复合特征码的定位机制是,先定义出N个特征码,只要里面某些同时出现便认为是病毒。举个简单例子说明一下:木马原来是…a1…b1…c1…a2…b2…c2…(a1,a2一样,加标号只是为了后面描述方便),只要abc同时出现就认为是病毒,这该如何定位呢?原理不是很难,也是利用替换再查杀的方法,先从后往前用0替换,替换精度假设为每次替换量增加1000字节,开始一直显示是病毒,直到替换到地址13140040(为叙述方便随便说的一个地址)时替换的字节达到15000个,即…a1…b1…00000000,两个c都被替换掉了,此时显示不是病毒,由此可知,特征码c1就在13140040后面1000字节内,减小替换字节数比如改为替换14900字节,即精度改为每次替换减小100字节,还是无毒则减为替换14800字节,不断重复……直到精确定位出c1的位置;如果改为从前往后替换,则可以定位出a2的位置;其他特征码的定位可以利用已经定位到的c1,a2,把其中一个用0替换了比如c1,从后往前就可以定位出c2,直到定位出所有特征码,其实原理并不复杂,但是要真正手动操作起来却是非常麻烦的,我们可以利用MYCCL,它用的原理与之类似,具体操作可以看MYCCL的操作帮助。还有一种方法更科学,原理是一样,但是替换的字节数不是等量增加的,而是以2的n-1次方增加的,第一次替换1字节,第二次2字节,第三次4字节……减小时也按照这种规律,这种替换方法有点类似于二叉数法,可以更快定位出特征码的位置,我想这也是MYCCL在复合特征码定位方面应该改进的地方吧。

复合特征码虽好,大家也不用害怕,认为所有杀毒都来个复合特征码我们就要累死了,定义复合特征码需要单个特征码几倍的病毒库,不方便用户的升级,所以除了特别流行的病毒,定义复合特征码的也不是很多。

定位特征码有些经验可以告诉大家,文件特征码的定位一般用直接替换法,可以借用CCL的手动定位;内存特征码定位,一般用二叉数法,可以用CCL自动定位。对于EXE文件如果文件较小,可以两种方法结合,先用直接替换法生成,可以用伯乐这个工具(为什么不用CCL呢,因为伯乐生成的是EXE文件可以看出图标的模样),找到还能正常运行的,那些图标都变了的说明PE头已经损坏了,就不要试了,然后载入内存,再扫描内存,如果既能正常运行又不被杀,恭喜你!成功了!定位出了大体范围,再用CCL自动定位,很快就可以完成。如果文件较大,用伯乐生成的文件太多,也不方便,还是用CCL定位,对于DLL文件也只能老老实实用CCL定位了。

特征码修改

特征码修改可能需要一点汇编的知识,光盘里有常用的汇编语法介绍,修改主要有直接修改法和跳转修改法。

直接修改法利用的是等效指令替换,比如

add eax,0c等效于sub eax,-0c

或者指令顺序的改变不影响执行的效果,比如

add eax,0c;eax寄存器加上0c再赋给eax

add ebx,05;ebx寄存器加上05再赋给ebx

等效于

add ebx,05;ebx寄存器加上05再赋给ebx

add eax,0c;eax寄存器加上0c再赋给eax

还有一种是如果特征码是ASCII码,可以直接修改大小写,小写字母换成大写,大写的换成小写。

加壳

不用说了,用工具大家都会,加壳的原理是给原程序加上一段保护程序,有保护和加密功能,运行加壳后的文件是先运行壳再运行真实文件从而起到保护作用。我想提醒大家的是,再好的壳用的人多了,还是会被杀的,所以可以努力学好E文,自己到国外的网站找加壳工具,比较好。

修改加壳后的文件

加壳以后程序入口处会有一段特殊代码,可以自己用OD打开不同加壳工具加过壳的文件,可以发现不同的壳开头那段代码是不同的,也可以说成是壳的特征代码吧,对于常用的壳杀毒软件可以脱掉壳再查杀,也就是所谓的穿壳技术,为了避免杀毒软件认出是加的哪种壳我们可以加双壳,或者自己修改开头那段代码,从而让杀毒看不出是什么工具加的壳,这里我只讲一种修改方法,可以参照去头添加花指令,在空白区域加入一段别的壳的特征头,然后JMP跳到原入口,这样杀毒就会误判加壳工具,从而达到免杀的效果,其实方法是多样只要愿意思考总能想出应对的方法。

还有一种修改壳的方法就是修改EP段的入口,用Peid查一下加过壳的木马,可以发现EP段的地址,也就是区段入口,通过修改EP入口地址可以达到免杀的效果,利用的工具是reloc,具体使用方法自己去问google。

行为免杀

这种杀毒的代表是绿鹰PC万能精灵。一般说来木马在运行以后会复制到系统目录下然后运行,原文件可能会自动删除,现在的木马一般是插入进程来访问网络的,在进程里可以看到被插入的进程,设置开机启动也是木马必须做的可以写入注册表,加入服务,写入驱动等等,这些便是木马特有的行为。我们可以用注册表监控,文件修改监控的工具比如木马辅助查找器记录修改的文件、注册表,推测杀毒可能监控的是哪个行为从而对应修改行为来达到行为免杀。还有一个一般的方法,行为杀毒是不会查杀系统的启动项的,我们可以把木马的启动项替换成非系统必须的开机自启动项就可以成功免杀了。至于其他的方法,大家可以自己再研究。

至于网上流传的入口加1,就是用PEditor将木马入口地址+1,有时也是可以达到免杀的效果,好象是瑞星比较吃这个,还有个小窍门可以告诉大家,要让自己的免杀木马尽量久的不被查到,最好选择比较老的木马来做,对新木马,杀毒盯的紧会经常更新病毒库,而老的呢……不用说了吧。

总结:

一般免杀步骤是先定义内存特征码,修改内存特征码,加花指令做文件免杀,如果还被某些杀毒查杀则定义文件特征码,修改特征码,接下来是行为免杀,然后加壳,再修改壳。内存免杀一般只要做瑞星的就可以了,其他的杀毒软件没有真正意义上的内存杀毒,比如卡巴斯基的内存扫描就是文件快速扫描,一般加入花指令(稍微学点汇编,折腾些垃圾代码是很简单的)以后就可以躲过金山,瑞星,江民的文件查杀,万一有不过的就要定位特征码再修改,卡巴的文件查杀是很牛的,加了壳也几乎都能可以查出来,一般都要定位特征码再修改,对于诺顿这种喜欢把特征码定位在PE头的只要用北斗之类工具加个壳,把PE头改得一塌糊涂,它就不认识了,如果还想把免杀做好点,可以把自己的服务和注册表键值改成非系统必须的,要是你是不折不扣完美主义者,可以再修改一下加壳后的文件,把免杀进行到底!

木马免杀原理详解(一)相关推荐

  1. 木马免杀原理及方法(超全)

    灰鸽子免杀 概况 免杀意为免除被杀毒 软件杀掉的软件. 灰鸽子免杀简介:本工具为纯绿色工具,软件采用独特的查杀技巧可完全查杀灰鸽子全系列(VIP2005.vip2006.免杀处理) 木马,本软件已经过 ...

  2. 源码免杀教程 源码免杀思路详解

    绝对不一样的源码免杀教程!绝对不一样的免杀实战体验!清晰的思路!细致全面的思路详解!让你感到免杀原来可以这么简单!教你如何在源代码中找出被杀代码,修改代码从而达到免杀效果! 免杀之-网络攻防入门书籍推 ...

  3. python打包的exe如何免杀_通过Python实现Payload分离免杀过程详解

    缺点: 编译成exe以后体积过大 实现: msf生成shellcode代码: 将payload给copy下来,去除引号. \x2f\x4f\x69\x43\x41\x41\x41\x41\x59\x4 ...

  4. python 生成payload_通过Python实现Payload分离免杀过程详解

    缺点: 编译成exe以后体积过大 实现: msf生成shellcode代码: 将payload给copy下来,去除引号. \x2f\x4f\x69\x43\x41\x41\x41\x41\x59\x4 ...

  5. Atitit.木马 病毒 免杀 技术 360免杀 杀毒软件免杀 原理与原则 attilax 总结...

    Atitit.木马 病毒 免杀 技术 360免杀 杀毒软件免杀 原理与原则 attilax 总结 1. ,免杀技术的用途2 1.1. 病毒木马的编写2 1.2. 软件保护所用的加密产品(比如壳)中,有 ...

  6. 2018-2019-2 网络对抗技术 20165303 Exp3 免杀原理与实践

    实验内容 一. 正确使用msf编码器(0.5分),msfvenom生成如jar之类的其他文件(0.5分),veil-evasion(0.5分),加壳工具(0.5分),使用shellcode编程(1分) ...

  7. 《网络攻防》实验三:免杀原理与实践

    <网络攻防>实验三:免杀原理与实践 世界上公认的第一个在个人电脑上广泛流行的病毒是1986年初诞生的大脑(C-Brain)病毒,编写该病毒的是一对巴基斯坦兄弟,两兄弟经营着一家电脑公司,以 ...

  8. 20145317 《网络对抗技术》免杀原理与实践

    20145317 <网络对抗技术>免杀原理与实践 免杀技术 技术分类 改变特征码 加壳:使用专业的加壳软件,掩盖特征码: 使用encode等进行编码,进行异或.+1.-1等类似操作改变特征 ...

  9. 20155301实验三 免杀原理与实践

    20155301实验三 免杀原理与实践 实验内容 1 正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧: 2 ...

最新文章

  1. 单片微型计算机 第九章自测题,单片微型计算机网上练习题答案..doc
  2. python自定义函数数据分析_Python实现自定义函数的5种常见形式分析
  3. 备份到云端,准备好了吗?
  4. 如何使用你手中的利器
  5. 转子碰磨 matlab,航空科普:什么是航空发动机转子碰磨?
  6. node中的Stream-Readable和Writeable解读
  7. MTK 驱动(72)---mtk Android如何调试recovery模块
  8. 用for循环打印出九九乘法表
  9. php面向对象精要(3)
  10. 从车载小程序打造智能汽车生态
  11. blowfish java_java如何实现blowfish算法
  12. 有可控冷热水隔板的储水式电热水器
  13. 刻意练习 Elasticsearch 10000 个小时,鬼知道经历了什么?!
  14. php simplexmlelement object 数组,php中将SimpleXMLElement Object数组转化为普通数组
  15. 利用JS中的循环语句来实现正方形、长方形、平行四边形、三角形、菱形、空心菱形。
  16. 湘大c语言期末考试试题及答案,湘大机房c语言试题.doc
  17. 一键生成的BI智能数据看板谁不爱?
  18. 怎样查看优酷视频播放记录?
  19. CorelDraw出现应用程序恢复管理器向导解决办法汇总
  20. 歌曲用计算机弹出来网红英语歌,抖音里好听的英文歌

热门文章

  1. STM32 —— 实验报告模板
  2. python type help copyright_python 模块包裹
  3. 万物皆可集成系列:低代码释放用友U8+深度价值(3)— 数据融合应用
  4. 练习题:系统用户管理,文件权限查看,用户账号密码修改
  5. Unity 2D游戏:Physics Material 2D(2D物理材质)
  6. USB转串口参数配置功能
  7. 重载SmallInt类
  8. 你的私人编程老师,ChatGPT帮你快速掌握Python编程
  9. 记一次简单的挖矿病毒清除---实战
  10. 基于java校园闲置物(二手物品)交易系统