VPN认证-登陆包协议分析

起因

这个玩意是业务需求, hw支撑, 去年2022年的项目, 分析一下这个SSLVPN软件的登陆包, 走协议去批量登录(?).
都一年了, 应该没啥用了.

经过

简单来说就是先找关键函数, 然后分析调用, 最后直接调用; 因为这个协议比较简单就完全模拟了

关键函数

先对软件的gwclient.exe下了断点, 发现最终发包是在WSASend

交叉引用发现就一个东西

下断点打堆栈发现是用了InitializeSecurityContextA
image.png

发现是直接用BCryptDecrypt解密
image.png

这个明显是http 那么找这个的请求包 来源是BCryptHashData
image.png

同时有
/download/sign.package.conf
/client/custom_lang.json

发现前面就这几个请求

image.png

那么我们dump下他这个非http的返回值 frida-trace -i BCrypt*rypt

image.png
grep一下, 发现log中有敏感信息
image.png

敏感日志

仔细分析日志, 发现已经解析了相关的信息
image.png

其中SSLMSG_One发送了信息 ParseMsg_One函数进行了该配置的解析

找到了这里

image.png

这里直接新线程了
image.png

配置数据包解析

在上述分析的parser函数中, 结合抓的包进行分析

0x213e是端口

In [5]: hex(8510)
Out[5]: ‘0x213e’

这个包是待parse的包
image.png

推测结构体

1
2
3
4
5
6
7
8
struct my_struct1
{
  HWND handle;
  UINT magic;
  _BYTE gap_8[4];
  char connect_ip[128];
  int connect_port;
};

这个函数sub_44EF70是crc么
image.png

这里是上面那个函数的执行结果
image.png

其中分配的buf1为  此时结构体为长度 网址 空
image.png

此时v8的union为
image.png

后面函数执行完成后为
image.png

这边先剧透下 长度为0x04+0x17(+0x01)+0x4 分别是string(0x17)+long 见下图的sendlen

也就是在字符串之后 此时查看日志文件 发现buf后的即为地址
image.png

而这个函数就是搞字符串的