本文由 简悦 SimpRead 转码, 原文地址 mp.weixin.qq.com
这是 酒仙桥六号部队 的第 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 Structure
在Modules
对Dependencies
进行设置。
选择 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 dependencies
在Main 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
复制下来。
再放到Run
的Profile
这里就直接选择之前创建的CustomRun
填入VM options
最后选择Apply
再次Run
运行, 继续复制-XX:+UseParallelGC
继续在添加到VM options
中,记得要用空格隔开。
再次运行,提示auth
文件找不到。
这里把初始的cobaltstrike.auth
文件复制到MycustomCS.jar
同目录下。
最后运行, 到这里我们需要进行二次开发的环境就搭建好了,接下来就可以根据我们的需要通过关键字在源码中定位到具体的功能实现的代码,从而进行修改,或作一些功能上的增强。
三 总结
本文使用 IntelliJ IDEA 自带的 java 反编译工具,对 cobaltstrike 进行了快速的反编译,并展示了修改后的效果,权当抛砖引玉,具体的插件开发各位师傅可以结合具体场景进行编写。
参考资料
红队学院 CSTips