示例#1
0
        public new bool Equals(object targetFiddlerHttpFilter)
        {
            IFiddlerHttpTamper fiddlerHttpTamper = targetFiddlerHttpFilter as IFiddlerHttpTamper;

            if (fiddlerHttpTamper == null)
            {
                return(false);
            }
            return(this.Equals(fiddlerHttpTamper.HttpFilter));
        }
示例#2
0
 public void RefreshRuleInfo()
 {
     if (InnerListViewItem == null || InnerListViewItem.ListView == null)
     {
         Close();
         return;
     }
     if (InnerListViewItem.Tag != null && InnerListViewItem.Tag is IFiddlerHttpTamper)
     {
         IFiddlerHttpTamper nowRule = InnerListViewItem.Tag as IFiddlerHttpTamper;
         LoadRuleInfo(nowRule);
     }
 }
示例#3
0
 private void UpdataRuleToListView(ListViewItem yourListViewItem, IFiddlerHttpTamper yourHttpTamper, bool isMark)
 {
     yourListViewItem.Tag = yourHttpTamper;
     yourListViewItem.SubItems[1].Text = GetFiddlerHttpFilterName(yourHttpTamper.HttpFilter);
     yourListViewItem.ImageIndex       = yourHttpTamper.IsRawReplace ? 1 : 0;
     yourListViewItem.ToolTipText      = yourHttpTamper.HttpFilter.ToString();
     yourListViewItem.Checked          = yourHttpTamper.IsEnable;
     if (isMark)
     {
         MarkRuleItem(yourListViewItem);
         PutWarn(string.Format("Updata {0} {1}", yourListViewItem.ListView.Columns[1].Text, yourListViewItem.SubItems[0].Text));
     }
 }
示例#4
0
        private void AddRuleToListView(ListView yourListViews, IFiddlerHttpTamper yourHttpTamper, bool isMark)
        {
            ListViewItem nowRuleItem = new ListViewItem(new string[] { (yourListViews.Items.Count + 1).ToString(), GetFiddlerHttpFilterName(yourHttpTamper.HttpFilter) }, yourHttpTamper.IsRawReplace ? 1 : 0);

            nowRuleItem.Tag         = yourHttpTamper;
            nowRuleItem.ToolTipText = yourHttpTamper.HttpFilter.ToString();
            nowRuleItem.Checked     = yourHttpTamper.IsEnable;
            yourListViews.Items.Add(nowRuleItem);
            if (isMark)
            {
                MarkRuleItem(nowRuleItem);
                PutWarn(string.Format("Add {0} {1}", yourListViews.Columns[1].Text, nowRuleItem.SubItems[0].Text));
            }
            AdjustRuleListViewIndex(yourListViews);
        }
示例#5
0
        private void MyCBalloon_Load(object sender, EventArgs e)
        {
            isLoadRuleComplete = false;
            if (InnerListViewItem != null && InnerListViewItem.Tag is IFiddlerHttpTamper)
            {
                IFiddlerHttpTamper nowRule = InnerListViewItem.Tag as IFiddlerHttpTamper;
                LoadRuleInfo(nowRule);

                lastListViewItemRectangle = InnerListViewItem.Bounds;
                timer.Start();
            }
            else
            {
                MessageBox.Show("can not find rule data ", "Stop", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                this.Close();
            }
        }
示例#6
0
        private void AddRuleToListView(ListView yourListViews, IFiddlerHttpTamper yourHttpTamper, bool isMark)
        {
            //TamperProtocalType tempProtocolMode;
            //if (!Enum.TryParse<TamperProtocalType>(yourHttpTamper.TamperProtocol, out tempProtocolMode))
            //{
            //    tempProtocolMode = TamperProtocalType.Http;
            //    //throw new Exception("unkonw protocol");
            //}
            int          tempListViewItemImageIndex = yourHttpTamper.TamperProtocol == TamperProtocalType.WebSocket ? 4 : yourHttpTamper.IsRawReplace ? 1 : 0;
            ListViewItem nowRuleItem = new ListViewItem(new string[] { (yourListViews.Items.Count + 1).ToString(), GetFiddlerHttpFilterName(yourHttpTamper.HttpFilter) }, tempListViewItemImageIndex);

            nowRuleItem.Tag         = yourHttpTamper;
            nowRuleItem.ToolTipText = yourHttpTamper.HttpFilter.ToString();
            nowRuleItem.Checked     = yourHttpTamper.IsEnable;
            yourListViews.Items.Add(nowRuleItem);
            AdjustRuleListViewIndex(yourListViews);
            RefreshFiddlerRuleList(yourListViews);
            if (isMark)
            {
                MarkRuleItem(nowRuleItem);
                PutWarn(string.Format("Add {0} {1}", yourListViews.Columns[1].Text, nowRuleItem.SubItems[0].Text));
            }
        }
示例#7
0
        public ListViewItem FindListViewItemFromRule(IFiddlerHttpTamper yourRule)
        {
            ListViewItem markItem = null;

            if (yourRule is FiddlerRequestChange)
            {
                foreach (ListViewItem tempItem in RequestRuleListView.Items)
                {
                    if (yourRule == tempItem.Tag)
                    {
                        markItem = tempItem;
                        break;
                    }
                }
            }
            else if (yourRule is FiddlerResponseChange)
            {
                foreach (ListViewItem tempItem in ResponseRuleListView.Items)
                {
                    if (yourRule == tempItem.Tag)
                    {
                        markItem = tempItem;
                        break;
                    }
                }
            }
            else
            {
                throw new Exception("unknow IFiddlerHttpTamper");
            }
            if (markItem == null)
            {
                throw new Exception("can not find ListViewItem");
            }
            return(markItem);
        }
        public static void PickSessionParameter(Session oSession, IFiddlerHttpTamper nowFiddlerHttpTamper, Action <string> ShowError, Action <string> ShowMes, bool isRequest, WebSocketMessage webSocketMessage = null)
        {
            Func <string, ParameterPick, string> PickFunc = (sourceStr, parameterPick) =>
            {
                try { return(ParameterPickTypeEngine.dictionaryParameterPickFunc[parameterPick.PickType].ParameterPickFunc(sourceStr, parameterPick.PickTypeExpression, parameterPick.PickTypeAdditional)); }
                catch (Exception) { return(null); }
            };

            bool isWebSocket = webSocketMessage != null;

            if (nowFiddlerHttpTamper.ParameterPickList != null)
            {
                foreach (ParameterPick parameterPick in nowFiddlerHttpTamper.ParameterPickList)
                {
                    string pickResult = null;
                    string pickSource = null;
                    switch (parameterPick.PickRange)
                    {
                    case ParameterPickRange.Line:
                        if (isRequest)
                        {
                            pickSource = oSession.fullUrl;
                            if (string.IsNullOrEmpty(pickSource))
                            {
                                pickResult = null;
                                break;
                            }
                        }
                        else
                        {
                            if (oSession.oResponse.headers == null)
                            {
                                pickResult = null;
                                break;
                            }
                            else
                            {
                                //pickSource = string.Format("{0} {1} {}", oSession.oResponse.headers.HTTPVersion, oSession.oResponse.headers.HTTPResponseCode,oSession.oResponse.headers.StatusDescription);
                                pickSource = string.Format("{0} {1}", oSession.oResponse.headers.HTTPVersion, oSession.oResponse.headers.HTTPResponseStatus);
                            }
                        }
                        pickResult = PickFunc(pickSource, parameterPick);
                        break;

                    case ParameterPickRange.Heads:
                        if (isWebSocket)
                        {
                            ShowError("[ParameterizationPick] can not pick parameter in head when the session is websocket");
                            break;
                        }
                        IEnumerable <HTTPHeaderItem> headerItems = isRequest ? (IEnumerable <HTTPHeaderItem>)oSession.RequestHeaders : (IEnumerable <HTTPHeaderItem>)oSession.ResponseHeaders;
                        foreach (HTTPHeaderItem tempHead in headerItems)
                        {
                            pickResult = PickFunc(tempHead.ToString(), parameterPick);
                            if (pickResult != null)
                            {
                                break;
                            }
                        }
                        break;

                    case ParameterPickRange.Entity:
                        if (isWebSocket)
                        {
                            if (webSocketMessage.PayloadLength == 0)
                            {
                                pickResult = null;
                                break;
                            }
                            pickSource = webSocketMessage.PayloadAsString();
                            pickResult = PickFunc(pickSource, parameterPick);
                        }
                        else
                        {
                            if (((oSession.requestBodyBytes == null || oSession.requestBodyBytes.Length == 0) && isRequest) && ((oSession.ResponseBody == null || oSession.ResponseBody.Length == 0) && isRequest))
                            {
                                pickResult = null;
                                break;
                            }
                            pickSource = isRequest ? oSession.GetRequestBodyAsString() : oSession.GetResponseBodyAsString();
                            pickResult = PickFunc(pickSource, parameterPick);
                        }
                        break;

                    default:
                        ShowError("[ParameterizationPick] unkonw pick range");
                        break;
                    }
                    if (pickResult == null)
                    {
                        ShowMes(string.Format("[ParameterizationPick] can not find the parameter with [{0}]", parameterPick.ParameterName));
                    }
                    else
                    {
                        ShowMes(string.Format("[ParameterizationPick] pick the parameter [{0} = {1}]", parameterPick.ParameterName, pickResult));
                        if (nowFiddlerHttpTamper.ActuatorStaticDataController.SetActuatorStaticData(parameterPick.ParameterName, pickResult))
                        {
                            ShowMes(string.Format("[ParameterizationPick] add the parameter [{0}] to ActuatorStaticDataCollection", parameterPick.ParameterName));
                        }
                        else
                        {
                            ShowError(string.Format("[ParameterizationPick] fail to add the parameter [{0}] to ActuatorStaticDataCollection", parameterPick.ParameterName));
                        }
                    }
                }
            }
            else
            {
                ShowError("[ParameterizationPick] not find ParameterPick to pick");
            }
        }
        /// <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()));
                            }
                        }
                    }
                }
            }
        }
示例#10
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);
            }
        }
示例#11
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));
                    }
                }
            }
        }
示例#12
0
        private void pb_ruleComfrim_Click(object sender, EventArgs e)
        {
            FiddlerRequsetChange  nowRequestChange  = null;
            FiddlerResponseChange nowResponseChange = null;
            IFiddlerHttpTamper    fiddlerHttpTamper = null;
            ListView tamperRuleListView             = null;

            try
            {
                switch (tabControl_Modific.SelectedIndex)
                {
                case 0:
                    nowRequestChange = GetRequestModificInfo();
                    break;

                case 1:
                    nowRequestChange = GetRequestReplaceInfo();
                    break;

                case 2:
                    nowResponseChange = GetResponseModificInfo();
                    break;

                case 3:
                    nowResponseChange = GetResponseReplaceInfo();
                    break;

                default:
                    throw new Exception("unknow http tamper tab");
                    //break;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Stop", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                MarkControl(tabControl_Modific.SelectedTab, Color.Plum, 2);
                nowRequestChange  = null;
                nowResponseChange = null;
            }
            finally
            {
                if (nowRequestChange != null)
                {
                    fiddlerHttpTamper  = nowRequestChange;
                    tamperRuleListView = lv_requestRuleList;
                }
                else if (nowResponseChange != null)
                {
                    fiddlerHttpTamper  = nowResponseChange;
                    tamperRuleListView = lv_responseRuleList;
                }
            }

            if (fiddlerHttpTamper == null)
            {
                return;
            }

            if (fiddlerHttpTamper.HttpFilter == null || fiddlerHttpTamper.HttpFilter.UriMatch == null)
            {
                MessageBox.Show("you Uri Filter is not legal \r\n check it again", "edit again");
                MarkControl(groupBox_urlFilter, Color.Plum, 2);
                return;
            }

            ListViewItem nowRuleItem = null;

            foreach (ListViewItem tempItem in tamperRuleListView.Items)
            {
                if (tempItem == EditListViewItem)
                {
                    continue;
                }
                //if (fiddlerHttpTamper.HttpFilter.UriMatch.Equals(tempItem.Tag))
                if (fiddlerHttpTamper.HttpFilter.Equals(tempItem.Tag))
                {
                    MarkRuleItem(tempItem, Color.Plum, 2);
                    DialogResult tempDs;
                    //add mode
                    if (EditListViewItem == null)
                    {
                        tempDs = MessageBox.Show(string.Format("find same url filter with [Rule:{0}], do you want create the same uri rule \r\n    [Yes]       new a same url filter rule \r\n    [No]       update the rule \r\n    [Cancel]  give up save", tempItem.SubItems[0].Text), "find same rule ", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
                        if (tempDs == DialogResult.Yes)
                        {
                            continue;
                        }
                        else if (tempDs == DialogResult.No)
                        {
                            nowRuleItem = tempItem;
                            SyncEnableSateToIFiddlerHttpTamper(nowRuleItem, fiddlerHttpTamper);
                            UpdataRuleToListView(nowRuleItem, fiddlerHttpTamper, true);
                            break;
                        }
                        else
                        {
                            return;
                        }
                    }
                    //edit mode
                    else
                    {
                        tempDs = MessageBox.Show(string.Format("find same uri filter with [Rule:{0}], do you want save the rule \r\n    [Yes]       skip the same uri filter rule \r\n    [No]       remove the rule \r\n    [Cancel]  give up save", tempItem.SubItems[0].Text), "find same rule ", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
                        if (tempDs == DialogResult.Yes)
                        {
                            continue;
                        }
                        else if (tempDs == DialogResult.No)
                        {
                            tamperRuleListView.Items.Remove(tempItem);
                            continue;
                        }
                        else
                        {
                            return;
                        }
                    }
                }
            }

            if (nowRuleItem == null)
            {
                if (EditListViewItem == null)
                {
                    AddRuleToListView(tamperRuleListView, fiddlerHttpTamper, true);
                }
                else
                {
                    SyncEnableSateToIFiddlerHttpTamper(EditListViewItem, fiddlerHttpTamper);
                    UpdataRuleToListView(EditListViewItem, fiddlerHttpTamper, true);
                }
            }
            ChangeEditRuleMode(RuleEditMode.NewRuleMode, null, null);
        }
示例#13
0
 private void SyncEnableSateToIFiddlerHttpTamper(ListViewItem yourListViewItem, IFiddlerHttpTamper yourHttpTamper)
 {
     if (yourListViewItem != null && yourHttpTamper != null)
     {
         yourHttpTamper.IsEnable = yourListViewItem.Checked;
     }
 }