旧笔记 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 授权文件发出时间
授权文件结构