前言

因为 CS 被 vultr 检测到了,听到要把我封号,有点小慌,吓得我立马把vps删了😅,所以查找了一下解决方法。

在这里记录一下成功反编译 CS,修改 checksum8 算法的过程。

思路来自这里:

https://blog.csdn.net/qq_35938621/article/details/122366079?spm=1001.2014.3001.5501

但有些地方和这篇文章不太一样,因为我按照上面的方法尝试了一遍,没有复现成功。但只要你按照我这篇文章来,百分百成功。

反编译 CS

我这里使用的是 java 在线反编译网站,而不是自己下载反编译工具(因为使用了一下反编译工具,效果都不太好,所以推荐使用在线工具)

link:http://www.javadecompilers.com/

打开网站,上传 conbaltstrike.jar 文件,选择 CFR 反编译工具,点击 Upload and Decompile 上传和反编译。

image-20220504190012925

然后就是等待几分钟吧,它完成了之后不会提示你完成了,你需要按一下 F5 刷新一下网页,如果成功了,点击下载即可。

修改 checksum8 算法

项目和环境配置

编译器使用的是 IDEA,用不惯英文的可以去装个中文插件。打开 IDEA ,右上角新建项目,java 版本最好为 1.8,因为兼容性好。

image-20220504191220732

下一步,下一步

image-20220504191339420

项目名称为 cobaltstrike,放在哪里都 ok,点击完成。

新建两个文件夹:decompiled_srclib。前者放从网站上下载好已解压的 CS 文件,后者放 cobaltstrike.jar 文件(也就是上传到网站上进行反编译的文件)

image-20220504191601664

然后 checksum8 算法的位置在 decompiled_src/cloudstrike/WebServer.javadecompiled_src/common/CommonUtils.java 这两个文件中,所以需要把他们连带他们的父文件夹一起复制过来,如上图所示。

接下来设置环境:

左上角 文件→项目结构

项目不需要做修改:

image-20220504192239289

模块的话选择依赖,依赖下方的 + 号,选择 Jar 或目录,选择 lib/conbaltstrike.jar,然后勾选,点击应用。

image-20220504192603938

然后点击「工件→JAR→来自有依赖项的模块→然后选择 Aggressor」 出现「aggressor.Aggressor」就说明正确了,然后确定,工件就设置完成了

image-20220504193229455 image-20220504193256603 image-20220504193410696

其他的都没什么问题

image-20220504193341668

解决反编译后带来的错误

因为反编译肯定会有错误的地方,第一步先解决编译的报错先。

点击工具栏上方 构建→构建工件」,然后点击「构建」

image-20220504193801430

WebServer.java里面 第44 行有一个,第268行有一个

image-20220504194153462

第44行:单击 for ,按 Alt + Enter 键,点击 替换为 ‘Map.forEach()’ 结果如下图:

image-20220504194710764

第268行:单击 for ,按 Alt + Enter 键,点击,将for-each 循环替换为迭代器‘for’循环,

image-20220504195000584

还有错误,同理 点击左边的红灯,点击 转换到 'java.util.Map.Entry'

image-20220504195134498

然后结果如下图

image-20220504195258151

接下来看 CommonUtils.java 文件,错误出现在 第1563 行

同理都是先将 for-each 循环改变为 迭代器 ‘for’ 循环

image-20220504195523368

然后又是点击 转换到 'java.util.Map.Entry'

image-20220504195716256

到这里就没有错误了,nice。

修改 checksum8 算法

checksum8 算法脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class EchoTest {
public static long checksum8(String text) {
if (text.length() < 4) {
return 0L;
}
text = text.replace("/", "");
long sum = 0L;
for (int x = 0; x < text.length(); x++) {
sum += text.charAt(x);
}
return sum;
}
public static void main(String[] args) throws Exception {
System.out.println(checksum8("fega"));
}
}

在线运行 java 网站:

https://c.runoob.com/compile/10/

运行结果:

image-20220504200640433

fega 可随意改变,但最好是四位字符(英文字符+数字),因为按着他的来没有成功,很玄学,也可能是我们反编译的源码不太一样。

定位到 checksum8 代码的位置,我所作的修改如下:

WebServer.java文件中:

image-20220504200149610

CommonUtils.java 文件中:92L和93L不需要改变,改变 return 的返回值即可。

image-20220504201601819

image-20220504201652592

最后上线成功,特征码也消失了:

image-20220504201414175

大于四位数不能上线:

image-20220504202251383

可能和这里有关,但我们不需要关心。

因为 vultr 是依据特征码进行检测的,比如 aaa9,所以4位数也足够安全了,有 2^62^ 种可能性,不可能依靠穷举找到我们。

总结

java 菜鸡学会了个小技能,反编译 cs。