CS 反编译与破解

反编译

首先,我们需要一个确认无改动的官方原包

官方HEX
https://verify.cobaltstrike.com/
# Cobalt Strike 4.3 (March 17, 2021) [bug fixes]
c3c243e6218f7fbaaefb916943f500722644ec396cf91f31a30c777c2d559465    Cobalt Strike 4.3 Licensed (cobaltstrike.jar)

certutil -hashfile cobaltstrike.jar SHA256
SHA256 的 cobaltstrike.jar 哈希:
c3c243e6218f7fbaaefb916943f500722644ec396cf91f31a30c777c2d559465

目前成熟的反编译方案,借助idea自带的反编译工具完成:

在idea安装目录中找到反编译工具java-decompiler.jar
IDEAPATH\plugins\java-decompiler\lib\java-decompiler.jar

新建Decompile用来存放反编译后的jar包,并进行反编译,时间略久
java -cp java-decompiler.jar org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs=true cobaltstrike.jar Decompile/

将反编译后生成的cobaltstrike.jar文件解压即可,不再是class文件,而是java文件

查看Decompile\cobaltstrike\META-INF\MANIFEST.MF
其主类如下:
Main-Class: aggressor.Aggressor
#aggressor.Aggressor
package aggressor;

import aggressor.dialogs.ConnectDialog;
import aggressor.ui.UseSynthetica;
import common.Authorization;
import common.License;
import common.Requirements;
import sleep.parser.ParserConfig;

public class Aggressor {
   public static final String VERSION = "4.3 (20210317) " + (License.isTrial() ? "Trial" : "Licensed");
   public static final String VERSION_SHORT = "4.3";
   public static MultiFrame frame = null;

   public static MultiFrame getFrame() {
      return frame;
   }

   public static void main(String[] var0) {
      ParserConfig.installEscapeConstant('c', "\u0003");
      ParserConfig.installEscapeConstant('U', "\u001f");
      ParserConfig.installEscapeConstant('o', "\u000f");
      (new UseSynthetica()).setup();
      Requirements.checkGUI();
      License.checkLicenseGUI(new Authorization());
      frame = new MultiFrame();
      (new ConnectDialog(frame)).show();
   }
}

新建Java项目,此处为MyCS,并在src下配置package aggressor

将Decompile\cobaltstrike\aggressor\Aggressor.java 放入软件包并添加原始cobaltstrike.jar作为依赖

为后门二次编译顺便在这里创建工件,指定主类:

启动报错,我们按照命令行启动加入相关参数

有个小坑坑,新版idea默认隐藏,手动勾上,并输入 -XX:+AggressiveHeap -XX:+UseParallelGC

至此,反编译完成,进入认证破解。

顺便一提再编译,这里我们仅拉取了主类进行测试,实际魔改中根据需求拉取,建议使用到什么文件拉什么文件,不然所有代码中有因Java版本及语法兼容问题导致构建不通过。
因为上面已经进行了工件配置和主类的指定,直接构建工件即可重新打包生成自己的cobaltstrike.jar

MyCS\out\artifacts\MyCS_jar\MyCS.jar

https://mp.weixin.qq.com/s/cRlHoilJa8HPX9L2ZNE77A CobaltStrike二次开发环境初探

破解

生成并替换authkey.pub文件

关键点在于key值,这里抄下师傅们的作业,生成脚本可在文中获得

https://f4x.me/archives/50.html CobaltStrike 4.3 破解及Sleeve相关问题
https://bbs.ichunqiu.com/thread-61581-1-1.html Cobalt Strike破解思路

demo:4.0 data
byte[] decrypt = {
        -54, -2, -64, -45, 0, 0, //文件头
        1, -55, -61, 127, //时间
        0, 0, 0, 1,  //水印
        50, //版本
        16, //key长度
        27, -27, -66, 82, -58, 37, 92, 51, 85, -114, -118, 28, -74, 103, -53, 6 //key
};

4.1的key为:
byte[] key41 = {-128, -29, 42, 116, 32, 96, -72, -124, 65, -101, -96, -63, 113, -55, -86, 118 };

4.2的key为:
byte[] key42 = {-78, 13, 72, 122, -35, -44, 113, 52, 24, -14, -43, -93, -82, 2, -89, -96};

4.3的key为:
byte[] key43 = {58, 68, 37, 73, 15, 56, -102, -18, -61, 18, -67, -41, 88, -83, 43, -103};

================================================================================================

将 .auth 文件读取成 byte[],处理之后得出 26 位的 byte[],将其拆分为:

4位 -> 经过有符号转换 int,结果为29999999 -> 用于判断是否永久有效(是否为发行版)
4位 -> 经过有符号转换 int,结果不为 0 即可 -> 水印
1位 -> 该 byte 值必须是大于 40 且小于 128 -> 判断认证是否适合 4.x
1位 -> 该 byte 值必须是 16 -> key 的长度
16位 -> 该 key 理论上无法逆推

要注意的是:处理 .auth 文件的时候,还需要判断文件头...,因此还需要填充文件头,但按照分析下来,是 4 个字节,但在实测过程中,发现是 6 个字节
因此 .auth 文件的必要数据是 32 位 -> 6 + 4 + 4 + 1 + 1 + 16

修改源码中authkay.pub的md5值

certutil -hashfile authkey.pub MD5
MD5 的 authkey.pub 哈希:
1d311afeca0476a7eda972611fb27bcc

# common.AuthCrypto line28

if (!"1d311afeca0476a7eda972611fb27bcc".equals(CommonUtils.toHex(var2))) {
   CommonUtils.print_error("Invalid authorization file");
   System.exit(0);
}

修改过期时间

common.Authorization line9

//   protected boolean valid = false;
   protected boolean valid = true;

修复becon/BeaconData.class中暗桩

beacon.BeaconData line49

   public void shouldPad(boolean var1) {
//      this.shouldPad = var1;
      this.shouldPad = false;
      this.when = System.currentTimeMillis() + 1800000L;
   }
坑点一
[-] [Sleeve] Bad HMAC on 209952 byte message from resource

这个问题参考上面给到的f4x师傅的文章对key进行处理。

坑点二

在idea中替换原来的authkey.pub后,需要重建项目,否则你会发现公钥校验部分"resources/authkey.pub"没有使用你替换的,而且使用了原始jar包中的公钥
如果你明明替换了,却一直提示Invalid authorization file,那就是这样了~

byte[] var1 = CommonUtils.readAll(CommonUtils.class.getClassLoader().getResourceAsStream("resources/authkey.pub"));
byte[] var2 = CommonUtils.MD5(var1);
System.out.println(CommonUtils.toHex(var2));

至此,CS完成破解。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,681评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,710评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,623评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,202评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,232评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,368评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,795评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,461评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,647评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,476评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,525评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,226评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,785评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,857评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,090评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,647评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,215评论 2 341

推荐阅读更多精彩内容