本文主要是介绍免杀基础知识总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近研究木马免杀,先了解一下基础的免杀知识,看了《杀不死的秘密》、《黑客免杀攻防》等免杀书籍,发现都大同小异,基本内容都是一样的,找特征码,修改特征码....我认为免杀还是要针对杀毒软件的查杀特性来做,所谓知己知彼,用在免杀上就特贴切。能够写在书本上的技术肯定不是最新的技术,反病毒软件肯定也有了应对措施,要想真正做到免杀,还是要通过其它渠道学习或是自己深入研究。但是,曾经的免杀方法并不是无用了,而是成为基本的步骤了,所以了解免杀基础知识还是必要的。以下是我的学习总结,以备今后温故之用。
1.免杀的最基本思想就是破坏特征,可能是特征码,可能是行为特征。
2.PEID通过进行壳特征码比对来判断被载入文件的加壳信息,防病毒软件亦如此。
3.特征码查杀技术
两个最基本要素:特征码和该特征码所在的偏移。
复合特征码查杀
隐含特征码查杀
启发式扫描查杀
NOD32启发式扫描:将危险的函数整理出来,按照病毒的特性排列这些API的顺序,若发现类似的调用API顺序,判为病毒。
主动防御是一种特殊的API HOOK,它HOOK了一些木马病毒常用的API.卡巴斯基主动防御对函数的监控及环境判断。
特征码定位技术:MyCCL 、MultiCCL定位文件特征码和内存特征码。
5.脱壳方法:
1.单步跟踪法。遇到程序往上跳转的时候在回跳的下一句代码上单击并按键盘上的'"F4"键跳过回跳指令。 单步跟踪法也是其它方法中要用到的基本的方法。过UPX.
2.ESP定律法。OD加载程序后F8走到下一条指令,若ESP发生变化,在命令行中输入hr [esp中的值],F9运行,然后用单步跟踪法。原理:我们可以把壳看成一个子程序,必须要遵循堆栈平衡原理。过NSPACK.
3.二次断点法。首先在“选项”---“调试设置”----“异常”勾选全部复选框,即忽略所有异常,“alt+M"打开内存窗口,在.rsrc设断点,shift+f9,再在.text下断点,shift+f9,然后单步跟踪法。过ASPACK.
4.末次异常法。首先在“选项”---“调试设置”----“异常”清除所有复选框,即不忽略任何异常,连续按shift+f9,直到程序运行,记下总次数X,重新加载,按下X-1次shift+f9,在栈窗口中找到se句柄,在该地址处下断点,shift+f9,然后单步跟踪。
5.SFX自动脱壳法。将OD设置为忽略所有异常;将”调试选项“对话框的SFX选项卡中选择”字节模式跟踪实践入口“并确定;加载程序,会自动停在OEP处。成功后记得吧SFX的设置改回去。过DXPACK
6.出口标志法。OD加载程序后查找“所有命令”,输入”popad"并查找。逐一尝试跟踪。
7.使用脱壳工具脱壳。
6.常用免杀方法:
1.利用加多花指令。利用软件zeroadd加一个全0区段,在里边加入花指令,最后一条指令jmp OEP,然后更改程序入口点为该区段的偏移地址。
2.利用壳前加花指令。原理同前。
3.利用FreeRes实现加多壳免杀。一般先给木马加上一层加密壳,然后用FreeRes这个工具进行释放,就可以被另一个壳进行二次处理了。
4.利用修改壳头实现免杀。利用等效代码实现对木马壳头的修改。如jmp xxxx换成call xxxx 或用ja xxx jnb xxx jb xxx替换,add ebx,ebp 换成 adc ebx,ebp.
5.利用去头加花的方法实现免杀。在文件中找到一段0空间或插入0区段,将程序入口点改为该处地址,在该地址处写上花指令后再加上原入口处的n条指令,然后jmp 到n+1条指令处。
6.利用SEH技术给木马加花。生成0区段,写入
push OEP
MOV EAX DWORD PTR FS:[0]
push eax
mov dword ptr fs:[0],esp
mov ebx,0
div ebx
7.利用reloc改壳免杀。
8.利用LoadPE重建PE实现免杀。
9.利用添加PE数字签名实现免杀
7.从PE结构入手的免杀:
1.加壳免杀
按免杀效果分:
1.文件免杀壳,多为加密壳。
2.内存免杀壳,多为加密壳,往往利用某特定杀软的杀毒引擎缺陷。
3.行为免杀壳,针对某些行为检测工具。
2.加花免杀
3.修改特征码免杀
8.特征码修改技术
1.等值替换。2.修改ASCLL特征码大小写,windows对文件扩展名大小写不敏感,但对API函数大小写敏感,需要区别对待。
3.移除无用ASCII特征码。4.移动ASCII特征码位置。程序都是将字符串首字节的地址压入栈中利用的。改变ASCII特征码在文件中的位置,然后在源码中修改引用地址为新地址。 5.颠倒无依赖关系的指令从而改变特征码。6.利用跳转法修改特征码。
7.移动输入表函数特征码。杀软常把内存特征码定位在输入表函数上。输入表特征码分两种:1.位于输入表函数上的特征码2.位于输入表函数所在的DLL文件。
8.加\x90免杀输入表文件名。9.移动输出表函数特征码。输出表特征码分两类:1.输出表函数名特征码。2.输出表动态链接库文件名特征码。
10.利用异或算法加密特征码。
11.特征码交换,新入口点设置" mov 特征码内存地址 ,X",然后"jmp 原入口点,将特征码用其它字符替换。
9.RootKit
最关键的思路:通过勾住特定的系统函数,从而改变系统函数执行路径的目的,以使其在做关键操作时被我们提供的函数拦截并过滤。
本质:就是各种钩子的应用。
10.免杀技术的发展趋势
免杀技术从2008年以后就已经脱离了修改特征码与修改PE文件的阶段,进而发展内核层对抗,在内核层被大部分反病毒软件掌控后,主要战场有转移到用户层。随着云查杀和白名单技术相结合,病毒防护效果得到巨大提示,免杀技术已经与信息安全领域内其他技术有了较大的结合。免杀技术将会持续着向两方面发展:1.基于本地溢出漏洞的技术方向。2.基于用户对抗 的技巧方向。
这篇关于免杀基础知识总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!