CobaltStrike二开环境初探

前言

我们使用CobaltStrike的时候,进行性的需要进行二次开发,使其对应的功能更加丰富,更加方便我们团队联合进行渗透的稳定性和隐蔽性。

2

反编译

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

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

在对应目录下进行拷贝

/Applications/IntelliJ IDEA.app/Contents/plugins/java-decompiler/lib/java-decompiler.jar

image-20211109112414086

进入到java-decompiler中找到decompiler的路径,提取出来

/org/jetbrains/java/decompiler/IdeaDecompiler$LegalBurden.class

将所有的反斜杠替换成.随之再其后加上ConsoleDecompilers,如下:

org.jetbrains.java.decompiler.IdeaDecompiler$LegalBurden.class.ConsoleDecompilers

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

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

执行的时候会有提示

╰─$ java -cp java-decompiler.jar org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler
Usage: java -jar fernflower.jar [-<option>=<value>]* [<source>]+ <destination>
Example: java -jar fernflower.jar -dgs=true c:\my\source\ c:\my.jar d:\decompiled\

让你加上-dgs=true之后加上反编译的cobaltstrike和反编译之后要把结果放入的目录,输入:

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

image-20211109114350746

反编译完成后,会自动打包成jar包,右键解压后打开可以看到都是.java了,反编译出来就可以直接放入IntelliJ IDEA中,可直接搜索代码和相关的代码交叉引用。

image-20211109114720498

IDEA二次开发环境构造

打开IDEA选择Create New Project 一直选择Next,创建好后,先建立两个文件夹decompiled_src文件夹,之后再建立一个lib文件夹。将反编译好的CobaltStrike复制到decompiled_src中,然后把它解压出来

image-20211109120423523

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

结下来我们要对这个项目进行设置,点击File中的Project StructureModulesDependencies进行设置.

image-20211109120705932

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

image-20211109120959418

依赖关系设置完成后,进入Artifacts——>JAR——>From modules with dependencies

image-20211109121200835

这里需要填写一个Main Class,去lib中的META-INF里面双击MANIFEST.MF

image-20211109121328249

复制aggressor.Aggressor,再次打开选择OK这里就设置完成了。

image-20211109121447940

接下来再decompiled_src中找到已经反编译完的aggressor主类,右键选择Refactor –Copy File

image-20211109122002190

image-20211109122051094

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

image-20211109122242765

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

image-20211109160037402

试着修改一下文档,保存。

image-20211109160235084

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

当提示Build completed successfully in 4 s 670 ms会在out文件夹生成我们编译好的SecondC2.jar

image-20211109161214075

在每次调试运行的时候,不需要切换到命令行环境,可以直接配置对应的参数如下:

image-20211109161644494

最后在Run中选择Run C2级可以看到消息窗口

image-20211109161624209

点击确认,发现弹出提示,点击确定

image-20211109161817082

拿出-XX:+AggressuveHeap复制并放到Run->Profile中的VM options中

image-20211109162250841

再次运行,再次复制-XX:+UseParallelGC继续添加到VM options中,记得要用空格隔开。

image-20211109162419743

再次运行,提示缺少.auth文件

image-20211109162720558

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

image-20211109163005947

最后运行,就可以成功启动,接下来根据我们对应的需求,在项目中就行关键字搜索就可以定位到相关功能的代码处,从而进行相应的修改,或做一些功能上的增强。

完整下载地址

Author

ol4three

Posted on

2021-11-09

Updated on

2022-07-22

Licensed under


Comments