文章目录
前言
原版的CobaltStrike已经被各大杀毒软件给标记了,就算变换profile,stage和beacon也存在着许多特征,所以只能想办法来隐藏和去除,二次编译CobaltStrike就是一个很好的办法。
一、环境
win7_x64
jdk-11.0.14
Idea.2022.1
CobaltStrike_4.4
二、过程
1.注册Idea
Idea嫌麻烦没有整破解,用临时邮箱注册个账号用30天


2.原版CobaltStrike
找个CobaltStrike_4.4原版,我这里的例子是从k8gege那里下的:
别的地方的话,记得对下hash
3.开始反编译
然后我们使用IntelliJ IDEA自带的反编译java的工具(用jd-gui会卡死,不懂为什么,Luyten反编译出来挺多报错的,所以还是自带的好)
这个工具位置在:
..\JetBrains\IntelliJ IDEA 2022.1\plugins\java-decompiler\lib
将工具拷贝到如下图:

cs_bin里面放的是原版cobaltstrike.jar
命令如下:
java -cp java-decompiler.jar org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dsg=true cs_bin/cobaltstrike.jar cs_src
如果用的是jdk8,会报如下错,没深究过为什么会报错,有知道的朋友可以告诉我

反编译完成后cs_src是一个jra文件,解压后就是.java

4.新建项目
然后回到Idea新建个项目

随便取个名字

创建后在项目下新建立两个文件夹decompiled_src 和lib

5.配置项目
decompiled_src:
就将上面反编译出来的cs_src\cobaltstrike.jar 解压到mycobaltstrike\decompiled_src
lib:
将cs_bin\cobaltstrike.jar 拷贝到 \mycobaltstrike\lib
完成后
选择file->project Structure->Modules->Dependencies->Library-Java

选lib文件夹里刚拷贝过去的jar包

记得勾上

然后file->project Structure->Artifacts—>jar—>from modules with dependencies 去新建一个Main Class


Main Class 可以在 Lib->cobaltstrike.jar->META-INF->MENIFEST.MF中找到

复制aggressor.Aggressor然后填上去

然后在decompiled_src中找到已经反编译完的aggressor主类,右键选择Refactor ->Copy File


在To directory点击添加,选择之前创建的src在其中添加一个aggressor名字要一致,最后点击OK
这样aggressor就自动的被拷贝到src目录里去了,这里可以看一下

然后这里记得把Lib->cobaltstrike.jar->META-INF->MENIFEST.MF的内容全部拷贝覆盖src->->META-INF->MENIFEST.MF不然编译完成后运行会报错

然后在Aggressor.java添加行代码测试下
JOptionPane.showMessageDialog(null, "Hello world");

修改完成之后就可以选Build–>Build Artifacts–>Build进行编译
如果后面要改什么文件也是将其拷贝到src然后创建同名的文件夹就行
成功的话输出在Out文件夹里面

调试运行的时候添加一个jar配置,然后把刚刚的jar添加到路径中

参数少什么就填什么好了,下面只是一些
-XX:ParallelGCThreads=4 -XX:+AggressiveHeap -XX:+UseParallelGC

然后调试运行


提示我们没有.auth文件
可以参考这里做一个:
将生成的authkey.pub放入src/resources/,将生成的cobaltstrike.auth放到打包好的jar包同目录,修改common/AuthCrypto.load()函数中md5数为authkey.pub的值:

或者嫌弃麻烦的话直接用CSAgent:
把CSAgent.jar 拷贝到打包好的jar包同目录
调试参数换成下图

蓝色那里要换成绝对路径,不然调试时候会报错Error opening zip file or JAR manifest missing: CSAgent.jar
6.去除暗桩
当然你修改过源码后要去除暗桩才能用
去除暗桩也是参考这里
beacon/BeaconData中将shouldPad方法的值固定为false:

4.4新暗桩
(之前以4.3为例进行License认证分析,换成4.4后发现运行退出,存在新的暗桩)
相比之前的this.shouldPad的exit,又在common/Helper增加.class判断,注释即可:

在common/Starter中增加.class判断,注释即可:

在common/Starter2中增加.class判断,注释即可:

7.免杀
至于改免杀的地方这里已经很详细了我就不赘述了,就是尽可能的去除原版CobaltStrike的一些特征
CobaltStrike免杀
其他免杀
这些方法可以去除和隐藏一些stage和beacon的特征
profile file
可以参考下面的项目
重写Stager和Beacon
即使做完了上面这些,也不能完全说免杀,最好的办法还是重写beacon和Stager,已经有大牛重写了,参考如下:
参考
总结
搞起来还是挺花时间的,希望能给大家提供一点点帮助









