Fiddler修改请求响应

Wanjiongming 于 2019-10-04 发布

使用 Fiddler 也有一段时间了,破解的好多小游戏,这里介绍下使用 Fiddler 动态修改请求响应的方法。打开菜单上的 Rules-Customize Rules…

Fiddler Script 是用 JScript.NET 语言写的,熟悉下 API 后修改起来还是很方便的

需要先在 OnPeekAtResponseHeaders 中打开允许修改响应,不然后面的 utilSetResponseBody 不会生效。我一般是根据特定 url 开启,代码如下

static function OnPeekAtResponseHeaders(oSession: Session) {
  // 原有规则,不要动....

  // 追加如下代码,根据条件设置bBufferResponse
  if (oSession.fullUrl.Contains("dataTransfer.html")) {
    oSession.bBufferResponse = true;
    // 在主界面的log中可以看到日志
    FiddlerObject.log("拦截:"+oSession.fullUrl);
  }
}

下面就是修改响应的内容了,在 OnBeforeResponse 方法中的最后面追加修改内容,常见的场景主要分为以下三种类型

  1. 使用本地文件替换

    static function OnBeforeResponse(oSession: Session) {
      // 原有规则,不要动....
    
      // 替换
      if (oSession.fullUrl.Contains("dataTransfer.html")) {
        oSession.utilDecodeResponse();
        var oBody = System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes);
        FiddlerObject.log("捕获到数据:"+oBody);
        var filename = "D:/dt.html";
        var newData = System.IO.File.ReadAllText(filename)
        FiddlerObject.log("本地的数据:"+newData);
        oSession.utilSetResponseBody(newData);
      }
    }
    
  2. 直接修改 Json

    static function OnBeforeResponse(oSession: Session) {
      // 原有规则,不要动....
    
      // 设置新的响应内容
      if (oSession.fullUrl.Contains("/downloadRecord")) {
        oSession.utilDecodeResponse();
        var oBody = System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes);
        FiddlerObject.log("捕获到数据:"+oBody);
        var jsonData = Fiddler.WebFormats.JSON.JsonDecode(oBody)
        jsonData.JSONObject['score'] = 99;
        var newData = Fiddler.WebFormats.JSON.JsonEncode(jsonData.JSONObject)
        FiddlerObject.log("修改后数据:"+newData);
        oSession.utilSetResponseBody(newData);
      }
    }
    
  3. 正则替换简单文本数据

    static function OnBeforeResponse(oSession: Session) {
      // 原有规则,不要动....
    
      // 设置新的响应内容
      if (oSession.fullUrl.Contains("/dataTransfer.html")) {
        oSession.utilDecodeResponse();
        var oBody = System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes);
        FiddlerObject.log("捕获到数据:"+oBody);
        var oRegEx=/<\/head>/ig;
        var newData = oBody.replace(oRegEx, "<script>alert(1);</script></head>");
        FiddlerObject.log("修改后数据:"+newData);
        oSession.utilSetResponseBody(newData);
      }
    }