當前位置:
首頁 > 新聞 > Cobalt strike3.8 中文支持

Cobalt strike3.8 中文支持

0x00 簡介

cobaltstrike3.10 已經出來很久了,其中最吸引人的可能就是他已經支持中文了,但是貌似很久以來都沒在網上看到3.10的資源,所以就沒辦法,拿手上的3.8 改改將就用。

0x01 反編譯

首先我們要對cobaltstrike3.8進行反編譯,這裡可以參照之前破解的方法,戳我,使用jad進行反編譯。

0x02 修改代碼

要怎麼定位到要改哪裡呢? 我們可以看一下CS的輸出:

可以看到在輸出之前有received output,所以我們就可以檢索這個關鍵字,馬上可以定位到BeaconC2.class文件,搜索「received output」一共有5個結果:

查看代碼如下:

可以看到,輸出的結果是由CommonUtils類的bString方法返回的,定位到CommonUtils.class文件查看代碼:

可以看到傳過來的數據使用 ISO8859-1 進行了編碼。ISO8859-1屬於單位元組編碼,最多能表示的字元範圍是0-255,應用於英文系列。比如,字母a的編碼為0x61=97。 很明顯, ISO8859-1 編碼表示的字元範圍很窄,無法表示中文字元。這就是CS無法顯示中文的原因。經過測試,使用 ISO8859-1 進行中間編碼是不會導致數據丟失的。那麼我們是不是可以修改代碼把編碼轉過來來呢?當然可以 !

但是由於自己比較菜,直接修改CommonUtils.java以後編譯不過去(表示很難受,如果你會編譯,還希望不吝賜教)。所以只能去修改BeaconC2.java。

經過多次測試,發現在CS上執行命令以後返回的結果編碼為GBK,所以轉碼過程為 CommonUtils.java轉碼:

GBK -> ISO8859-1

我們要修改的BeaconC2.

ISO8859-1 -> GBK -> UTF-8

所以思路就很明朗了,我們只需要在傳入rest之前把中文轉換成UTF-8就可以了,代碼也很簡單,測試如下:

所以關鍵代碼為:

String tmp = CommonUtils.bString(CommonUtils.readAll(in));

String tmp1 = new String(tmp.getBytes("ISO8859-1"),"gbk");

String rest = new String(tmp1.getBytes(),"utf-8");

源代碼是這樣:

修改以後是這樣:

所以找到所有的:

String rest = CommonUtils.bString(CommonUtils.readAll(in));

替換即可。

0x03 編譯替換

修改以後,需要把BeaconC2.java編譯之後替換原來的BeaconC2.class。編譯方法很簡單,只需要把BeaconC2.java放到解壓以後的CS目錄,執行以下命令:

javac -classpath . BeaconC2.java -Xlint:unchecked

在這裡,可能會碰到以下報錯

這裡可以改一下代碼,將

import c2profile.MalleableHook.MyHook;

import dns.DNSServer.Handler;

改為:

import c2profile.MalleableHook;

import dns.DNSServer;

在進行編譯即可。之後將原來的BeaconC2.class替換,我們的CS就修改完成了。

0x04 效果

這裡錄了一個DEMO:

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

HackTheBox Writeup之拿下Mantis主機許可權過程
甲方安全建設之Windows橫向移動攻擊的檢測

TAG:嘶吼RoarTalk |