4

我写了一个小程序来捕获 https 流量。我想使用该软件捕获DECODED获取和发布数据。
如您所知,Fiddler 应用程序可以像魅力一样做到这一点,现在我正在寻找一种在我的程序中做到这一点的方法。

例如,这是我的代码:

   void FiddlerApplication_AfterSessionComplete(Fiddler.Session oSession)
        {
            this.Invoke(new MethodInvoker(delegate
            {
                oSession.bBufferResponse = true;
                txtLog.Text += "full-url : \r\n" + oSession.fullUrl.ToString() + "\r\n-----------------------------------------------\r\n";
                txtLog.Text += "method : \r\n" + oSession.oRequest.headers.HTTPMethod + "\r\n-----------------------------------------------\r\n";
                txtLog.Text += "request headers : \r\n" + oSession.oRequest.headers + "\r\n-----------------------------------------------\r\n";
                txtLog.Text += "responce headers : \r\n" + oSession.oResponse.headers + "\r\n-----------------------------------------------\r\n";
                txtLog.Text += "get request body as string : \r\n" + oSession.GetRequestBodyAsString() + "\r\n-----------------------------------------------\r\n";
                txtLog.Text += "request body bytes : \r\n" + oSession.requestBodyBytes + "\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n";

                txtLog.SelectionStart = txtLog.Text.Length;
                txtLog.ScrollToCaret();
            }));
        }

get request body as string对于txtLoghttps 网页,如下所示 :

get request body as string : 
A SSLv3-compatible ClientHello handshake was found. Fiddler extracted the parameters below.

Major Version: 3
Minor Version: 1
Random: 52 02 18 75 64 2D 8D 65 75 B9 C4 1B 58 76 92 3E 6B C5 BF 1D 3B D4 53 5D D2 FA CA D8 BF CE 02 5D
SessionID: empty
Ciphers: 
    [002F]  TLS_RSA_AES_128_SHA

这个握手部分是什么,我该如何解码?
如您所知,安装的提琴手应用程序中有两个文件(TrustCert.exe 和 makecert.exe)。
这些文件是什么,我可以在我的小应用程序中使用它们来解码数据吗?如何?

提前致谢

4

1 回答 1

9

FiddlerCore类库使用中间人方法解密 HTTPS 流量。

正如Fiddler 书中所讨论的:

HTTPS 协议在 HTTP 请求和发送这些请求的底层 TCP/IP 网络连接之间夹有加密(SSL 或 TLS)连接。由于使用了加密协议,因此可以防止网络中介或观察者查看或修改 HTTP 流量。然后您可能会惊讶地发现,如果配置得当,Fiddler 可以查看和修改 HTTPS 流量。Fiddler 通过对 HTTPS 使用“中间人”方法来实现这一点,这意味着在与客户端对话时,它会伪装成服务器,而在与服务器对话时,它会伪装成客户端。

HTTPS 协议被明确设计为通过使用数字证书来验证 HTTPS 服务器(以及可选的客户端)的身份来阻止这种攻击。当客户端从服务器接收到证书时,它会通过确定证书是否链接到客户端或操作系统信任的根证书颁发机构来验证证书本身是否可信。由于您通常在自己的计算机上运行 Fiddler,因此您可以重新配置浏览器或操作系统以信任 Fiddler 的根证书。执行此操作后,客户端应用程序在检测到流量受到 Fiddler 生成的证书保护时不会抱怨。

如果您的目标是将此功能嵌入到您的应用程序中,您应该在您的应用程序中简单地使用 FiddlerCore——这就是它存在的原因!

至于你关于“握手”的问题——握手是客户端和服务器如何就 HTTPS 通信的参数达成一致(例如使用什么密码和密钥)。你不会“解码”握手本身——FiddlerCore 会为你处理这个。

您可能会感到困惑,因为 HTTPS 流量在 HTTPCONNECT隧道内运行,并且该隧道在 FiddlerCore 中也是可见的。为确保您的 HTTPS 会话也被捕获,请务必在调用该方法FiddlerCoreStartupFlags.DecryptSSL时传递该标志。Startup此外,请确保它makecert.exe与程序的可执行文件位于同一文件夹中。

另外,请记住,在 Session 已经完成处理之后bBufferResponse设置属性是没有效果的;你应该删除它。

于 2013-08-08T19:20:06.180 回答