來自吾愛破解論壇https://www.52pojie.cn/thread-854434-1-1.html
Fiddler的作者
- Fiddler 的作者是 Eric Lawrence 是個大師級的人物, 目前在微軟總部西雅圖工作。 他的博客是: http://www.ericlawrence.com/Eric/
- 博客中能看到他的簡歷,以及一些生活照.
Fiddler的介紹
- Fiddler是強大的抓包工具,它的原理是以web代{過}{濾}理服務器的形式進行工作的,使用的代{過}{濾}理地址是:127.0.0.1,端口默認爲8888,我們也可以通過設置進行修改。
- 代{過}{濾}理就是在客戶端和服務器之間設置一道關卡,客戶端先將請求數據發送出去後,代{過}{濾}理服務器會將數據包進行攔截,代{過}{濾}理服務器再冒充客戶端發送數據到服務器;同理,服務器將響應數據返回,代{過}{濾}理服務器也會將數據攔截,再返回給客戶端。
- Fiddler可以抓取支持http代{過}{濾}理的任意程序的數據包,如果要抓取https會話,要先安裝證書。
這兩點,希望大家牢記。接下來,給大家介紹Fiddler超級強大的地方之一——Fiddler Script.
論壇有很多Fiddler的使用教程,這裏就不多說了。但是,卻沒有一個人說到最強大的腳本功能!
Fiddler 包含了一個腳本文件可以自動修改Http Request 和Response.這樣我們就不需要手動地下"斷點"去修改了,實際上它是一個腳本文件CustomRules.js
位於: C:\Documents and Settings\[your user]\My Documents\Fiddler2\Scripts\CustomRules.js 下,你也可以在Fiddler 中打開CustomRules.js 文件, 啓動Fiddler, 點擊菜單Rules->Customize Rules...
Fiddler Script 的官方幫助文檔必須認真閱讀, 地址是:http://www.fiddler2.com/Fiddler/dev/ScriptSamples.asp
小常識:Fiddler Script 是用JScript.NET語言寫的
那麼Fiddler Script到底有什麼用?我這裏來列舉一些大家肯定遇到過的問題:
場景1:一個付費驗證,是否付費會返回一個json。裏面有一個時間戳和一個false。如果時間戳和客戶端不一致,則爲破解失敗。
那麼你一定會這麼想,有沒有一個功能,可以只替換json裏面部分參數,然後返回給客戶端,而不是全部寫死呢?於是,我們需要使用到script了!代碼如下:如一個json是這個內容,baidu.com,返回了一個【name:吾愛破解,付費:false】
if (oSession.fullUrl.Contains("http://www.baidu.com"))
{
// 獲取Response Body、Request Body中JSON字符串,轉換爲可編輯的JSONObject變量
var responseStringOriginal = oSession.GetResponseBodyAsString();
var responseJSON = Fiddler.WebFormats.JSON.JsonDecode(responseStringOriginal);
var requestStringOriginal=oSession.GetRequestBodyAsString();
var requestJSON = Fiddler.WebFormats.JSON.JsonDecode(requestStringOriginal);
){ //請求參數中,若type爲1,對返回值做如下修改
responseJSON.JSONObject['付費'] = "true";
// 重新設置Response Body
var responseStringDestinal = Fiddler.WebFormats.JSON.JsonEncode(responseJSON.JSONObject);
oSession.utilSetResponseBody(responseStringDestinal);
}
}
}
通過以上代碼,即可每次在baidu返回數據時,自動將付費改爲true,從而達到了破解的效果。
場景2:我想要修改request的Body裏面的部分參數,每次下完斷點,修改完再提交,總會網絡超時或者APP超時。這該怎麼辦?難道只能靠手速?
if(oSession.uriContains("http://www.baidu.com"))
{
var strBody=oSession.GetRequestBodyAsString();// 獲取Request 中的body字符串
strBody=strBody.replace("false","true");// 用正則表達式或者replace方法去修改string,將false改爲true
FiddlerObject.alert(strBody);// 彈個對話框檢查下修改後的body
oSession.utilSetRequestBody(strBody);// 將修改後的body,重新寫回Request中
}
場景3:我想要修改cookie,改成一個付費過的cookie,但是需要實時生成,不能靠手速。這該怎麼辦?
if (oSession.HostnameIs('www.baidu.com') && oSession.uriContains('pagewithCookie') && oSession.oRequest.headers.Contains("Cookie"))
{
var sCookie = oSession.oRequest["Cookie"];
// 用replace方法或者正則表達式的方法去操作cookie的string
sCookie = sCookie.Replace("付費=false", "付費=true");
oSession.oRequest["Cookie"] = sCookie;
場景4:我想要知道他到底有沒有請求具體哪個網址,用查找速度太慢了。過濾也很慢。
if (oSession.HostnameIs("www.baidu.com")) {
oSession["ui-color"] = "red";
}
場景5:我想要自動保存某個接口的數據到本地,怎麼才能實現?
if (oSession.fullUrl.Contains("www.baidu.com/playurl/v1/") ){
oSession.utilDecodeResponse();//消除保存的請求可能存在亂碼的情況
var fso;
var file;
fso = new ActiveXObject("Scripting.FileSystemObject");
//文件保存路徑,可自定義
file = fso.OpenTextFile("D:\\Sessions.txt",8 ,true, true);
//file.writeLine("Response code: " + oSession.responseCode);
file.writeLine("Response body: " + oSession.GetResponseBodyAsString());
file.writeLine("\n");
file.close();
}
——————————————————————————————————————————————————————————————————————
以上就是Fiddler script經常使用到的功能,免費奉獻給大家。直接複製即可使用。