翼度科技»论坛 编程开发 .net 查看内容

利用fiddlercore,修改http/https请求与响应

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
fiddler抓包工具,相信很多人都用过,很好用的一款抓包工具。
 fiddlercore是官方提供给开发者调用的,用来处理所有的http/https请求,功能就如Fiddler一样强大,fiddlercore官方网站:https://www.telerik.com/fiddlercore
下面我们利用fiddlercore来修改浏览器的响应数据。
自动设置https证书,所有请求都返回“二十有为”
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Reflection;
  5. using System.Threading;
  6. using Fiddler;
  7. using System.Net.Security;
  8. using System.Security.Cryptography.X509Certificates;
  9. using System.Text;
  10. namespace Demo
  11. {
  12.     class Program
  13.     {
  14.         static Proxy oSecureEndpoint;
  15.         static string sSecureEndpointHostname = "localhost";
  16.         static int iSecureEndpointPort = 9876;
  17.         static void Main(string[] args)
  18.         {
  19.             Console.WriteLine("Starting ...");
  20.             Fiddler.CertMaker.createRootCert();
  21.             X509Certificate2 oRootCert = Fiddler.CertMaker.GetRootCertificate();
  22.             SetMachineTrust(oRootCert);
  23.             Fiddler.FiddlerApplication.oDefaultClientCertificate = oRootCert;
  24.             List<Fiddler.Session> oAllSessions = new List<Fiddler.Session>();
  25.             #region AttachEventListeners
  26.             Fiddler.FiddlerApplication.BeforeRequest += delegate(Fiddler.Session oS)
  27.             {
  28.                 oS.bBufferResponse = true;
  29.                 HTTPRequestHeaders rHeads = oS.oRequest.headers;
  30.                 //获取cookie
  31.                 string cookie = rHeads.AllValues("cookie");
  32.                 if ((oS.oRequest.pipeClient.LocalPort == iSecureEndpointPort) && (oS.hostname == sSecureEndpointHostname))
  33.                 {
  34.                     oS.utilCreateResponseAndBypassServer();
  35.                     oS.oResponse.headers.HTTPResponseStatus = "200 Ok";
  36.                     oS.oResponse["Content-Type"] = "text/html; charset=UTF-8";
  37.                     oS.oResponse["Cache-Control"] = "private, max-age=0";
  38.                     oS.utilSetResponseBody("<html><body>show!</body></html>");
  39.                 }
  40.             };
  41.             Fiddler.FiddlerApplication.BeforeResponse += new Fiddler.SessionStateHandler(FiddlerApplication_BeforeResponse);
  42.             Console.CancelKeyPress += new ConsoleCancelEventHandler(Console_CancelKeyPress);
  43.             #endregion AttachEventListeners
  44.             Fiddler.CONFIG.IgnoreServerCertErrors = true;
  45.             FiddlerApplication.Prefs.SetBoolPref("fiddler.network.streaming.abortifclientaborts", false);
  46.             FiddlerCoreStartupFlags oFCSF = FiddlerCoreStartupFlags.Default;
  47.             int iPort = 0;
  48.             Fiddler.FiddlerApplication.Startup(iPort, oFCSF);
  49.             oSecureEndpoint = FiddlerApplication.CreateProxyEndpoint(iSecureEndpointPort, true, sSecureEndpointHostname);
  50.             if (null != oSecureEndpoint)
  51.             {
  52.                 WriteCommandResponse("success!");
  53.             }
  54.             bool bDone = false;
  55.             do
  56.             {
  57.                 Console.WriteLine("\nEnter h or q:");
  58.                 Console.Write(">");
  59.                 ConsoleKeyInfo cki = Console.ReadKey();
  60.                 Console.WriteLine();
  61.                 switch (cki.KeyChar)
  62.                 {
  63.                     case 'q':
  64.                     case 'Q':
  65.                         bDone = true;
  66.                         DoQuit();
  67.                         break;
  68.                 }
  69.             } while (!bDone);
  70.         }
  71.         static void FiddlerApplication_BeforeResponse(Fiddler.Session oSession)
  72.         {
  73.             if (oSession.isHTTPS)
  74.             {
  75.                 string hostname = oSession.hostname;
  76.                 int stateCode = oSession.oResponse.headers.HTTPResponseCode;
  77.                 string pathAndQuery = oSession.PathAndQuery;
  78.                 //获取服务器返回的html
  79.                 string body = oSession.GetResponseBodyAsString();
  80.                 //修改body
  81.                 body = "二十有为";
  82.                 oSession.utilDecodeResponse();
  83.                 oSession.utilSetResponseBody(body);
  84.             }
  85.             else
  86.             {
  87.                 string body = oSession.GetResponseBodyAsString();
  88.             }
  89.         }
  90.         private static bool SetMachineTrust(X509Certificate2 oRootCert)
  91.         {
  92.             try
  93.             {
  94.                 System.Security.Cryptography.X509Certificates.X509Store certStore = new System.Security.Cryptography.X509Certificates.X509Store(StoreName.Root, StoreLocation.LocalMachine);
  95.                 certStore.Open(OpenFlags.ReadWrite);
  96.                 try
  97.                 {
  98.                     certStore.Add(oRootCert);
  99.                 }
  100.                 finally
  101.                 {
  102.                     certStore.Close();
  103.                 }
  104.                 return true;
  105.             }
  106.             catch (Exception)
  107.             {
  108.                 return false;
  109.             }
  110.         }
  111.         static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e)
  112.         {
  113.             DoQuit();
  114.         }
  115.         private static void WriteCommandResponse(string s)
  116.         {
  117.             ConsoleColor oldColor = Console.ForegroundColor;
  118.             Console.ForegroundColor = ConsoleColor.Green;
  119.             Console.WriteLine(s);
  120.             Console.ForegroundColor = oldColor;
  121.         }
  122.         private static void DoQuit()
  123.         {
  124.             WriteCommandResponse("Shutting down...");
  125.             if (null != oSecureEndpoint) oSecureEndpoint.Dispose();
  126.             Fiddler.FiddlerApplication.Shutdown();
  127.             Thread.Sleep(500);
  128.         }
  129.     }
  130. }
复制代码
 
Demo下载地址:https://pan.baidu.com/s/1_s7ywb3O6zuMto5SDH4Jng
提取码:czun

来源:https://www.cnblogs.com/youzilong202/archive/2023/02/08/17102912.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具