关于免杀的知识和工具

admin 2023年6月24日00:16:51评论38 views字数 3493阅读11分38秒阅读模式

免责声明

月落星沉研究室的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他违法行为!!!

00. 概述

1.什么是免杀?来自百科的注解:

免杀,也就是反病毒(AntiVirus)与反间谍(AntiSpyware)的对立面,英文为Anti-AntiVirus(简写Virus)

免杀分为以下几种

1.1 静态免杀

比如你在文件上传漏洞上上传了一段木马到服务器,服务中的杀软识别出该木马的特征后判定为病毒,就直接将木马删除掉。
1.2 流量免杀

杀软数据库中记录了知名远控木马的通讯特征,同时有些霸道的杀软会直接BAN掉你服务器,只要和你服务器进行通讯就会被查杀。
1.3 内存免杀

杀软数据库中记录了知名远控木马的内存运行特征,如果木马在静态杀毒中不会被查杀,当你执行木马的远程下载反射到内存中时会被杀软捕捉到特征,将特征匹配的木马进行隔离或删除。
1.4 动态免杀(难点)

就算上述三种免杀都绕过后,但是在执行一些敏感行为,比如添加自启动,计划任务、开启远程端口也会被杀软发现,如果频率低一点可能会被拦截,如果你高频敏感行为,杀软会对该行为进行重点标记。

02. 静态免杀

对于静态免杀,针对的是杀毒软件的静态文件扫描,云查(病毒库)杀。

杀毒是提取文件一段特征码来识别病毒文件

能识别一个程序是一个病毒的一段不大于64字节的特征串

杀毒软件是怎么提取文件特征码的?

如果我们知道了一个文件是病毒,那么通过md5肯定可以判断一个就是这个病毒文件,那如果该病毒文件做了小小变动呢,直接md5肯定是不行了,那杀毒软件是怎么做的呢?这里有个叫做模糊哈希(Fuzzy Hashing)算法的东西。

模糊哈希算法又叫基于内容分割的分片分片哈希算法(context triggered piecewise hashing, CTPH),主要用于文件的相似性比较。
大致就可以理解为,不要把一个文件的所有内容都拿来计算hash,而通过分片,取出部分重要(不易改变)的内容进行hash计算,这样就能达到通过一个特征码找到类似的病毒变种。

具体杀毒软件是不是通过这个算法来计算特征码的,我也不能完全肯定(纯猜测加网上一点点信息),但是根据免杀的经验可以总结出几点:

特征码会有多个串组合(减少误报)

代码数据(肯定有)

会解析PE,检查附加文件数据、PE文件的资源等等

1. 怎么找特征码

工具查找

常见的特征码定位工具有CCL、MYCCL。工具大致原理就是分割文件,某些分割部分填入数据(0),如果扫描该部分不报警,则特征码在这个部分。如此反复,直到找到很短的某一段内容。不同工具之前局别是使用的分割算法不同,查找特征码的效果不同。

目前比较常有名气的特征码定位器主要有CCL与MYCCL,他们都采用文件分块定位的办法,定位效果带有运气成份,且可能每次定位出的位置都不尽相同,这个免杀带来了困难。

后来出来了一款新的特征码定位软件VirTest,因此VIRTEST采用2分排除法,测试标志C所在文件中的位置,由于被杀的文件可能存在多个类似于ABC这样的连锁条件,所以我们必须要通过一种排除机制,先要找最靠近文件前部的连锁条件,排除掉文件尾部数据,当找到第一个连锁条件后,抹掉引标志C,再恢复尾部数据。

然后继续测试另外的连锁条件,直到找到最后一个连锁条件,抹掉后,整个文件免杀了,则说明特征代码被定为完毕了,所以VIRTEST绝对可以精确的定位出所有的复合特征。这比文件分块定位法先进得多,更为科学。

手工查找。ps:这边是针对有源码的

1、mian中屏蔽所有代码,编译,扫描。不报的话继续2,如果依然报毒,去5。

2、放开一层(可以多层、二分也可以)函数,编译,扫描。不报的话,重复2。直到定位到某个函数或者多个函数,进入3。

3、 在函数内部屏蔽部分代码(二分),编译,扫描。不报,重复2。

4、 直到定位某段代码(无自定义内部调用),特征码在此。

5、是不是有附加数据,或者资源存储的文件。有,单独检查该文件或者数据,方法从1开始。如果没有,那去找找PE头吧。

大致流程:

关于免杀的知识和工具

直到找到某API调用,或者逻辑代码(没有自定义函数调用)
此方法,虽然笨,但是定位特征码不会很慢,挺准确。

2. 怎么免杀?

前面已经找到特征码了,怎么免杀呢?

其实前面已经说到了,找到特征码之后,只要改变这个特征码值得话就免杀成功。如果不需要软件正常运行,直接填零得了…开玩笑,这怎么可能。所以修改特征码还得保证软件正常功能。所以也是有讲究的。

常用的修改工具有,OD,C32ASM,UE,010Editor等等。

手工修改

非源码

1. 数据

如果特征码定位到数据(通过IDA/OD等确认),其实不好修改,稍微不慎就会导致程序不能运行,或者影响程序运行流程或结果。

字符串,如果不影响程序逻辑,可以替换大小写;如果无关紧要的数据,随意替换;等等,看情况而定。

整数,如果不影响结果,替换值,清零等等操作。

地址,基本应该不能修改,具体看情况。

PE头数据,根据PE结构具体来看,无用数据清零或修改,有用数据看情况修改。

最后,终极修改方法,找到访问数据的代码,直接修改代码访问数据的地址,数据也可以放到其他地址了,其实就如同修改源码一样修改,肯定没有修改源码那么容易(见后)。

反正特征码定位到数据位置不容易修改(可以再试试后面的盲免杀)。

2. 代码

如果特征码定位到代码(也通过IDA/OD等确认),在不改变程序功能基础上,应用各种方法修改。

等价替换汇编代码,如mov eax,0可以换成xor eax,eax,直接结果相同,二进制代码不同。

交换代码顺序,在不影响逻辑的情况下。

代码块移位,将代码块移动不用的内存位置,通过加入jmp addr跳过去执行,addr是新的代码块地址。

源码
在有源码的情况下,修改的方式就更灵活了,更简单了。

如果特征码是数据,那么修改数据位置,访问数据的代码位置等(思想类比非源码方式)。

1.加花指令,这是最有效也是最常用的方式,要点在于如何加话指令。

2.加数据计算代码,加减乘除各类组合。

3.加字符串操作代码,增加、删除、查找、替换等。

4.加多层跳转,跳转间加无效指令(不会执行的)。

5.加貌似有效的API调用,如LoadLibrary+GetProcAddr+API等。

工具免杀(盲免杀)

在没找到有效的特征码,或者不好修改的时候,可以试试这种方式。

资源操作
1. 加资源

使用ResHacker对文件进行资源操作,找来多个正常软件,将它们的资源加入到自己软件,如图片,版本信息,对话框等。

2. 替换资源

使用ResHacker替换无用的资源(Version等)。

3. 加签名

使用签名伪造工具,将正常软件的签名信息加入到自己软件中。

几种方式可以交替重复多次进行组合使用。

PE操作
1. PE优化

使用PE优化工具对文件进行优化,删除0,PE头优化,附加数据等。

2. 增加节

增加节数据,随意加入无效数据。

加壳
可以将加壳简单理解为:解密器/解压器+加密器/压缩器(原始代码)。

通过加密器/压缩器将原始代码进行加密压缩,让其特征码变化隐藏,然后组装上解密器/解压器到文件中,运行是先运行解密/解压器,将加密压缩内容解密解压,然后继续运行原始代码。

1. 加冷门壳

壳也有特征,知名壳都已经被分析的非常多了,杀软基本都能查这类壳,或者自动脱壳,然后进行查杀。

所以加冷门壳,壳特征未被分析,不能自动脱壳,可以更好隐藏原始代码,得到免杀效果。

2.加壳改壳
加粗样式
将常用壳进行修改,让壳特征变化,也可以是杀软失效。

比如修改入口,区段信息修改,入口代码移位。

可以类比为免杀壳,上面介绍的方法都可以使用。

下面来推荐一个高效好用的免杀工具,具体操作如下(附下载链接)

0x01 工具介绍

cobaltstrike免杀,实测过 bypass火绒、360、360核晶、360杀毒、def、金山毒霸等主流杀软

0x02 安装与使用

1、生成c的payload

关于免杀的知识和工具

2、对shellcode进行加密

go run encode.go or python xor64.py 

3、加密后的结果填到代码里编译运行

go build decode.go

(这里大多报错为缺少依赖,运行 go mod init & go mod tidy 拉取即可)

关于免杀的知识和工具

4、免杀效果

关于免杀的知识和工具

关于免杀的知识和工具

下载地址:https://github.com/Pizz33/GobypassAV-shellcode

原文始发于微信公众号(月落安全):关于免杀的知识和工具

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年6月24日00:16:51
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   关于免杀的知识和工具https://cn-sec.com/archives/1829181.html

发表评论

匿名网友 填写信息