旧笔记 cs3的key生成过程
授权流程分析
1.common.License文件去调用common.Authorization文件
2.Authorization文件读取cobaltstrike.auth文件并创建AuthCrypto类然后调用decrypt方法解密auth文件。
3.AuthCrypto类主要是使用RSA算法读取jar包内resources/authkey.pub私钥然后利用它去解密cobaltstrike.auth文件
4.然后调用DataParser类去解析
5.最后调用gunzip函数解压缩
6.成功返回授权信息
函数分析
Authorization调用decrypt方法解密
利用RSA解密授权文件
判断文件头
判断授权文件头是否匹配
取授权文件前4个字节
文件头十六进制\xca\xfe\xc0\xbb
获取压缩数据偏移
1  | return CommonUtils.gunzip(dataParser.readBytes(dataParser.readShort()));  | 
1  | public int readShort() throws IOException {  | 
取前两个字节代表压缩数据长度
1  | public byte[] readBytes(final int n) throws IOException {  | 
根据长度返回压缩数据(注意这里是从第6个字节开始因为前4个字节代表文件头在后两个字节代表压缩数据长度)
最后转成string字符串然后在以,号为分割符转成string数组
例子如下
9022-418a-b376-ab71,200908,1873433027,1546198065476
1  | final String[] array = CommonUtils.toArray(CommonUtils.bString(decrypt));  | 
[0] License key  许可证key
[1] End date       授权过期时间
[2] Watermark    水印
[4] issued       授权文件发出时间  
授权文件结构