受欢迎的博客标签

用FiddlerCoreAPI开源项目开发截获HTTPS流量 C# Forward Proxy Server

Published

简单分析了fiddlercore自带样例的代码

https://www.cnblogs.com/realwy/p/8075705.html 

FiddlerCoreAPI开发 - 截获HTTPS流量

https://www.cnblogs.com/realwy/p/8111253.html

 

提供两个工具FiddlerCore和TitaniumProxy的实现方式以及示例代码

https://www.cnblogs.com/kuiyu/p/18209983

Fiddlercore拦截Https的原理是自己创建一个Https的证书,重新对网站的链接数据进行加密传输,所以,我们要通过代码创建一个https证书给Fiddlercore。

https的处理过程需要一个自签名证书.

 

·AllowRemoteClients():允许FiddlerCore接受来自当前机器外部的请求,例如远程计算机和设备。在允许远程客户端连接到FiddlerCore时需谨慎,因为攻击者可能通过该FiddlerCore实例代理其流量,从而绕过IPSec流量规则和内部网防火墙。

系统代理设置

RegisterAsSystemProxy()可修改本地局域网连接的代理设置,使其指向FiddlerCore在本地主机上监听的端口。

MonitorAllConnections()可修改所有系统连接的代理设置,使其指向FiddlerCore在本地主机上侦听的端口。

CaptureFTP()可修改系统中与ftp相关联的代理设置,使其指向FiddlerCore在本地主机上侦听的端口。HookUsingPACFile()可修改当前使用PAC文件配置方式进行网络连接时所使用到的代理设置。同时,FiddlerCore还提供了一个PAC文件用于调整网络连接,在服务默认PAC文件时可以通过更改“fiddler.proxy.pacfile”进行配置,默认情况下它包含了FindProxyForURL(url, host)函数体等内容:"

 

首先从官网下载FiddlerCoreAPI
https://www.telerik.com/purchase/fiddlercore

下载下来是一个安装文件,解压后有demo和FiddlerCoreAPI库,打开样例代码工程,开始分析。

 

本篇文章利用fiddlercore截取本地HTTPS的流量做分析,介绍如何使用fiddlercore截获HTTPS流量。

当时学习完样例代码后,我觉得结合注释来抓HTTPS的包应该也很简单,结果按照注释的提示修改了下代码后,还是抓不到,反复尝试了很多方法都没有解决,在google上搜了搜有人说可能是证书的问题,但也没有给出具体的解决办法,所以只能自己慢慢摸索,终于找到了一种方法,在这里和大家分享一下。

既然有可能是证书出了问题,那么我们就自己生成个证书,翻了翻帮助文档发现还真有这样的函数,叫做createRootCert(),而且函数说明中写道: “Create a self-signed certificate to use for HTTPS interception” ,看到这个说明我觉得我可能找对地方了,直接生成证书:

Fiddler.CertMaker.createRootCert();


利用GetRootCertificate()获得上述证书:

X509Certificate2 oRootCert = Fiddler.CertMaker.GetRootCertificate();//Returns the Root certificate that Fiddler uses to generate per-site certificates used for HTTPS interception.


然后把这个证书安装到受信任的根证书颁发机构:

System.Security.Cryptography.X509Certificates.X509Store certStore = new System.Security.Cryptography.X509Certificates.X509Store(StoreName.Root, StoreLocation.LocalMachine);
certStore.Open(OpenFlags.ReadWrite);
try
{
    certStore.Add(oRootCert);
}
finally
{
    certStore.Close();
}


这个证书还要赋值给变量oDefaultClientCertificate(The default certificate used for client authentication)

Fiddler.FiddlerApplication.oDefaultClientCertificate = oRootCert;


至此,问题算是解决了,后面就是按部就班的做就可以了。

bBufferResponse这个属性在BeforeRequest里设为true,可以修改响应内容:

Fiddler.FiddlerApplication.BeforeRequest += delegate(Fiddler.Session oS)
{
    oS.bBufferResponse = true;
};


BeforeResponse里面把会话存起来:

Fiddler.FiddlerApplication.BeforeResponse += delegate(Fiddler.Session oSession)
{
    if (oSession.isHTTPS)
    {

            Monitor.Enter(oAllSessions);
            oAllSessions.Add(oSession);
            Monitor.Exit(oAllSessions);

    }
};

忽略服务器证书错误:

Fiddler.CONFIG.IgnoreServerCertErrors = true;


再往后正常的Startup()和CreateProxyEndpoint()就可以了,响应的内容都保存在oAllSessions里面了,想怎么处理就怎么处理吧,在此不多赘述了,懂的人都懂。

最后附一张上某宝截获的内容:

 

注意
1.如果是火狐浏览器的话,还需要把证书导入到浏览器中。

2.别忘了Shutdown(),不然浏览器就上不了网了,上不了的话去浏览器设置里面把代理去掉就可以了。