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

0x01 CobaltStrike反编译

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

1
2
 /Applications/IntelliJ IDEA.app/Contents/plugins/java-decompiler/lib/java-decompiler.jar  //找到decompiler文件
cp java-decompiler.jar /Users/pingmao/Desktop/wen/学习资料/java/cstips001/ //拷贝到准备好的目录

java-decompiler中找到decompiler的路径,提取出来如下

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

把路径提取出来后,把反斜杠全部替换成.随之再其后加上ConsoleDecompilers,如下就是提供反编译的这个类

1
org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler

因为MANIFEST.MF中没有main class属性,没有指定主类,因此不能直接使用java -jar,如果想要执行java包中具体的类,要使用java -cp输入如下命令

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

执行的时候会有提示

让你加上-dgs=true后跟需要反编译的cobaltstrike和反编译之后要把cobaltstrike放入的目录,就是我们最开始建立的cs_src这个是存放反编译后的cobaltstrike,运行这条命令即可对整个jar包开始反编译

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

反编译后,会自动打包成jar包,右键解压后打开可以看到都是.java了,使用这个方法会非常方便,就不需要第三方工具,这个反编译出来的就可以直接放入IntelliJ IDEA中,可直接实现代码搜索,相关的交叉引用。

CobaltStrike二次开发环境准备

打开 IntelliJ IDEA 选择Create New Project一直选择Next

这里选择路径跟起个名

创建好后需要先建立两个文件夹,右击选择New Directory建立一个decompiled_src文件夹,之后再建立一个lib文件夹

把在CSTips001中反编译好的CobaltStrike复制到decompiled_src中,然后把它解压出来,可看到一个完整的反编译后的目录

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

接下来需要对这个项目进行设置,点击File中的Project StructureModulesDependencies进行设置

选择lib中的cobalt strike.jar,确认是Compile之后勾选一下,然后选择Apply

至此依赖关系设置完了,现在进入Artifacts——>JAR——>From modules with dependencies

这里需要一个填写一个Main Class

目前我们还不知道这个Main Class该填什么,可以点再lib中的META-INF里双击MANIFEST.MF,我们可以看到Main Class,复制aggressor.Aggressor

再次打开Artifacts——>JAR——>From modules with dependenciesMain Class处填入aggressor.Aggressor选择OK,这里就设置完成了

接下来在decompiled_src目录中找到已经反编译完的aggressor主类,右击选择Refactor ——Copy File

To directory点击添加,选择之前创建的src在其中添加一个aggressor名字要一致,最后点击Refactor

这样aggressor就自动的被拷贝到src目录里去了,这里可以看一下,如图

测试一下,修改文件,保存

到这里我们的整个准备工作就完成了,之后就是我们要修改哪个文件,就可以在完整的源码中找到那个文件,然后右键Refactor然后Copy File到这个目录然后进行修改,修改完成之后就可以选Build——>Build Artifacts ——>Build进行编译

当提示Build completed successfully in 4 s 227 ms (a minute ago)的时候,会生成一个out文件夹,其中可看我们的编译好的MycustomCS.jar

在每次调试运行的时候,不需要切换到命令行环境,可以直接选择Run中的Profile设置参数

选择➕号,在JAR Applic添加一个配置文件

Path to JAR中选择out文件中我们修改并编译好的jar包,选择好后点击Apply

最后在在Run中选择Run CustoomRUn即可看到消息窗

点击确定,发现弹出提示,没关系,继续点击确定

我们把-XX:+AggressiveHeap复制下来

再放到RunProfile这里就直接选择之前创建的CustomRun填入VM options 最后选择Apply

再次Run运行,继续复制-XX:+UseParallelGC

继续在添加到VM options中,记得要用空格隔开

再次运行,提示auth文件找不到

这里把初始的cobaltstrike.auth文件复制到MycustomCS.jar同目录下

最后运行,到这里我们需要进行二次开发的环境就搭建好了

参考资料

红队学院CSTips