起因
这个玩意是业务需求, hw支撑, 去年2022年的项目, 分析一下这个SSLVPN软件的登陆包, 走协议去批量登录(?).
都一年了, 应该没啥用了.
经过
简单来说就是先找关键函数, 然后分析调用, 最后直接调用; 因为这个协议比较简单就完全模拟了
关键函数
先对软件的gwclient.exe
下了断点, 发现最终发包是在WSASend
交叉引用发现就一个东西
下断点打堆栈发现是用了InitializeSecurityContextA
发现是直接用BCryptDecrypt解密
这个明显是http 那么找这个的请求包 来源是BCryptHashData
同时有
/download/sign.package.conf
/client/custom_lang.json
发现前面就这几个请求
那么我们dump下他这个非http的返回值 frida-trace -i BCrypt*rypt
grep一下, 发现log中有敏感信息
敏感日志
仔细分析日志, 发现已经解析了相关的信息
其中SSLMSG_One发送了信息 ParseMsg_One函数进行了该配置的解析
找到了这里
这里直接新线程了
配置数据包解析
在上述分析的parser函数中, 结合抓的包进行分析
0x213e是端口
In [5]: hex(8510)
Out[5]: ‘0x213e’
这个包是待parse的包
推测结构体
1 | struct my_struct1 |
这个函数sub_44EF70是crc么
这里是上面那个函数的执行结果
其中分配的buf1为 此时结构体为长度 网址 空
此时v8的union为
后面函数执行完成后为
这边先剧透下 长度为0x04+0x17(+0x01)+0x4 分别是string(0x17)+long 见下图的sendlen
也就是在字符串之后 此时查看日志文件 发现buf后的即为地址
而这个函数就是搞字符串的