使用 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 方法中的最后面追加修改内容,常见的场景主要分为以下三种类型
-
使用本地文件替换
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); } }
-
直接修改 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); } }
-
正则替换简单文本数据
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); } }