0x00 Quasar

quasar是一款RAT框架,类似于cobestrike,但是用过的人较少,修改配置文件就能做到基本免杀,地址如下

https://github.com/quasar/Quasar

第一次启动会生成证书,使用client-bluid便可以生成exe
image.png
目前需要做免杀的地方有两个
1、生成的exe会被火绒杀(过360、QQ管家等2021年9月7日),静态文件有三个特征
image.png
2、流量加密方式已知,经过加密的数据都在data里,流量实际上有特征(源码级,暂时不搞)
image.png

0x02 VirTest介绍

VirTest是一款shellcode定位工具,先尝试在不影响exe运行的情况下修改quasar生成exe的特征

0x03 VirTest使用

见使用说明,只有简单三步
1、在无毒环境制作测试文件
2、在有杀软的环境载入测试文件
3、定位特征代码,选6秒
定位出来的就是静态查杀的特征了
13a4f8b90e3163c111060cab24f4e03.png

0x04 原理

我们可以这样假设报毒过程,如果检测文件是PE,如果在CODE位置存在 标志A,在DATA位置存在标志B,在资源位置存在标志C,同时满足这个3个条件,那么杀软就会报毒,VIRTEST工作原理就是要找到引起报毒最后一个标志,也就是假设中的标志C。 因此VIRTEST采用2分排除法,测试标志C所在文件中的位置,由于被杀的文件可能存在多个 类似于ABC这样的连锁条件,所以我们必须要通过一种排除机制,先要找最靠近文件前部的连锁条件,排除掉文件尾部数据,当找到第一个连锁条件后,抹掉引标志C,再恢复尾部数据, 然后继续测试另外的连锁条件,直到找到最后一个连锁条件,抹掉后,整个文件免杀了,则说明特征代码被定为完毕了,所以VIRTEST绝对可以精确的定位出所有的复合特征。这比文件分块定位法先进得多,更为科学。
大概就是把触发杀软的部分单独分出一个文件,根据模糊hash测试它是否被杀软杀报毒,如果报毒,则定位该部分字段为特征。

0x05 替换

在不影响程序运行的情况下替换字符串
1、如下图MaxX字段被杀
image.png
尝试使用winhex把Max换成MaX,发现不影响exe功能,而且特征码消失(后面发现这里是源码里面的注释,源码是C#,不是很懂)
image.png
这一段是C#的程序集,类似于程序的说明,那改就完事了
image.png
[assembly: InternalsVisibleTo("Client.Tests")] 代码里最后这个解释如下,我觉得先不用改

C#的internal关键字可以使标记的方法,字段或者属性等等只能在当前assembly内部使用,那么如果其他的assembly需要使用这个internal的方法的时候怎么办呢?.NET提供了一种类似于C++中的友元类的方式来完成这个功能,那就是使用InternalsVisibleTo。 这种情况常见于做测试的时候,需要另外一个项目来测试项目中的internal方法所标记的功能,所以有了InternalsVisibleTo,我们就不用为了做单元测试而把一个本不该公开的方法改为public了

修改之后
image.png
2、如下图,Product加两个空格字段被杀
image.png
尝试替换一个空格FF,测试exe还是可以正常上线,而且Product字段已经不被杀了
image.png
查看源码发现是在一个查询防火墙的方法里面。根据注释// starting with Windows Vista we must use the root\SecurityCenter2 namespace,也可以知道这个是C#向安全中心注册反病毒软件的手段,这样windows就可以检测到系统中是否安装了杀毒软件。很多远控用C或者C#都是调用这个来检查上线主机的杀软,相信大家都见过远控上面的展示的杀软信息,当然这部分删掉也没关系。
image.png
在windwos里我们可以直接用wmic也可以获取杀软信息,在命令行输入以下命令查看杀软

  1. wmic /namespace:\\root\securitycenter2 path antivirusproduct GET displayName,productState, pathToSignedProductExe

image.png
这里我们找到调用GetFirewall的位置,先删掉调用,然后把该方法删除。
image.png

3、最后只剩下DoProcessStat Restart这个字段
image.png
以上修改均使用winhex,如下图
image.png
经过无数次测试,发现DoProcessreStart必须要有,并且大小写不能改,否则程序起不来,这个字段可能和程序启动有关,最好修改源码特征重新编译。
查看源码发现DoProcessreStart是一个类名,在Qusar.Common中定义,在Qusasr.Client和Quasar.Server中使用,所以要先改Qusar.Common中的DoProcessreStart类名,在其他包调用的时候要注意,调用时用到的类名也是DoProcessreStart
修改前
image.png
修改后DoProcessreStart方法名改成DoProcessreSTTT
image.png
image.png
修改完成之后,在Quasar Client右键点生产 Quasar Server右键点生成,然后把生成的所有文件替换到Quasar文件夹就好了
image.png
image.png
TMD现在被某60给杀了,容我再瞅瞅。j经过测试发现。只有开启人工智能引擎才会杀。
image.png
image.png
某60有特征码检测干扰,让你定位不到特征的位置
直接一点一点注释源码,然后编译,确定位置
修改包名
去除特定特征比如远控一般要调用到的读取杀软,而正常软件不用到的

看源码的时候发现很多功能点,比如IP定位啥的,感觉可以阉割掉
image.png
尝试许久发现Quasar的三个模块,其中三个生成的文件都会被杀,一个是Quasar.client生成的client.bin、Quasar.Common生成的Quasar.Common.dll和Quasar.Server生成的主程序Quasar.exe

其中Quasar.Common.dll的查杀点是assembly: Guid[],这是每个C#程序都会有的,可以点击工具,创建Guid重新生成就好了。其实这玩意乱写也没关系
image.png
其中Quasar.Server生成的主程序Quasar.exe,特征点为一个类名,需要修改image.png
image.png
我在类名前面加了个1,如图。确保所有和这个类有关的地方都要做修改,否则程序跑不起来
image.png
如下图,这玩意是客户端弹窗,意思你下载别人文件时别人会有警告,全局搜索OnReport,删除
image.png
如下图,这里为True,意思肉鸡客户端会显示在电脑右下角,修改为False就看不见了
image.png
image.png
image.png
Quasar.common先把所有模块移到别的文件夹再编译
image.png
生成的文件只有5k不会被杀
image.png
image.png
现在把每个模块加进去
image.png
最后剩下三个模块没有编译,生成的dll还是免杀,所以特征存在于这三个文件
image.png
加了networking发现还是免杀,这里要注意,networking有使用message,需要注释掉
image.png
最后加Message,被杀。message有71个文件
image.png

生成的文件被杀

0x06 后续