CobaltStrike二次开发环境初探

  • A+
所属分类:安全文章

这是 酒仙桥六号部队 的第 124 篇文章。

全文共计2938个字,预计阅读时长9分钟


在我们使用cobaltstrike的过程中,会涉及到二次开发,从而使其功能上更加的健壮,不至于碰到杀软就软了的地步,本文从cobaltstrike的快速反编译到二次开发环境的准备作为二次开发cobaltstrike的起步。

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


一 CobaltStrike反编译

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

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

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

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

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

org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompile

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

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

执行的时候会有提示。

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

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同目录下。

最后运行,到这里我们需要进行二次开发的环境就搭建好了,接下来就可以根据我们的需要通过关键字在源码中定位到具体的功能实现的代码,从而进行修改,或作一些功能上的增强。


三 总结

本文使用IntelliJ IDEA自带的java反编译工具,对cobaltstrike进行了快速的反编译,并展示了修改后的效果,权当抛砖引玉,具体的插件开发各位师傅可以结合具体场景进行编写。

参考资料

红队学院CSTips



本文始发于微信公众号(酒仙桥六号部队):CobaltStrike二次开发环境初探

发表评论