开发 | 6分钟
CS二开
二月 24, 2023
CobaltStrike 二开

不会二开,就改改UI,改改文字、图标之类

二开环境配置

反编译

IntelliJ IDEA 自带了一个反编译java的工具,有时候我们需要对 cobaltstrike 的整个 jar 包进行反编译,使用这个 IntelliJ IDEA 双击之类的反编译时要是对整个源码层面进行搜索并不是很方便,可使用其自带的反编译工具,可以做到批量的整个反编译。

这里先在 IntelliJ IDEA 安装目录找到 java-decompiler.jar 拷贝到一个准备好的目录,并且新建两个文件,一个 cs_bin 里面放未反编译的 cobaltstrike 再建一个 cs_src 文件,这个是空文件,是为了之后放反编译后的 cobaltstrike

反编译命令

bash
1java -cp java-decompiler.jar org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dsg=true cobaltstrike_4.5.jar cs_src/cs_4.5

报错:

bash
1错误: 加载主类 org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler 时出现 LinkageError
2        java.lang.UnsupportedClassVersionError: org/jetbrains/java/decompiler/main/decompiler/ConsoleDecompiler has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 60.0

XXX是由较新版本的java Runtime(类文件版本61.0)编译的,该版本的java运行时只能识别最高达55.0的类文件。

白话就是目标由较新版本的 Java 运行(类文件版本 61.0)编译,当前版本的 Java 运行时仅识别类文件版本 至 60.0

现在是2023/2/24,我Java16版本算低,知道现在还有多少项目用Java8嘛……

Java Class版本对应关系

JDK版本号Class版本号16进制
1.145.000 00 00 2D
1.246.000 00 00 2E
1.347.000 00 00 2F
1.448.000 00 00 30
1.549.000 00 00 31
1.650.000 00 00 32
1.751.000 00 00 33
1.852.000 00 00 34
953.000 00 00 35
1054.000 00 00 36
1155.000 00 00 37
1256.000 00 00 38
1357.000 00 00 39
1458.000 00 00 3a
1559.000 00 00 3b
1660.000 00 00 3c
1761.000 00 00 3d
1862.000 00 00 3e

命令:

bash
1C:\Java17\bin\java.exe  -cp java-decompiler.jar org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs=true cs_bin/cobaltstrike.jar cs_src

报错:

bash
1Exception in thread "main" java.lang.RuntimeException: Zip entry 'META-INF/' tries to escape target directory
2        at org.jetbrains.java.decompiler.struct.StructContext.addArchive(StructContext.java:143)
3        at org.jetbrains.java.decompiler.struct.StructContext.addSpace(StructContext.java:86)
4        at org.jetbrains.java.decompiler.struct.StructContext.addSpace(StructContext.java:64)
5        at org.jetbrains.java.decompiler.main.Fernflower.addSource(Fernflower.java:73)
6        at org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler.addSource(ConsoleDecompiler.java:111)
7        at org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler.main(ConsoleDecompiler.java:79)

意思是zip什么的,要先把当前jar包解压,里面才是真正的客户端和服务端

执行了继续报错,这个原因是java-decompiler.jar 版本不对的原因,换222.4345.14版本即可

编译完成后在IDEA,新建项目

先建立两个文件夹decompiled_src文件夹,之后再建立一个lib文件夹。将反编译好的CobaltStrike复制到decompiled_src中,然后把它解压出来

image-20230227095331952

然后把原始的未反编译的CobaltStrike放到刚刚新建的lib中去

项目结构

点击文件——项目结构

点击模块——依赖

添加lib里的jar

点击应用

点击工件,添加jar

主类选择aggressor.Aggressor

然后应用,确定

去decompiler_src里右键Aggressor.java,重构,复制文件

复制到src的aggressor(提前建这个文件夹)里

这样就复制到了src里,打开看一看,要没有报红

到这里我们基本的准备工作就完成了,之后我们需要修改哪个文件,就可以在完整的源码中找到那个文件,然后邮件Refactor后然Copy File到这个目录进行修改,修改完成之后就可以选构建–>构建工件–>构建进行编译

编译好的会输出到out文件夹里

运行时,报错

这个时候,重构一下META-INF里的MANIFEST.MF就行

然后补全参数

改改resources