Contents

聊聊CS4.5的防破解机制

文章已更新到RedKits仓库《聊聊CS4.5的防破解机制》

破解-Crack

关于破解、二开、去特征我并不想写什么,各种文章太多了,我列几篇,自行参考即可:

补充
CS4.6修复了该BUG:+ Fixed an issue that caused Cobalt Strike’s http listener to be vulnerable when URLs start with “/” as outlined in CVE-2022-23317.

防破解-AntiCrack

其实很多人并不理解破解的核心是什么?核心不在于你绕过了检查license的Java代码,修改是替换class还是agent方式,还是你patch了多少个防破解检测。

关键点在于完整的功能(官方原版)和AES加密的Key,熟悉的人都知道sleeve下面都是加密文件,没有Key就谈不上破解。当然这两个也只有等泄露。

说到这里又想多说几句,现在很多软件完整版都是通过会员通道+license分发(只要你有完整版都难逃破解的命运),像CS这种将核心模块加密再将Key基于公钥算法保护也算一种比较流行的保护方式。所以Cracker现在最难的是拿完整版和key,这个肯定也会泄露出来,只是时间问题。

言归正传,终上所述,CS的防破解技术主要分为三个方面:

  • Authorization校验license
  • sleeve的AES加密
  • 一些防破解检测,俗称暗桩

通过agent的方式破解,可以防止检测文件篡改,参考https://github.com/Twi1ight/CSAgent

当然agent方式会存在诸多开发不便,因此许多人也会修改class来进行二开,这就不得不聊一下4.5的暗桩检测。

4.5的暗桩检测

文件

  • 4.5的原版:https://www.ddosi.org/cobaltstrike-4-5/
  • 4.5的Key:https://github.com/Twi1ight/CSAgent

暗桩1:

  • isPaddingRequired检测crc,和先前的版本一样
  • beacon/BeaconC2,BeaconC2函数调用this.data.shouldPad(isPaddingRequired());
  • 30分钟后,所有任务改为向beacon发退出命令

暗桩2:

  • common/Starter2,initialize函数if (!A(paramClass)) {System.exit(0);}
  • aggressor.dialogs/ConnectDialog和server/Resources均有调用
  • 检测crc,检测不过,直接退出

暗桩3:

  • aggressor/Aggressor,localRuntimeMXBean.getInputArguments(),检测"-javaagent:“参数,这个对修改class无效
  • common/Starter,同上Starter2,initialize函数if (!A(paramClass)) {System.exit(0);}
  • aggressor/Aggressor、common/Requirements和server/Teamserver均有调用

暗桩4:

  • common/Helper.startHelper函数
  • 检测Starter2.class、ConnectDialog.class、Resources.class的crc
  • aggressor.windows/KeystrokeBrowser、CredentialManager、ScreenshotBrowser均有调用
  • crc检测不过,直接退出

暗桩5:

  • beacon/CommandBuilder,类构造函数中初始化
  • 包含”-javaagent:“参数(同上),则触发检测
  • 检测BeaconC2、BeaconData、SleevedResource、SleeveSecurity.class的crc值,不相等则4小时后触发检测
  • 触发检测后,所有下发的任务命令改为0x06,即不干活

根据上面的信息,反编译代码,找到各个检测函数,patch移除暗桩即可。