假设我们有一个 Windows 应用程序,它通过 HTTPS 发送一些数据包。我们需要提取这个数据包的内容(当然是未加密的)。
无法获得服务器私有证书并且中间人攻击不起作用(此应用程序使用了一些中间人防御)。因此,解密似乎不在讨论范围之内。
唯一的选择(我想)是在加密之前从应用程序中提取这些数据包。应用程序受到很好的保护,它不依赖于 OpenSSL DLL。但是,我们有一定的感觉,它使用了 OpenSSL(但是,静态链接,可能是 OpenSSL 源在编译/链接之前甚至被修改过)。
挂接对 OpenSSL 函数(如ssl_write())的调用并不简单,因为应用程序的可执行文件已被打包和混淆。它也有一个调试保护,但已经找到了一个隐藏的调试器,它可以避免这种防御。所以,我们可以调试这个应用程序。然而,在调试过程中看到的代码是一团糟(混淆)。甚至由该应用程序加载的系统 DLL 也完全混乱。下面是在调试此应用程序期间send()函数 from的示例。供参考,这里WS2_32.dll是正常(未受保护)应用程序的样子。因此,很难理解函数参数是如何传递的,而且看起来它们可以通过不同的方式传递(不确定,但根据调试实验看起来如此)。
这似乎是一项非常常见的任务,因为有许多 Windows 应用程序使用 HTTPS 和静态链接的 OpenSSL。
希望有人有这样的经验,可以分享一下。