Evi1cg 嘶吼專業版java
cobaltstrike3.10 已經出來好久了,其中最吸引人的可能就是他已經支持中文了,可是貌似好久以來都沒在網上看到3.10的資源,因此就沒辦法,拿手上的3.8 改改將就用。markdown
首先咱們要對cobaltstrike3.8進行反編譯,這裏能夠參照以前破解的方法,戳我,使用jad進行反編譯。
ide
要怎麼定位到要改哪裏呢? 咱們能夠看一下CS的輸出:測試
能夠看到在輸出以前有received output,因此咱們就能夠檢索這個關鍵字,立刻能夠定位到BeaconC2.class文件,搜索「received output」一共有5個結果:編碼
vspa
查看代碼以下:3d
能夠看到,輸出的結果是由CommonUtils類的bString方法返回的,定位到CommonUtils.class文件查看代碼:rest
能夠看到傳過來的數據使用 ISO8859-1 進行了編碼。ISO8859-1屬於單字節編碼,最多能表示的字符範圍是0-255,應用於英文系列。好比,字母a的編碼爲0x61=97。 很明顯, ISO8859-1 編碼表示的字符範圍很窄,沒法表示中文字符。這就是CS沒法顯示中文的緣由。通過測試,使用 ISO8859-1 進行中間編碼是不會致使數據丟失的。那麼咱們是否是能夠修改代碼把編碼轉過來來呢?固然能夠 !blog
可是因爲本身比較菜,直接修改CommonUtils.java之後編譯不過去(表示很難受,若是你會編譯,還但願不吝賜教)。因此只能去修改BeaconC2.java。dns
通過屢次測試,發如今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
替換便可。
修改之後,須要把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就修改完成了。
這裏錄了一個DEMO:
這裏就不給下載連接了,小夥伴本身改改吧,改了之後若是還有什麼亂碼,麻煩反饋一波。