加密前提取HTTPS数据包

逆向工程 调试 dll注入 https协议
2021-06-30 12:48:39

假设我们有一个 Windows 应用程序,它通过 HTTPS 发送一些数据包。我们需要提取这个数据包的内容(当然是未加密的)。

无法获得服务器私有证书并且中间人攻击不起作用(此应用程序使用了一些中间人防御)。因此,解密似乎不在讨论范围之内。

唯一的选择(我想)是在加密之前从应用程序中提取这些数据包。应用程序受到很好的保护,它不依赖于 OpenSSL DLL。但是,我们有一定的感觉,它使用了 OpenSSL(但是,静态链接,可能是 OpenSSL 源在编译/链接之前甚至被修改过)。

挂接对 OpenSSL 函数(如ssl_write()的调用并不简单,因为应用程序的可执行文件已被打包和混淆。它也有一个调试保护,但已经找到了一个隐藏的调试器,它可以避免这种防御。所以,我们可以调试这个应用程序。然而,在调试过程中看到的代码是一团糟(混淆)。甚至由该应用程序加载的系统 DLL 也完全混乱。下面是在调试此应用程序期间send()函数 from的示例供参考,这里WS2_32.dll是正常(未受保护)应用程序的样子。因此,很难理解函数参数是如何传递的,而且看起来它们可以通过不同的方式传递(不确定,但根据调试实验看起来如此)。

这似乎是一项非常常见的任务,因为有许多 Windows 应用程序使用 HTTPS 和静态链接的 OpenSSL。

希望有人有这样的经验,可以分享一下。

2个回答

既然你想绕过 HTTPS 加密,为什么不使用Fiddler呢?

Fiddler 是一个 Web 调试代理,它自动将自己设置为系统代理。它还提供了在系统上安装自签名根证书的选项,因此可以进行 HTTPS 嗅探。

您所要做的就是启动 Fiddler,转到工具 -> Fiddler Optios -> HTTPS 选项卡 -> 选中“解密 HTTPS 流量”。之后在对话框中单击是,询问是否可以将根证书安装为受信任的并且您很高兴(如果我没记错的话,Fiddler 也需要重新启动才能正常工作)。

然后,来自运行 fiddler 的计算机的所有 HTTPS 流量都可以在应用程序的相应选项卡中进行检查。

也许以下一些工具可以帮助您:

  1. “SSLHOOK 是一个 Win32 DLL,允许挂钩 OpenSSL 函数 SSL_read 和 SSL_write” https://github.com/strobejb/sslhook

  2. 免疫调试器 (immdbg) 具有 !hookssl 命令 (hookssl.py)