改装 Cobalt Strike

开发环境配置

验证 cobaltstrike.jar 是否为原始文件:https://verify.cobaltstrike.com/

安装 IntelliJ IDEA

反编译 cobaltstrike.jar

下载 OpenJDK,并配置路径到 IntelliJ IDEA 中

新建项目

创建目录结构如下

文件 - 项目结构 - 项目设置 - 模块

文件 - 项目结构 - 项目设置 - 工件

主类

删除 META-INF 文件夹

Cobalt Strike 破解

认证流程

cobaltstrike.jar 有两种启动方式

作为客户端启动:aggressor.Aggressor

作为服务端启动:server.TeamServer

common.License

common.Authorization

破解

common.Authorization

License 认证需要以下几部分:

可以参考 CSAgent:

修改如下:

暗桩

Cobalt Strike 中存在多处 class CRC 校验,因此在上一步通过 license 认证后还无法正常使用,需要移除几处暗桩

可以通过全局搜索 .class"getCrcSystem.currentTimeMillis()System.exit(0) 等定位暗桩

common.Helper

common.Starter

common.Starter2

beacon.BeaconData

beacon.CommandBuilder

调试环境配置

运行/调试配置 - 编辑配置 - 添加新的运行配置

Client

JAR 应用程序

虚拟机选项:

环境变量:GDK_SCALE=2

TeamServer

应用程序

主类:server.TeamServer

虚拟机选项:

生成 cobaltstrike.store

修改 .aggressor.prop 文件路径

aggressor.Prefs

修复 HTTPS 协议问题

cloudstrike.NanoHTTPD

server.TeamServer

修复 CVE-2022-23317

cloudstrike.WebServer

这个文件 java-decompiler.jar 反编译的代码无法直接编译,此处建议使用 JD-GUI 进行反编译

在 _serve 中添加以下判断:

修改 checksum8 特征

我这里的做法是所有涉及 checksum8 的代码都会返回 404,因此使用 stager 必须进行以下配置:

修复 CVE-2022-39197

SwingHTML.java

META-INF/MANIFEST.MF

解决部分显示问题

在上一部分禁用 Swing 中的 HTML 后,需要修改 resources/about.html、aggressor.browsers.Connect、aggressor.dialogs.JavaSmartAppletDialog、aggressor.dialogs.ProxyServerDialog、beacon.pivots.BrowserPivotPortForward、beacon.pivots.SOCKSPivot、dialog.DialogUtils、tunnel.TunnelReversePortForward、ui.ATable 等对受影响的 ui 进行修复,可以通过全局搜索 <html> 或者 <[^>]+> 进行定位

解密 sleeve 中的文件

CrackSleeve.java

修改默认密钥

beacon.BeaconPayload

在 BeaconPayload.java 中搜索 .dll ,提取出以下文件需要修改:

在解密后的文件中搜索 xor2e 定位密钥位置,反编译代码如下:

修改后重新加密