Пример #1
0
        private FiddlerRequestChange GetRequestModificInfo()
        {
            FiddlerRequestChange requsetChange = new FiddlerRequestChange();

            requsetChange.TamperProtocol = NowProtocalMode;
            requsetChange.HttpRawRequest = null;
            //requsetChange.ActuatorStaticDataController = new FiddlerActuatorStaticDataCollectionController(StaticDataCollection);
            requsetChange.HttpFilter        = GetHttpFilter();
            requsetChange.ParameterPickList = GetParameterPick();
            requsetChange.UriModific        = new ParameterContentModific(tb_requestModific_uriModificKey.Text, tb_requestModific_uriModificValue.Text);
            if (requestRemoveHeads.ListDataView.Items.Count > 0)
            {
                requsetChange.HeadDelList = new List <string>();
                foreach (ListViewItem tempRequestRemoveHead in requestRemoveHeads.ListDataView.Items)
                {
                    requsetChange.HeadDelList.Add(tempRequestRemoveHead.Text);
                }
            }
            if (requestAddHeads.ListDataView.Items.Count > 0)
            {
                requsetChange.HeadAddList = new List <string>();
                foreach (ListViewItem tempRequestAddHead in requestAddHeads.ListDataView.Items)
                {
                    requsetChange.HeadAddList.Add(tempRequestAddHead.Text);
                }
            }
            requsetChange.BodyModific = new ParameterContentModific(tb_requestModific_body.Text, rtb_requestModific_body.Text);
            requsetChange.SetHasParameter(pb_parameterSwitch.SwitchState, StaticDataCollection);
            return(requsetChange);
        }
Пример #2
0
        /// <summary>
        /// Replace the http request in oSession with your rule (it may call by ModificSessionRequest)
        /// </summary>
        /// <param name="oSession">oSession</param>
        /// <param name="nowFiddlerRequsetChange">FiddlerRequsetChange</param>
        public static void ReplaceSessionRequest(Session oSession, FiddlerRequestChange nowFiddlerRequsetChange, Action <string> ShowError, Action <string> ShowMes)
        {
            string errMes;
            NameValueCollection nameValueCollection;
            HttpRequest         tempRequestHttpRequest;

            try
            {
                tempRequestHttpRequest = nowFiddlerRequsetChange.HttpRawRequest.UpdateHttpRequest(out errMes, out nameValueCollection);
            }
            catch (Exception ex)
            {
                ShowError(string.Format("Fail to ReplaceSessionResponse :{0}", ex.Message));
                return;
            }
            if (errMes != null)
            {
                ShowError(errMes);
            }
            if (nameValueCollection != null && nameValueCollection.Count > 0)
            {
                ShowMes(string.Format("[ParameterizationContent]:{0}", nameValueCollection.MyToFormatString()));
            }

            oSession.oRequest.headers = new HTTPRequestHeaders();
            oSession.RequestMethod    = tempRequestHttpRequest.RequestMethod;
            try
            {
                oSession.fullUrl = tempRequestHttpRequest.RequestUri;
            }
            catch (ArgumentException ex)
            {
                if (ex.Message == "URI scheme must be http, https, or ftp")
                {
                    oSession.url = tempRequestHttpRequest.RequestUri;
                }
                else
                {
                    ShowError(ex.Message);
                }
            }
            catch (Exception ex)
            {
                ShowError(ex.Message);
            }
            ((Fiddler.HTTPHeaders)(oSession.RequestHeaders)).HTTPVersion = tempRequestHttpRequest.RequestVersions;
            if (tempRequestHttpRequest.RequestHeads != null)
            {
                foreach (var tempHead in tempRequestHttpRequest.RequestHeads)
                {
                    if (tempHead.Key == "Host")
                    {
                        oSession.oRequest.headers.Remove("Host");
                    }
                    oSession.oRequest.headers.Add(tempHead.Key, tempHead.Value);
                }
            }
            oSession.requestBodyBytes = tempRequestHttpRequest.RequestEntity;
        }
Пример #3
0
        /// <summary>
        ///  Modific the websocket message with your rule
        /// </summary>
        /// <param name="oSession"></param>
        /// <param name="webSocketMessage"></param>
        /// <param name="nowFiddlerRequsetChange"></param>
        /// <param name="ShowError"></param>
        /// <param name="ShowMes"></param>
        public static void ModificWebSocketMessage(Session oSession, WebSocketMessage webSocketMessage, IFiddlerHttpTamper nowFiddlerChange, bool isRequest, Action <string> ShowError, Action <string> ShowMes)
        {
            if (nowFiddlerChange.ParameterPickList != null)
            {
                PickSessionParameter(oSession, nowFiddlerChange, ShowError, ShowMes, webSocketMessage.IsOutbound, webSocketMessage);
            }
            ContentModific payLoadModific = null;

            if (isRequest)
            {
                FiddlerRequestChange nowFiddlerRequsetChange = (FiddlerRequestChange)nowFiddlerChange;
                payLoadModific = nowFiddlerRequsetChange.BodyModific;
            }
            else
            {
                FiddlerResponseChange nowFiddlerResponseChange = (FiddlerResponseChange)nowFiddlerChange;
                payLoadModific = nowFiddlerResponseChange.BodyModific;
            }
            //Modific body
            if (payLoadModific != null && payLoadModific.ModificMode != ContentModificMode.NoChange)
            {
                if (payLoadModific.ModificMode == ContentModificMode.HexReplace)
                {
                    try
                    {
                        webSocketMessage.SetPayload(payLoadModific.GetFinalContent(webSocketMessage.PayloadAsBytes()));
                    }
                    catch (Exception ex)
                    {
                        ShowError(string.Format("error in GetFinalContent in HexReplace with [{0}]", ex.Message));
                    }
                }
                else
                {
                    string sourcePayload = webSocketMessage.PayloadAsString();
                    if (payLoadModific.ModificMode == ContentModificMode.ReCode)
                    {
                        try
                        {
                            webSocketMessage.SetPayload(payLoadModific.GetRecodeContent(sourcePayload));
                        }
                        catch (Exception ex)
                        {
                            ShowError(string.Format("error in GetRecodeContent in ReCode with [{0}]", ex.Message));
                        }
                    }
                    else
                    {
                        webSocketMessage.SetPayload(payLoadModific.GetFinalContent(sourcePayload));
                    }
                }
            }
        }
Пример #4
0
        public FiddlerRequestChange GetBase()
        {
            FiddlerRequestChange fiddlerRequestChange = new FiddlerRequestChange();

            fiddlerRequestChange.IsEnable          = IsEnable;
            fiddlerRequestChange.TamperProtocol    = TamperProtocol;
            fiddlerRequestChange.HttpFilter        = HttpFilter;
            fiddlerRequestChange.ParameterPickList = ParameterPickList;
            fiddlerRequestChange.HttpRawRequest    = HttpRawRequest;
            fiddlerRequestChange.UriModific        = UriModific;
            fiddlerRequestChange.HeadAddList       = HeadAddList;
            fiddlerRequestChange.HeadDelList       = HeadDelList;
            fiddlerRequestChange.BodyModific       = BodyModific;
            fiddlerRequestChange.Tag = Tag;
            fiddlerRequestChange.ActuatorStaticDataController = ActuatorStaticDataController;
            return(fiddlerRequestChange);
        }
Пример #5
0
        /// <summary>
        ///  Modific the websocket message with your rule
        /// </summary>
        /// <param name="oSession"></param>
        /// <param name="webSocketMessage"></param>
        /// <param name="nowFiddlerRequsetChange"></param>
        /// <param name="ShowError"></param>
        /// <param name="ShowMes"></param>
        public static void ModificWebSocketMessage(Session oSession, WebSocketMessage webSocketMessage, IFiddlerHttpTamper nowFiddlerChange, bool isRequest, Action <string> ShowError, Action <string> ShowMes)
        {
            if (nowFiddlerChange.ParameterPickList != null)
            {
                PickSessionParameter(oSession, nowFiddlerChange, ShowError, ShowMes, webSocketMessage.IsOutbound, webSocketMessage);
            }
            ParameterContentModific payLoadModific = null;

            if (isRequest)
            {
                FiddlerRequestChange nowFiddlerRequsetChange = (FiddlerRequestChange)nowFiddlerChange;
                payLoadModific = nowFiddlerRequsetChange.BodyModific;
            }
            else
            {
                FiddlerResponseChange nowFiddlerResponseChange = (FiddlerResponseChange)nowFiddlerChange;
                payLoadModific = nowFiddlerResponseChange.BodyModific;
            }
            //Modific body
            if (payLoadModific != null && payLoadModific.ModificMode != ContentModificMode.NoChange)
            {
                if (payLoadModific.ModificMode == ContentModificMode.HexReplace)
                {
                    try
                    {
                        webSocketMessage.SetPayload(payLoadModific.GetFinalContent(webSocketMessage.PayloadAsBytes()));
                    }
                    catch (Exception ex)
                    {
                        ShowError(string.Format("error in GetFinalContent in HexReplace with [{0}]", ex.Message));
                    }
                }
                else
                {
                    if (webSocketMessage.FrameType == WebSocketFrameTypes.Binary)
                    {
                        ShowError("error in GetFinalContent that WebSocketFrameTypes is Binary ,just use <hex> mode");
                    }
                    else if (webSocketMessage.FrameType == WebSocketFrameTypes.Ping || webSocketMessage.FrameType == WebSocketFrameTypes.Pong || webSocketMessage.FrameType == WebSocketFrameTypes.Close)
                    {
                        // do nothing
                    }
                    else
                    {
                        string sourcePayload = webSocketMessage.PayloadAsString();
                        if (payLoadModific.ModificMode == ContentModificMode.ReCode)
                        {
                            try
                            {
                                webSocketMessage.SetPayload(payLoadModific.GetRecodeContent(sourcePayload));
                            }
                            catch (Exception ex)
                            {
                                ShowError(string.Format("error in GetRecodeContent in ReCode with [{0}]", ex.Message));
                            }
                        }
                        else
                        {
                            string errMes;
                            NameValueCollection nameValueCollection = new NameValueCollection();

                            //webSocketMessage.SetPayload(payLoadModific.GetFinalContent(sourcePayload));
                            string tempPayload = payLoadModific.GetFinalContent(sourcePayload, nameValueCollection, out errMes);
                            if (errMes != null)
                            {
                                ShowError(string.Format("error in GetFinalContent in PayLoadModific that [{0}]", errMes));
                            }
                            if (tempPayload != sourcePayload) //非标准协议的实现,或没有实现的压缩会导致PayloadAsString()使数据不可逆
                            {
                                webSocketMessage.SetPayload(tempPayload);
                            }

                            if (nameValueCollection != null && nameValueCollection.Count > 0)
                            {
                                ShowMes(string.Format("[ParameterizationContent]:{0}", nameValueCollection.MyToFormatString()));
                            }
                        }
                    }
                }
            }
        }
Пример #6
0
 /// <summary>
 /// Modific the http request in oSession with your rule
 /// </summary>
 /// <param name="oSession">oSession</param>
 /// <param name="nowFiddlerRequsetChange">FiddlerRequsetChange</param>
 public static void ModificSessionRequest(Session oSession, FiddlerRequestChange nowFiddlerRequsetChange, Action <string> ShowError, Action <string> ShowMes)
 {
     if (nowFiddlerRequsetChange.ParameterPickList != null)
     {
         PickSessionParameter(oSession, nowFiddlerRequsetChange, ShowError, ShowMes, true);
     }
     if (nowFiddlerRequsetChange.IsRawReplace)
     {
         ReplaceSessionRequest(oSession, nowFiddlerRequsetChange, ShowError, ShowMes);
     }
     else
     {
         string errMes;
         NameValueCollection nameValueCollection = new NameValueCollection();
         //Modific uri
         if (nowFiddlerRequsetChange.UriModific != null && nowFiddlerRequsetChange.UriModific.ModificMode != ContentModificMode.NoChange)
         {
             oSession.fullUrl = nowFiddlerRequsetChange.UriModific.GetFinalContent(oSession.fullUrl, nameValueCollection, out errMes);
             if (errMes != null)
             {
                 ShowError(string.Format("error in GetFinalContent in UriModific that [{0}]", errMes));
             }
         }
         //Modific body
         if (nowFiddlerRequsetChange.BodyModific != null && nowFiddlerRequsetChange.BodyModific.ModificMode != ContentModificMode.NoChange)
         {
             if (nowFiddlerRequsetChange.BodyModific.ModificMode == ContentModificMode.HexReplace)
             {
                 try
                 {
                     oSession.RequestBody = nowFiddlerRequsetChange.BodyModific.GetFinalContent(oSession.requestBodyBytes);
                 }
                 catch (Exception ex)
                 {
                     ShowError(string.Format("error in GetFinalContent in HexReplace with [{0}]", ex.Message));
                 }
             }
             else
             {
                 string sourceRequestBody = null;
                 try  //GetRequestBodyAsString may throw exception
                 {
                     //oSession.utilDecodeRequest();
                     sourceRequestBody = oSession.GetRequestBodyAsString();
                 }
                 catch (Exception ex)
                 {
                     ShowError(string.Format("error in GetRequestBodyAsString [{0}]", ex.Message));
                     oSession.utilDecodeRequest();
                     sourceRequestBody = oSession.GetRequestBodyEncoding().GetString(oSession.requestBodyBytes);
                 }
                 finally
                 {
                     if (nowFiddlerRequsetChange.BodyModific.ModificMode == ContentModificMode.ReCode)
                     {
                         try
                         {
                             oSession.RequestBody = nowFiddlerRequsetChange.BodyModific.GetRecodeContent(sourceRequestBody);
                         }
                         catch (Exception ex)
                         {
                             ShowError(string.Format("error in GetRecodeContent in ReCode with [{0}]", ex.Message));
                         }
                     }
                     else
                     {
                         //oSession.requestBodyBytes = oSession.GetRequestBodyEncoding().GetBytes(nowFiddlerRequsetChange.BodyModific.GetFinalContent(sourceRequestBody)); // requestBodyBytes直接修改内部成员
                         //oSession.ResponseBody = oSession.GetRequestBodyEncoding().GetBytes(nowFiddlerRequsetChange.BodyModific.GetFinalContent(sourceRequestBody)); //ResponseBody修改内部成员 更新Content-Length ,同时删除编码头,适用于hex数据
                         //Session.RequestBody : Gets or Sets the HTTP Request body bytes. Setter adjusts Content-Length header, and removes Transfer-Encoding and Content-Encoding headers. Setter DOES NOT CLONE the passed array. Setter will throw if the Request object does not exist for some reason. Use utilSetRequestBody(sStr) to ensure proper character encoding if you need to use a string.
                         //oSession.utilSetRequestBody(nowFiddlerRequsetChange.BodyModific.GetFinalContent(sourceRequestBody));  //utilSetRequestBody 虽然会自动更新Content-Length 但是会强制使用utf8 ,适用于字符串
                         string tempRequestBody = nowFiddlerRequsetChange.BodyModific.GetFinalContent(sourceRequestBody, nameValueCollection, out errMes);
                         if (errMes != null)
                         {
                             ShowError(string.Format("error in GetFinalContent in BodyModific that [{0}]", errMes));
                         }
                         if (tempRequestBody != sourceRequestBody)
                         {
                             oSession.utilSetRequestBody(tempRequestBody);
                         }
                     }
                 }
             }
         }
         //Modific heads
         if (nowFiddlerRequsetChange.HeadDelList != null && nowFiddlerRequsetChange.HeadDelList.Count > 0)
         {
             foreach (var tempDelHead in nowFiddlerRequsetChange.HeadDelList)
             {
                 oSession.RequestHeaders.Remove(tempDelHead);
             }
         }
         if (nowFiddlerRequsetChange.HeadAddList != null && nowFiddlerRequsetChange.HeadAddList.Count > 0)
         {
             foreach (var tempAddHead in nowFiddlerRequsetChange.HeadAddList)
             {
                 if (tempAddHead.Contains(": "))
                 {
                     oSession.RequestHeaders.Add(tempAddHead.Remove(tempAddHead.IndexOf(": ")), tempAddHead.Substring(tempAddHead.IndexOf(": ") + 2));
                 }
                 else
                 {
                     ShowError(string.Format("error to deal add head string with [{0}]", tempAddHead));
                 }
             }
         }
         //other action
         if (nameValueCollection != null && nameValueCollection.Count > 0)
         {
             ShowMes(string.Format("[ParameterizationContent]:{0}", nameValueCollection.MyToFormatString()));
         }
     }
 }
Пример #7
0
        public void AutoTamperRequestBefore(Session oSession)
        {
            //if (oSession.HTTPMethodIs("CONNECT") && oSession.HostnameIs("api.map.baidu.com"))
            //{
            //    oSession["x-OverrideSslProtocols"] = "ssl3.0";
            //}
            //oSession.oRequest["AddOrigin"] = "from lijie PC";
            if (!isOnLoad)
            {
                return;
            }
            if (myFreeHttpWindow.IsRequestRuleEnable)
            {
                //IsRequestRuleEnable is more efficient then string comparison (so if not IsRequestRuleEnable the string comparison will not execute)
                if (isSkipUiHide && oSession["ui-hide"] == "true")
                {
                    return;
                }
                if (myFreeHttpWindow.ModificSettingInfo.IsSkipConnectTunnels && oSession.RequestMethod == "CONNECT")
                {
                    return;
                }
                List <IFiddlerHttpTamper> matchItems = FiddlerSessionHelper.FindMatchTanperRule(oSession, myFreeHttpWindow.FiddlerRequestChangeList, true);
                if (matchItems != null && matchItems.Count > 0)
                {
                    foreach (var matchItem in matchItems)
                    {
                        FiddlerRequestChange nowFiddlerRequsetChange = ((FiddlerRequestChange)matchItem);
                        ListViewItem         tempListViewItem        = myFreeHttpWindow.FindListViewItemFromRule(matchItem);
                        FreeHttpWindow.MarkMatchRule(tempListViewItem);
                        MarkSession(oSession);
                        ShowMes(string.Format("macth the [requst rule {0}] with {1}", tempListViewItem.SubItems[0].Text, oSession.fullUrl));
                        FiddlerSessionTamper.ModificSessionRequest(oSession, nowFiddlerRequsetChange, ShowError, ShowMes);
                        if (myFreeHttpWindow.ModificSettingInfo.IsOnlyMatchFistTamperRule)
                        {
                            break;
                        }
                    }
                }
            }

            if (myFreeHttpWindow.IsResponseRuleEnable)
            {
                if (myFreeHttpWindow.ModificSettingInfo.IsSkipConnectTunnels && oSession.RequestMethod == "CONNECT")
                {
                    return;
                }
                List <IFiddlerHttpTamper> matchItems = FiddlerSessionHelper.FindMatchTanperRule(oSession, myFreeHttpWindow.FiddlerResponseChangeList, false);
                if (matchItems != null && matchItems.Count > 0)
                {
                    oSession.bBufferResponse = true;//  if any response rule may match the Session, we should set bBufferResponse true (When streaming is enabled for a response, each block of data read from the server is immediately passed to the client application. )
                    foreach (var matchItem in matchItems)
                    {
                        FiddlerResponseChange nowFiddlerResponseChange = ((FiddlerResponseChange)matchItem);
                        ListViewItem          tempListViewItem         = myFreeHttpWindow.FindListViewItemFromRule(matchItem);
                        if (nowFiddlerResponseChange.IsIsDirectRespons)
                        {
                            FreeHttpWindow.MarkMatchRule(tempListViewItem);
                            MarkSession(oSession);
                            ShowMes(string.Format("macth the [reponse rule {0}] with {1}", tempListViewItem.SubItems[0].Text, oSession.fullUrl));
                            FiddlerSessionTamper.ReplaceSessionResponse(oSession, nowFiddlerResponseChange, ShowError, ShowMes);
                            //oSession.state = SessionStates.Done;
                            if (myFreeHttpWindow.ModificSettingInfo.IsOnlyMatchFistTamperRule)
                            {
                                break;
                            }
                        }
                    }
                }
            }
        }
Пример #8
0
        private void LoadRuleInfo(IFiddlerHttpTamper ruleInfo)
        {
            Action <FiddlerRequestChange> GetFiddlerRequestChangeAddition = (nowFiddlerRequestChange) =>
            {
                if ((nowFiddlerRequestChange.ParameterPickList != null && nowFiddlerRequestChange.ParameterPickList.Count > 0) || nowFiddlerRequestChange.IsHasParameter)
                {
                    rtb_ruleInfo.AddRtbStr("Addition ", Color.Red, true, new Font(FontFamily.GenericMonospace, 14));
                    if (nowFiddlerRequestChange.IsHasParameter)
                    {
                        rtb_ruleInfo.AddRtbStr("Has Parameter: ", Color.Blue, false);
                        rtb_ruleInfo.AppendText("true");
                        rtb_ruleInfo.AppendText("\r\n");
                    }
                    if (nowFiddlerRequestChange.ParameterPickList != null && nowFiddlerRequestChange.ParameterPickList.Count > 0)
                    {
                        foreach (var tempRequest in nowFiddlerRequestChange.ParameterPickList)
                        {
                            rtb_ruleInfo.AddRtbStr("Request Parameter Pick: ", Color.Blue, false);
                            rtb_ruleInfo.AppendText(tempRequest.ToString());
                            rtb_ruleInfo.AppendText("\r\n");
                        }
                    }
                }
            };
            Action <FiddlerResponseChange> GetFiddlerResponseChangeAddition = (nowFiddlerResponseChange) =>
            {
                if ((nowFiddlerResponseChange.ParameterPickList != null && nowFiddlerResponseChange.ParameterPickList.Count > 0) || nowFiddlerResponseChange.IsHasParameter || nowFiddlerResponseChange.ResponseLatency > 0)
                {
                    rtb_ruleInfo.AddRtbStr("Addition ", Color.Red, true, new Font(FontFamily.GenericMonospace, 14));
                    if (nowFiddlerResponseChange.IsHasParameter)
                    {
                        rtb_ruleInfo.AddRtbStr("Has Parameter: ", Color.Blue, false);
                        rtb_ruleInfo.AppendText("true");
                        rtb_ruleInfo.AppendText("\r\n");
                    }
                    if (nowFiddlerResponseChange.ResponseLatency > 0)
                    {
                        rtb_ruleInfo.AddRtbStr("ResponseLatency: ", Color.Blue, false);
                        rtb_ruleInfo.AppendText(nowFiddlerResponseChange.ResponseLatency + "ms");
                        rtb_ruleInfo.AppendText("\r\n");
                    }
                    if (nowFiddlerResponseChange.ParameterPickList != null && nowFiddlerResponseChange.ParameterPickList.Count > 0)
                    {
                        foreach (var tempResponse in nowFiddlerResponseChange.ParameterPickList)
                        {
                            rtb_ruleInfo.AddRtbStr("Response Parameter Pick: ", Color.Blue, false);
                            rtb_ruleInfo.AppendText(tempResponse.ToString());
                            rtb_ruleInfo.AppendText("\r\n");
                        }
                    }
                }
            };

            isLoadRuleComplete = false;
            MyControlHelper.SetControlFreeze(rtb_ruleInfo);
            MyControlHelper.SetControlFreeze(this);
            pb_ruleIcon.Image = InnerListViewItem.ImageList.Images[InnerListViewItem.ImageIndex];
            rtb_ruleInfo.Clear();
            rtb_ruleInfo.AddRtbStr("Filter ", Color.Red, true, new Font(FontFamily.GenericMonospace, 14));
            if (ruleInfo.HttpFilter.UriMatch != null)
            {
                rtb_ruleInfo.AddRtbStr("Uri: ", Color.Blue, false);
                rtb_ruleInfo.AppendText(ruleInfo.HttpFilter.UriMatch.ToString());
                rtb_ruleInfo.AppendText("\r\n");
            }
            if (ruleInfo.HttpFilter.HeadMatch != null && ruleInfo.HttpFilter.HeadMatch.HeadsFilter.Count > 0)
            {
                foreach (var tempHeaderFilter in ruleInfo.HttpFilter.HeadMatch.HeadsFilter)
                {
                    rtb_ruleInfo.AddRtbStr("Header: ", Color.Blue, false);
                    rtb_ruleInfo.AppendText(string.Format("{0} [contain] {1}", tempHeaderFilter.Key, tempHeaderFilter.Value));
                    rtb_ruleInfo.AppendText("\r\n");
                }
            }
            if (ruleInfo.HttpFilter.BodyMatch != null)
            {
                rtb_ruleInfo.AddRtbStr("Entity: ", Color.Blue, false);
                rtb_ruleInfo.AppendText(ruleInfo.HttpFilter.BodyMatch.ToString());
                rtb_ruleInfo.AppendText("\r\n");
            }
            rtb_ruleInfo.AddRtbStr("Action ", Color.Red, true, new Font(FontFamily.GenericMonospace, 14));

            switch (ruleInfo.TamperProtocol)
            {
            case TamperProtocalType.Http:
                if (ruleInfo is FiddlerRequestChange)
                {
                    lb_ruleId.Text = string.Format("Http Request Tamper Rule {0}", InnerListViewItem.SubItems[0].Text);

                    FiddlerRequestChange nowFiddlerRequestChange = ruleInfo as FiddlerRequestChange;
                    if (nowFiddlerRequestChange.IsRawReplace)
                    {
                        rtb_ruleInfo.AddRtbStr("Request Replace", Color.Blue, true);
                        rtb_ruleInfo.AppendText(nowFiddlerRequestChange.HttpRawRequest.OriginSting);
                        rtb_ruleInfo.AppendText("\r\n");
                    }
                    else
                    {
                        if (nowFiddlerRequestChange.UriModific != null && nowFiddlerRequestChange.UriModific.ModificMode != HttpHelper.ContentModificMode.NoChange)
                        {
                            rtb_ruleInfo.AddRtbStr("Request Uri Modific: ", Color.Blue, false);
                            rtb_ruleInfo.AppendText(nowFiddlerRequestChange.UriModific.ToString());
                            rtb_ruleInfo.AppendText("\r\n");
                        }
                        if (nowFiddlerRequestChange.HeadDelList != null && nowFiddlerRequestChange.HeadDelList.Count > 0)
                        {
                            foreach (var tempHeaderDel in nowFiddlerRequestChange.HeadDelList)
                            {
                                rtb_ruleInfo.AddRtbStr("Request Head Delete: ", Color.Blue, false);
                                rtb_ruleInfo.AppendText(tempHeaderDel);
                            }
                        }
                        if (nowFiddlerRequestChange.HeadAddList != null && nowFiddlerRequestChange.HeadAddList.Count > 0)
                        {
                            foreach (var tempHeaderAdd in nowFiddlerRequestChange.HeadAddList)
                            {
                                rtb_ruleInfo.AddRtbStr("Request Head Add: ", Color.Blue, false);
                                rtb_ruleInfo.AppendText(tempHeaderAdd);
                                rtb_ruleInfo.AppendText("\r\n");
                            }
                        }
                        if (nowFiddlerRequestChange.BodyModific != null && nowFiddlerRequestChange.BodyModific.ModificMode != HttpHelper.ContentModificMode.NoChange)
                        {
                            rtb_ruleInfo.AddRtbStr("Request Entity Modific: ", Color.Blue, false);
                            rtb_ruleInfo.AppendText(nowFiddlerRequestChange.BodyModific.ToString());
                            rtb_ruleInfo.AppendText("\r\n");
                        }
                    }
                    GetFiddlerRequestChangeAddition(nowFiddlerRequestChange);
                }
                else if (ruleInfo is FiddlerResponseChange)
                {
                    lb_ruleId.Text = string.Format("Http Response Tamper Rule {0}", InnerListViewItem.SubItems[0].Text);

                    FiddlerResponseChange nowFiddlerResponseChange = ruleInfo as FiddlerResponseChange;
                    if (nowFiddlerResponseChange.IsRawReplace)
                    {
                        rtb_ruleInfo.AddRtbStr("Request Replace", Color.Blue, true);
                        rtb_ruleInfo.AppendText(nowFiddlerResponseChange.HttpRawResponse.OriginSting);
                        rtb_ruleInfo.AppendText("\r\n");
                    }
                    else
                    {
                        if (nowFiddlerResponseChange.HeadDelList != null && nowFiddlerResponseChange.HeadDelList.Count > 0)
                        {
                            foreach (var tempHeaderDel in nowFiddlerResponseChange.HeadDelList)
                            {
                                rtb_ruleInfo.AddRtbStr("Response Head Delete: ", Color.Blue, false);
                                rtb_ruleInfo.AppendText(tempHeaderDel);
                                rtb_ruleInfo.AppendText("\r\n");
                            }
                        }
                        if (nowFiddlerResponseChange.HeadAddList != null && nowFiddlerResponseChange.HeadAddList.Count > 0)
                        {
                            foreach (var tempHeaderAdd in nowFiddlerResponseChange.HeadAddList)
                            {
                                rtb_ruleInfo.AddRtbStr("Response Head Add: ", Color.Blue, false);
                                rtb_ruleInfo.AppendText(tempHeaderAdd);
                                rtb_ruleInfo.AppendText("\r\n");
                            }
                        }
                        if (nowFiddlerResponseChange.BodyModific != null && nowFiddlerResponseChange.BodyModific.ModificMode != HttpHelper.ContentModificMode.NoChange)
                        {
                            rtb_ruleInfo.AddRtbStr("Response Entity Modific: ", Color.Blue, false);
                            rtb_ruleInfo.AppendText(nowFiddlerResponseChange.BodyModific.ToString());
                            rtb_ruleInfo.AppendText("\r\n");
                        }
                    }

                    GetFiddlerResponseChangeAddition(nowFiddlerResponseChange);
                }
                break;

            case TamperProtocalType.WebSocket:
                if (ruleInfo is FiddlerRequestChange)
                {
                    lb_ruleId.Text = string.Format("Websocket Send Tamper Rule {0}", InnerListViewItem.SubItems[0].Text);

                    FiddlerRequestChange nowFiddlerWebSocketRequestChange = ruleInfo as FiddlerRequestChange;
                    if (nowFiddlerWebSocketRequestChange.BodyModific != null && nowFiddlerWebSocketRequestChange.BodyModific.ModificMode != HttpHelper.ContentModificMode.NoChange)
                    {
                        rtb_ruleInfo.AddRtbStr("Socket Payload Modific: ", Color.Blue, false);
                        rtb_ruleInfo.AppendText(nowFiddlerWebSocketRequestChange.BodyModific.ToString());
                        rtb_ruleInfo.AppendText("\r\n");
                    }
                    GetFiddlerRequestChangeAddition(nowFiddlerWebSocketRequestChange);
                }
                else if (ruleInfo is FiddlerResponseChange)
                {
                    lb_ruleId.Text = string.Format("Websocket Receive Tamper Rule {0}", InnerListViewItem.SubItems[0].Text);

                    FiddlerResponseChange nowFiddlerWebSocketResponseChange = ruleInfo as FiddlerResponseChange;
                    if (nowFiddlerWebSocketResponseChange.BodyModific != null && nowFiddlerWebSocketResponseChange.BodyModific.ModificMode != HttpHelper.ContentModificMode.NoChange)
                    {
                        rtb_ruleInfo.AddRtbStr("Socket Payload Modific: ", Color.Blue, false);
                        rtb_ruleInfo.AppendText(nowFiddlerWebSocketResponseChange.BodyModific.ToString());
                        rtb_ruleInfo.AppendText("\r\n");
                    }
                    GetFiddlerResponseChangeAddition(nowFiddlerWebSocketResponseChange);
                }

                break;

            default:
                break;
            }
            if (!string.IsNullOrEmpty(ruleInfo.HttpFilter.Name))
            {
                lb_ruleId.Text += string.Format(" ({0})", ruleInfo.HttpFilter.Name);
            }
            isLoadRuleComplete = true;
            MyControlHelper.SetControlUnfreeze(rtb_ruleInfo);
            MyControlHelper.SetControlUnfreeze(this);
            if (rtb_ruleInfo.Rtf.EndsWith("\r\n"))
            {
                rtb_ruleInfo.Rtf = rtb_ruleInfo.Rtf.Remove(rtb_ruleInfo.Rtf.Length - 2, 2);
            }
        }
Пример #9
0
        private void SetRequestModificInfo(FiddlerRequestChange fiddlerRequsetChange)
        {
            SetHttpMatch(fiddlerRequsetChange.HttpFilter);
            SetHttpParameterPick(fiddlerRequsetChange.ParameterPickList);
            pb_parameterSwitch.SwitchState = fiddlerRequsetChange.IsHasParameter;
            if (fiddlerRequsetChange.HttpRawRequest == null)
            {
                tabControl_Modific.SelectedTab = tabPage_requestModific;
                if (fiddlerRequsetChange.UriModific != null && fiddlerRequsetChange.UriModific.ModificMode != ContentModificMode.NoChange)
                {
                    tb_requestModific_uriModificKey.Text   = fiddlerRequsetChange.UriModific.ParameterTargetKey.ToString();
                    tb_requestModific_uriModificValue.Text = fiddlerRequsetChange.UriModific.ParameterReplaceContent.ToString();
                }
                if (fiddlerRequsetChange.HeadDelList != null)
                {
                    foreach (string tempHead in fiddlerRequsetChange.HeadDelList)
                    {
                        requestRemoveHeads.ListDataView.Items.Add(tempHead);
                    }
                }
                if (fiddlerRequsetChange.HeadAddList != null)
                {
                    foreach (string tempHead in fiddlerRequsetChange.HeadAddList)
                    {
                        requestAddHeads.ListDataView.Items.Add(tempHead);
                    }
                }
                if (fiddlerRequsetChange.BodyModific != null && fiddlerRequsetChange.BodyModific.ModificMode != ContentModificMode.NoChange)
                {
                    tb_requestModific_body.Text = fiddlerRequsetChange.BodyModific.ParameterTargetKey.ToString();
                    if (!string.IsNullOrEmpty(fiddlerRequsetChange.BodyModific.ParameterReplaceContent.ToString()))
                    {
                        rtb_requestModific_body.AppendText(fiddlerRequsetChange.BodyModific.ParameterReplaceContent.ToString());
                    }
                }
            }
            else
            {
                tabControl_Modific.SelectedTab = tabPage_requestReplace;
                if (IsRequestReplaceRawMode)
                {
                    pb_requestReplace_changeMode_Click(null, null);
                }
                cb_editRequestMethod.Text  = fiddlerRequsetChange.HttpRawRequest.RequestMethod;
                tb_requestReplace_uri.Text = fiddlerRequsetChange.HttpRawRequest.RequestUri;
                cb_editRequestEdition.Text = fiddlerRequsetChange.HttpRawRequest.RequestVersions;
                if (fiddlerRequsetChange.HttpRawRequest.RequestHeads != null)
                {
                    foreach (MyKeyValuePair <string, string> tempHead in fiddlerRequsetChange.HttpRawRequest.RequestHeads)
                    {
                        elv_requsetReplace.ListDataView.Items.Add(string.Format("{0}: {1}", tempHead.Key, tempHead.Value));
                    }
                }
                if (fiddlerRequsetChange.HttpRawRequest.RequestEntity != null && fiddlerRequsetChange.HttpRawRequest.RequestEntity.Length > 0)
                {
                    //if (fiddlerRequsetChange.HttpRawRequest.ParameterizationContent.hasParameter && fiddlerRequsetChange.HttpRawRequest.OriginSting != null)
                    //{
                    //    HttpRequest tempRequest = HttpRequest.GetHttpRequest(fiddlerRequsetChange.HttpRawRequest.OriginSting);
                    //    if(tempRequest.RequestEntity!=null)
                    //    {
                    //        rtb_requsetReplace_body.AppendText(Encoding.UTF8.GetString(tempRequest.RequestEntity));
                    //    }
                    //}


                    //rtb_requsetReplace_body.AppendText(Encoding.UTF8.GetString(fiddlerRequsetChange.HttpRawRequest.RequestEntity));//文件实体无法还原原始值
                    Encoding tempEncoding = Encoding.GetEncoding("utf-8", new EncoderExceptionFallback(), new DecoderExceptionFallback());
                    string   tempStr      = null;
                    try
                    {
                        tempStr = tempEncoding.GetString(fiddlerRequsetChange.HttpRawRequest.RequestEntity);
                    }
                    catch (ArgumentException)
                    {
                        String tempOriginSting = fiddlerRequsetChange.HttpRawRequest.OriginSting;
                        if (!string.IsNullOrEmpty(tempOriginSting))
                        {
                            int startIndex = tempOriginSting.IndexOf("\r\n\r\n");
                            if (startIndex > 0) //can not is 0 (must have request line)
                            {
                                tempStr = tempOriginSting.Remove(0, startIndex + 4);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        PutError(string.Format("analysis request replace rule error {0}", ex.Message));
                    }
                    finally
                    {
                        tempStr = tempStr ?? "analysis request replace rule error in request body , pleace reedit";
                    }
                    rtb_requsetReplace_body.AppendText(tempStr);
                }
                if (fiddlerRequsetChange.HttpRawRequest.OriginSting != null)
                {
                    rtb_requestRaw.AppendText(fiddlerRequsetChange.HttpRawRequest.OriginSting);
                }
                // if fiddlerRequsetChange is RawRequest ,just use HttpRawRequest hasParameter
                pb_parameterSwitch.SwitchState = fiddlerRequsetChange.HttpRawRequest.ParameterizationContent.hasParameter;
            }
        }
Пример #10
0
        private FiddlerRequestChange GetRequestReplaceInfo()
        {
            FiddlerRequestChange requsetReplace = new FiddlerRequestChange();

            requsetReplace.TamperProtocol    = NowProtocalMode;
            requsetReplace.HttpFilter        = GetHttpFilter();
            requsetReplace.ParameterPickList = GetParameterPick();
            if (IsRequestReplaceRawMode)
            {
                requsetReplace.HttpRawRequest = ParameterHttpRequest.GetHttpRequest(rtb_requestRaw.Text.Replace("\n", "\r\n"), pb_parameterSwitch.SwitchState, StaticDataCollection);
            }
            else
            {
                requsetReplace.HttpRawRequest = new ParameterHttpRequest();
                //requsetReplace.HttpRawRequest.RequestMethod = cb_editRequestMethod.Text;
                //requsetReplace.HttpRawRequest.RequestUri = tb_requestReplace_uri.Text;
                //requsetReplace.HttpRawRequest.RequestVersions = cb_editRequestEdition.Text;
                //Set RequestLine will updata RequestMethod/RequestUri/RequestVersions
                requsetReplace.HttpRawRequest.RequestLine = string.Format("{0} {1} {2}", cb_editRequestMethod.Text, tb_requestReplace_uri.Text, cb_editRequestEdition.Text);
                StringBuilder requestSb = new StringBuilder(requsetReplace.HttpRawRequest.RequestLine);
                requestSb.Append("\r\n");
                requsetReplace.HttpRawRequest.RequestHeads = new List <MyKeyValuePair <string, string> >();
                if (elv_requsetReplace.ListDataView.Items.Count > 0)
                {
                    foreach (ListViewItem item in elv_requsetReplace.ListDataView.Items)
                    {
                        string headStr = item.Text;
                        if (headStr.Contains(": "))
                        {
                            string key   = headStr.Remove(headStr.IndexOf(": "));
                            string value = headStr.Substring(headStr.IndexOf(": ") + 2);
                            requsetReplace.HttpRawRequest.RequestHeads.Add(new MyKeyValuePair <string, string>(key, value));
                        }
                        else
                        {
                            throw new Exception(string.Format("find eror head with {0}", headStr));
                        }
                        requestSb.AppendLine(headStr);
                    }
                    requestSb.Append("\r\n");
                }

                string tempRequstBody = rtb_requsetReplace_body.Text;
                requestSb.Append(tempRequstBody); //HttpEntity not need end with new line
                if (tempRequstBody.StartsWith("<<replace file path>>"))
                {
                    string tempPath = tempRequstBody.Remove(0, 21);
                    if (File.Exists(tempPath))
                    {
                        using (FileStream fileStream = new FileStream(tempPath, FileMode.Open, FileAccess.Read, FileShare.Read))
                        {
                            if (fileStream.Length > int.MaxValue)
                            {
                                throw new Exception(string.Format("your file path in  ResponseEntity is too  large with {0}", tempPath));
                            }
                            requsetReplace.HttpRawRequest.RequestEntity = new byte[fileStream.Length];
                            fileStream.Position = 0;
                            fileStream.Read(requsetReplace.HttpRawRequest.RequestEntity, 0, requsetReplace.HttpRawRequest.RequestEntity.Length);
                        }
                    }
                    else
                    {
                        throw new Exception(string.Format("your file path in  ResponseEntity is not Exists with {0}", tempPath));
                    }
                }
                else
                {
                    requsetReplace.HttpRawRequest.RequestEntity = Encoding.UTF8.GetBytes(tempRequstBody);
                }
                requsetReplace.HttpRawRequest.ParameterizationContent = new AutoTest.ParameterizationContent.CaseParameterizationContent(requestSb.ToString(), pb_parameterSwitch.SwitchState);
                requsetReplace.HttpRawRequest.OriginSting             = requsetReplace.HttpRawRequest.ParameterizationContent.GetTargetContentData();
                requsetReplace.SetHasParameter(pb_parameterSwitch.SwitchState, StaticDataCollection);
            }

            if (antoContentLengthToolStripMenuItem.Checked)
            {
                requsetReplace.HttpRawRequest.SetAutoContentLength();
            }
            return(requsetReplace);
        }
Пример #11
0
        public static async Task <RuleDetails> GetRemoteRuleAsync(string token, string apiUrl = _getRuleUrl)
        {
            HttpResponseMessage responseMessage = await httpClient.GetAsync(string.Format(apiUrl, ConfigurationData.BaseUrl, token));

            if (responseMessage.StatusCode != System.Net.HttpStatusCode.OK)
            {
                return(null);
            }
            RuleDetails ruleDetails = MyJsonHelper.JsonDataContractJsonSerializer.JsonStringToObject <RuleDetails>(await responseMessage.Content.ReadAsStringAsync());

            if (ruleDetails == null)
            {
                return(null);
            }

            string nowVersion = UserComputerInfo.GetRuleVersion();

            if (ruleDetails.RuleStaticDataCell != null)
            {
                //if (ruleDetails.RuleStaticData.RuleVersion == nowVersion)
                ruleDetails.StaticDataCollection = MyJsonHelper.JsonDataContractJsonSerializer.JsonStringToObject <ActuatorStaticDataCollection>(ruleDetails.RuleStaticDataCell.RuleContent);
            }

            if (ruleDetails.RuleGroupCell != null)
            {
                //if (ruleDetails.RuleStaticData.RuleVersion == nowVersion)
                ruleDetails.RuleGroup = MyJsonHelper.JsonDataContractJsonSerializer.JsonStringToObject <FiddlerRuleGroup>(ruleDetails.RuleGroupCell.RuleContent);
            }

            if (ruleDetails.RequestRuleCells != null || ruleDetails.ResponseRuleCells != null)
            {
                ruleDetails.ModificHttpRuleCollection = new FiddlerModificHttpRuleCollection();
                ruleDetails.ModificHttpRuleCollection.RequestRuleList  = new List <FiddlerRequestChange>();
                ruleDetails.ModificHttpRuleCollection.ResponseRuleList = new List <FiddlerResponseChange>();
                //fill RequestRule
                foreach (var cell in ruleDetails.RequestRuleCells)
                {
                    if (cell.RuleVersion != nowVersion)
                    {
                        ruleDetails.ModificHttpRuleCollection.RequestRuleList.Add(new FiddlerRequestChange()
                        {
                            IsEnable   = false,
                            HttpFilter = new FiddlerHttpFilter()
                            {
                                Name     = "unmatch rule version",
                                UriMatch = new FiddlerUriMatch()
                                {
                                    MatchMode = FiddlerUriMatchMode.Is,
                                    MatchUri  = "unmatch rule version"
                                }
                            }
                        });
                    }
                    else
                    {
                        FiddlerRequestChange tmepRequestChange = MyJsonHelper.JsonDataContractJsonSerializer.JsonStringToObject <FiddlerRequestChange>(cell.RuleContent);
                        ruleDetails.ModificHttpRuleCollection.RequestRuleList.Add(tmepRequestChange ?? new FiddlerRequestChange()
                        {
                            IsEnable   = false,
                            HttpFilter = new FiddlerHttpFilter()
                            {
                                Name     = "can not parse this rule",
                                UriMatch = new FiddlerUriMatch()
                                {
                                    MatchMode = FiddlerUriMatchMode.Is,
                                    MatchUri  = "can not parse this rule"
                                }
                            }
                        });
                    }
                }
                //fill ResponseRule
                foreach (var cell in ruleDetails.ResponseRuleCells)
                {
                    if (cell.RuleVersion != nowVersion)
                    {
                        ruleDetails.ModificHttpRuleCollection.ResponseRuleList.Add(new FiddlerResponseChange()
                        {
                            IsEnable   = false,
                            HttpFilter = new FiddlerHttpFilter()
                            {
                                Name     = "unmatch rule version",
                                UriMatch = new FiddlerUriMatch()
                                {
                                    MatchMode = FiddlerUriMatchMode.Is,
                                    MatchUri  = "unmatch rule version"
                                }
                            }
                        });
                    }
                    else
                    {
                        FiddlerResponseChange tmepRequestChange = MyJsonHelper.JsonDataContractJsonSerializer.JsonStringToObject <FiddlerResponseChange>(cell.RuleContent);
                        ruleDetails.ModificHttpRuleCollection.ResponseRuleList.Add(tmepRequestChange ?? new FiddlerResponseChange()
                        {
                            IsEnable   = false,
                            HttpFilter = new FiddlerHttpFilter()
                            {
                                Name     = "can not parse this rule",
                                UriMatch = new FiddlerUriMatch()
                                {
                                    MatchMode = FiddlerUriMatchMode.Is,
                                    MatchUri  = "can not parse this rule"
                                }
                            }
                        });
                    }
                }
            }

            return(ruleDetails);
        }