CS 反編譯與破解

反編譯

首先磺芭,我們需要一個(gè)確認(rèn)無(wú)改動(dòng)的官方原包

官方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用來(lái)存放反編譯后的jar包寨典,并進(jìn)行反編譯爷贫,時(shí)間略久
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
其主類(lèi)如下:
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項(xiàng)目,此處為MyCS腾窝,并在src下配置package aggressor

將Decompile\cobaltstrike\aggressor\Aggressor.java 放入軟件包并添加原始cobaltstrike.jar作為依賴(lài)

為后門(mén)二次編譯順便在這里創(chuàng)建工件缀踪,指定主類(lèi):

啟動(dòng)報(bào)錯(cuò),我們按照命令行啟動(dòng)加入相關(guān)參數(shù)

有個(gè)小坑坑燕锥,新版idea默認(rèn)隱藏辜贵,手動(dòng)勾上,并輸入 -XX:+AggressiveHeap -XX:+UseParallelGC

至此归形,反編譯完成托慨,進(jìn)入認(rèn)證破解。

順便一提再編譯暇榴,這里我們僅拉取了主類(lèi)進(jìn)行測(cè)試厚棵,實(shí)際魔改中根據(jù)需求拉取,建議使用到什么文件拉什么文件蔼紧,不然所有代碼中有因Java版本及語(yǔ)法兼容問(wèn)題導(dǎo)致構(gòu)建不通過(guò)婆硬。
因?yàn)樯厦嬉呀?jīng)進(jìn)行了工件配置和主類(lèi)的指定,直接構(gòu)建工件即可重新打包生成自己的cobaltstrike.jar

MyCS\out\artifacts\MyCS_jar\MyCS.jar

https://mp.weixin.qq.com/s/cRlHoilJa8HPX9L2ZNE77A CobaltStrike二次開(kāi)發(fā)環(huán)境初探

破解

生成并替換authkey.pub文件

關(guān)鍵點(diǎn)在于key值奸例,這里抄下師傅們的作業(yè)彬犯,生成腳本可在文中獲得

https://f4x.me/archives/50.html CobaltStrike 4.3 破解及Sleeve相關(guān)問(wèn)題
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, //時(shí)間
        0, 0, 0, 1,  //水印
        50, //版本
        16, //key長(zhǎng)度
        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位 -> 經(jīng)過(guò)有符號(hào)轉(zhuǎn)換 int谐区,結(jié)果為29999999 -> 用于判斷是否永久有效(是否為發(fā)行版)
4位 -> 經(jīng)過(guò)有符號(hào)轉(zhuǎn)換 int,結(jié)果不為 0 即可 -> 水印
1位 -> 該 byte 值必須是大于 40 且小于 128 -> 判斷認(rèn)證是否適合 4.x
1位 -> 該 byte 值必須是 16 -> key 的長(zhǎng)度
16位 -> 該 key 理論上無(wú)法逆推

要注意的是:處理 .auth 文件的時(shí)候逻卖,還需要判斷文件頭...宋列,因此還需要填充文件頭,但按照分析下來(lái)评也,是 4 個(gè)字節(jié)炼杖,但在實(shí)測(cè)過(guò)程中灭返,發(fā)現(xiàn)是 6 個(gè)字節(jié)
因此 .auth 文件的必要數(shù)據(jù)是 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);
}

修改過(guò)期時(shí)間

common.Authorization line9

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

修復(fù)becon/BeaconData.class中暗樁

beacon.BeaconData line49

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

這個(gè)問(wèn)題參考上面給到的f4x師傅的文章對(duì)key進(jìn)行處理。

坑點(diǎn)二

在idea中替換原來(lái)的authkey.pub后坤邪,需要重建項(xiàng)目熙含,否則你會(huì)發(fā)現(xiàn)公鑰校驗(yàn)部分"resources/authkey.pub"沒(méi)有使用你替換的,而且使用了原始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完成破解喂饥。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市肠鲫,隨后出現(xiàn)的幾起案子员帮,更是在濱河造成了極大的恐慌,老刑警劉巖导饲,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捞高,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡渣锦,警方通過(guò)查閱死者的電腦和手機(jī)硝岗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)袋毙,“玉大人型檀,你說(shuō)我怎么就攤上這事√牵” “怎么了胀溺?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)皆看。 經(jīng)常有香客問(wèn)我仓坞,道長(zhǎng),這世上最難降的妖魔是什么腰吟? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任无埃,我火速辦了婚禮,結(jié)果婚禮上毛雇,老公的妹妹穿的比我還像新娘嫉称。我一直安慰自己,他們只是感情好禾乘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布澎埠。 她就那樣靜靜地躺著,像睡著了一般始藕。 火紅的嫁衣襯著肌膚如雪蒲稳。 梳的紋絲不亂的頭發(fā)上氮趋,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音江耀,去河邊找鬼剩胁。 笑死,一個(gè)胖子當(dāng)著我的面吹牛祥国,可吹牛的內(nèi)容都是我干的昵观。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼舌稀,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼啊犬!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起壁查,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤觉至,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后睡腿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體语御,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年席怪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了应闯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡挂捻,死狀恐怖碉纺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情细层,我是刑警寧澤惜辑,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站疫赎,受9級(jí)特大地震影響盛撑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜捧搞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一抵卫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧胎撇,春花似錦介粘、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至爵憎,卻和暖如春慨亲,著一層夾襖步出監(jiān)牢的瞬間婚瓜,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工刑棵, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留巴刻,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓蛉签,卻偏偏與公主長(zhǎng)得像胡陪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子碍舍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容