免杀基础知识总结

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

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

计组基础知识

操作系统的特征 并发共享虚拟异步 操作系统的功能 1、资源分配,资源回收硬件资源 CPU、内存、硬盘、I/O设备。2、为应⽤程序提供服务操作系统将硬件资源的操作封装起来,提供相对统⼀的接⼝(系统调⽤)供开发者调⽤。3、管理应⽤程序即控制进程的⽣命周期:进程开始时的环境配置和资源分配、进程结束后的资源回收、进程调度等。4、操作系统内核的功能(1)进程调度能⼒: 管理进程、线

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel

9.8javaweb项目总结

1.主界面用户信息显示 登录成功后,将用户信息存储在记录在 localStorage中,然后进入界面之前通过js来渲染主界面 存储用户信息 将用户信息渲染在主界面上,并且头像设置跳转,到个人资料界面 这里数据库中还没有设置相关信息 2.模糊查找 检测输入框是否有变更,有的话调用方法,进行查找 发送检测请求,然后接收的时候设置最多显示四个类似的搜索结果