不会二开,就改改UI,改改文字、图标之类
二开环境配置
反编译
IntelliJ IDEA 自带了一个反编译java的工具,有时候我们需要对 cobaltstrike 的整个 jar 包进行反编译,使用这个 IntelliJ IDEA 双击之类的反编译时要是对整个源码层面进行搜索并不是很方便,可使用其自带的反编译工具,可以做到批量的整个反编译。
这里先在 IntelliJ IDEA 安装目录找到 java-decompiler.jar 拷贝到一个准备好的目录,并且新建两个文件,一个 cs_bin 里面放未反编译的 cobaltstrike 再建一个 cs_src 文件,这个是空文件,是为了之后放反编译后的 cobaltstrike
反编译命令
1java -cp java-decompiler.jar org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dsg=true cobaltstrike_4.5.jar cs_src/cs_4.5
报错:
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.1 | 45.0 | 00 00 00 2D |
1.2 | 46.0 | 00 00 00 2E |
1.3 | 47.0 | 00 00 00 2F |
1.4 | 48.0 | 00 00 00 30 |
1.5 | 49.0 | 00 00 00 31 |
1.6 | 50.0 | 00 00 00 32 |
1.7 | 51.0 | 00 00 00 33 |
1.8 | 52.0 | 00 00 00 34 |
9 | 53.0 | 00 00 00 35 |
10 | 54.0 | 00 00 00 36 |
11 | 55.0 | 00 00 00 37 |
12 | 56.0 | 00 00 00 38 |
13 | 57.0 | 00 00 00 39 |
14 | 58.0 | 00 00 00 3a |
15 | 59.0 | 00 00 00 3b |
16 | 60.0 | 00 00 00 3c |
17 | 61.0 | 00 00 00 3d |
18 | 62.0 | 00 00 00 3e |
命令:
1C:\Java17\bin\java.exe -cp java-decompiler.jar org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs=true cs_bin/cobaltstrike.jar cs_src
报错:
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中,然后把它解压出来
然后把原始的未反编译的CobaltStrike放到刚刚新建的lib中去
项目结构
点击文件——项目结构
点击模块——依赖
添加lib里的jar
点击应用
点击工件,添加jar
主类选择aggressor.Aggressor
然后应用,确定
去decompiler_src里右键Aggressor.java,重构,复制文件
复制到src的aggressor(提前建这个文件夹)里
这样就复制到了src里,打开看一看,要没有报红
到这里我们基本的准备工作就完成了,之后我们需要修改哪个文件,就可以在完整的源码中找到那个文件,然后邮件Refactor后然Copy File到这个目录进行修改,修改完成之后就可以选构建–>构建工件–>构建进行编译
编译好的会输出到out文件夹里
运行时,报错
这个时候,重构一下META-INF里的MANIFEST.MF就行
然后补全参数
改改resources