[工具]Cobalt Strike4.0 破解日记
好久没写东西了啊。。。。感觉都过去几万年了。。。感觉这两年自己变化也挺大的,决定了一些事情,做成了一些事情,错过了一些事情,反省了一些事情。是时候也更新一下这个封尘的博客了。最近发现cs4.0出来了,想着白嫖一波23333
-
在网上白嫖了其他师傅破解的,试用了几波之后发现有挺多问题的。比如net view会无回应,无法生成powershell马等等,一开始以为是4.0破解的通病,但是问了几位师傅之后发现只有我这发生了这种情况。。。所以就想着,反正有原版,索性自己搞一下。
- 感谢ssooking师傅的原版jar, 这里的原版是Cobalt Strike 4.0 (December 5, 2019) 558f61bfab60ef5e6bec15c8a6434e94249621f53e7838868cdb3206168a0937 Cobalt Strike 4.0 Licensed (cobaltstrike.jar) bug fixes之前的版本,不过这个问题不大,这个主要是修复了x64上线的问题
- 破解方法有很多种,这里采用的是改动最小(因为懒)的直接硬编码key覆盖掉。感谢coolcat师傅和其他师傅的无私贡献~
- 其余方法也有零队的《Cobaltstrike 4破解之 我自己给我自己颁发license》链接 / ca3tie1师傅的《CobaltStrike4.0无Hook蛮力Cracked License思路》链接
准备工作
- 我用的是Mac,Windows可能稍有点区别但是区别应该不大
- 以下操作都在一个新建文件夹fuckcs4.0里
找到Idea的java反编译工具,Mac在路径/Applications/IntelliJ IDEA.app/Contents/plugins/java-decompiler/lib
下,找到java-decompiler.jar copy出来一份,并建立文件夹cs_bin,把原版jar放进去
.
├── cs_bin
│ └── cobaltstrike.jar
├── cs_src
└── java-decompiler.jar
2 directories, 2 files
反编译原版jar待用,在java-decompiler.jar所在的目录执行
java -cp ./java-decompiler.jar org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs=true cs_bin/cobaltstrike.jar ./cs_src
命令解释:因为java-decompiler.jar中的META-INF/MANIFEST.MF并没有定义可执行的主类,所以我们并不能使用java -jar去直接运行java-decompiler.jar
.
├── cs_bin
│ └── cobaltstrike.jar
├── cs_src
│ └── cobaltstrike.jar
└── java-decompiler.jar
2 directories, 3 files
在fuckcs4.0里面创建一个新的文件夹,名字为project, 打开Idea新建工程,直接create一个普通的java project就行(一路next),把路径设置到我们刚新建的project文件夹,在project中再创建一个文件夹decompiled_src存放我们逆向之后的源码,把刚刚反编译后的jar放到这个文件夹之后解压,之后再创建一个lib文件夹,用于存放我们的原版jar。
然后在Files --> Project Structure --> Modules
里面的 Dependencies – 加入Jar or directories, 把我们lib文件夹的原版jar加入到项目中,打上勾就好了。
最后在Files --> Project Structure --> Artifact
里面添加Jar – From modules with dependencies, Main Class可以从原版的jar里面的META-INF/MANIFEST.MF看到是aggressor.Aggressor,填进去就行了。
至此准备工作已经差不多完成
改编不是乱编
example:
在src目录创建你要更改的文件以及对应的目录(和decompiled_src相同的目录),如:如果我要修改入口文件,也就是aggressor/Aggressor.java,那就要在src目录创建aggressor/Aggressor.java文件和对应的目录,并在里面作对应的更改,比如在运行cs的时候弹出一个消息框,修改后的源码如下:
package aggressor;
import aggressor.dialogs.ConnectDialog;
import aggressor.ui.UseSynthetica;
import common.Authorization;
import common.License;
import common.Requirements;
import sleep.parser.ParserConfig;
import javax.swing.*;
public class Aggressor {
public static final String VERSION = "4.0 (20191205) " + (License.isTrial() ? "Trial" : "Licensed");
public static MultiFrame frame = null;
public static MultiFrame getFrame() {
return frame;
}
public static void main(String[] var0) {
JOptionPane.showMessageDialog(null, "Pr0ph3t!!!!!!!!!!!!!!!!!!!!!!!!"); //修改的代码
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();
}
}
然后在菜单栏有Build --> Build Artifact
,运行之后在out/artifacts里面会有发现新编译好的jar,
在Run --> Profile --> Edit Profile
处添加一个Jar Application, Jar Path指向我们刚刚编译好的jar,VM Options填上-XX:+AggressiveHeap -XX:+UseParallelGC(如果不加的话会报错)
Run之后发现还有报错,找不到cobaltstrike.auth文件
然后我们把cobaltstrike.auth文件复制到我们生成的jar同目录下,再运行,就能出现我们熟悉的框框了 :(
.
├── cs_bin
│ └── cobaltstrike.jar
├── cs_src
│ └── cobaltstrike.jar
├── java-decompiler.jar
└── project
├── decompiled_src
│ ├── LICENSE.txt
│ ├── META-INF
│ ├── NOTICE.TXT
│ ├── aggressor
│ ├── beacon
│ ├── c2profile
│ ├── cloudstrike
│ ├── cobaltstrike.jar
│ ├── com
│ ├── common
│ ├── console
│ ├── cortana
│ ├── data
│ ├── de
│ ├── dialog
│ ├── dns
│ ├── encoders
│ ├── endpoint
│ ├── eu
│ ├── extc2
│ ├── filter
│ ├── graph
│ ├── icmp
│ ├── importers
│ ├── java_cup
│ ├── javax
│ ├── kerberos
│ ├── libicmp.so
│ ├── libicmp64.so
│ ├── libtapmanager.so
│ ├── libtapmanager64.so
│ ├── license
│ ├── logger
│ ├── mail
│ ├── net
│ ├── org
│ ├── parser
│ ├── pe
│ ├── phish
│ ├── profiler
│ ├── proxy
│ ├── report
│ ├── resources
│ ├── scripts
│ ├── server
│ ├── sleep
│ ├── sleeve
│ ├── socks
│ ├── ssl
│ ├── stagers
│ ├── table
│ ├── tap
│ └── ui
├── fuckcs4.0.iml
├── lib
│ └── cobaltstrike.jar
├── out
│ ├── artifacts
│ └── production
└── src
├── META-INF
├── aggressor
├── beacon
└── common
59 directories, 12 files
开始破解:
我们需要修改的东西为
- 绕过验证校验
- 过期问题
- 去除exit暗桩
- 修复x64上线问题
- 绕过验证校验: 修改的文件在common/Authorization.java 把31行的密钥注释掉并填进正确的密钥(感谢无私奉献的师傅的密钥)
byte[] var4 = {
1, -55, -61, Byte.MAX_VALUE, 18, 52, 86, 120, 40, 16,
27, -27, -66, 82, -58, 37, 92, 51, 85, -114,
-118, 28, -74, 103, -53, 6 };
其实这时候已经是可以正常启动客户端了
但是过期、暗桩和x64上线问题我们还没有修改好
- 过期问题: 修改的文件在common/Authorization.java
第9行把Authorization类中的valid改成true
第76行把isValid函数改成reture true
第92行把isExpired函数改成return false
- 去除exit暗桩: 修改的文件在beacon/BeaconData.java
第48行shouldPad函数中的shouldPad变量改成false
- 修复x64上线问题 修改的文件在aggressor/dialogs/WindowsExecutableDialog.java
第29行的dialogAction函数在生成stage可执行文件的时候并没有判断主机的架构是x86还是x64,统统都用了x86的payload,这里我们加一个判断就可以了
public void dialogAction(ActionEvent var1, Map var2) {
this.options = var2;
String var3 = DialogUtils.string(var2, "listener");
//this.stager = ListenerUtils.getListener(this.client, var3).getPayloadStager("x86");
boolean bool = DialogUtils.bool(this.options, "x64"); //增加判断
if (bool) {
this.stager = ListenerUtils.getListener(this.client, var3).getPayloadStager("x64");
} else {
this.stager = ListenerUtils.getListener(this.client, var3).getPayloadStager("x86");
}
if (this.stager.length != 0) {
String var4 = var2.get("output") + "";
String var5 = "";
if (var4.indexOf("EXE") > -1) {
var5 = "artifact.exe";
} else if (var4.indexOf("DLL") > -1) {
var5 = "artifact.dll";
}
SafeDialogs.saveFile((JFrame)null, var5, this);
}
}
~
至此我们的大致修改就已经完成了,修改完成打包好的文件就是生成的artifacts,直接替换原版的jar文件即可,mac用户想要弄成app的话可以使用jar2app,如果想要二次开发的话其实也是和这个流程类似。
水完了,溜!继续学习
Did you like the post? Subscribe to the feed.