免杀基础知识总结

2024-02-29 12:38
文章标签 总结 基础知识 免杀

本文主要是介绍免杀基础知识总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近研究木马免杀,先了解一下基础的免杀知识,看了《杀不死的秘密》、《黑客免杀攻防》等免杀书籍,发现都大同小异,基本内容都是一样的,找特征码,修改特征码....我认为免杀还是要针对杀毒软件的查杀特性来做,所谓知己知彼,用在免杀上就特贴切。能够写在书本上的技术肯定不是最新的技术,反病毒软件肯定也有了应对措施,要想真正做到免杀,还是要通过其它渠道学习或是自己深入研究。但是,曾经的免杀方法并不是无用了,而是成为基本的步骤了,所以了解免杀基础知识还是必要的。以下是我的学习总结,以备今后温故之用。

1.免杀的最基本思想就是破坏特征,可能是特征码,可能是行为特征。                               

2.PEID通过进行壳特征码比对来判断被载入文件的加壳信息,防病毒软件亦如此。

3.特征码查杀技术

两个最基本要素:特征码和该特征码所在的偏移。
复合特征码查杀
隐含特征码查杀
启发式扫描查杀
NOD32启发式扫描:将危险的函数整理出来,按照病毒的特性排列这些API的顺序,若发现类似的调用API顺序,判为病毒。
主动防御是一种特殊的API HOOK,它HOOK了一些木马病毒常用的API.卡巴斯基主动防御对函数的监控及环境判断。

特征码定位技术:MyCCL 、MultiCCL定位文件特征码和内存特征码。

4.文件扫描

1.第一代扫描技术,字符串扫描,通配符扫描等。
2.第二代扫描技术,智能扫描法,近似精确识别法(多套特征码,校验和),骨架扫描法,精确识别法。

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.基于用户对抗 的技巧方向。

这篇关于免杀基础知识总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/758830

相关文章

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

MySQL基本查询示例总结

《MySQL基本查询示例总结》:本文主要介绍MySQL基本查询示例总结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Create插入替换Retrieve(读取)select(确定列)where条件(确定行)null查询order by语句li

Linux区分SSD和机械硬盘的方法总结

《Linux区分SSD和机械硬盘的方法总结》在Linux系统管理中,了解存储设备的类型和特性是至关重要的,不同的存储介质(如固态硬盘SSD和机械硬盘HDD)在性能、可靠性和适用场景上有着显著差异,本文... 目录一、lsblk 命令简介基本用法二、识别磁盘类型的关键参数:ROTA查询 ROTA 参数ROTA

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义