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); }
/// <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; }
/// <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)); } } } }
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); }
/// <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())); } } } } } }
/// <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())); } } }
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; } } } } } }
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); } }
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; } }
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); }
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); }