Fiddler探秘

Posted 东京过客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Fiddler探秘相关的知识,希望对你有一定的参考价值。

Fiddler的介绍

  • 代{过}{滤}理就是在客户端和服务器之间设置一道关卡,客户端先将请求数据发送出去后,代{过}{滤}理服务器会将数据包进行拦截,代{过}{滤}理服务器再冒充客户端发送数据到服务器;同理,服务器将响应数据返回,代{过}{滤}理服务器也会将数据拦截,再返回给客户端。

  • Fiddler可以抓取支持http代{过}{滤}理的任意程序的数据包,如果要抓取https会话,要先安装证书。

这两点,希望大家牢记。接下来,给大家介绍Fiddler超级强大的地方之一——Fiddler Script.

Fiddler Script 是用JScript.NET语言写的

那么Fiddler Script到底有什么用?我这里来列举一些大家肯定遇到过的问题:

场景1:一个付费验证,是否付费会返回一个json。里面有一个时间戳和一个false。如果时间戳和客户端不一致,则为破解失败。

那么你一定会这么想,有没有一个功能,可以只替换json里面部分参数,然后返回给客户端,而不是全部写死呢?于是,我们需要使用到script了!代码如下:如一个json是这个内容,baidu.com,返回了一个【name:testUser,付费: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);

if(oSession.oResponse.headers.ExistsAndContains("type", "1")){

        //请求参数中,若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")){

// 获取Request 中的body字符串

var strBody=oSession.GetRequestBodyAsString();

// 用正则表达式或者replace方法去修改string,将false改为true

strBody=strBody.replace("false","true");

// 弹个对话框检查下修改后的body 

FiddlerObject.alert(strBody);

// 将修改后的body,重新写回Request中

oSession.utilSetRequestBody(strBody);

}

场景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经常使用到的功能。直接复制即可使用。
———————————————————————————————————————
首先,大家抓包会遇到一个问题,为什么即使绕过了APP证书验证,为什么还是抓不到包!难道不是http协议?
其实并不是,APP大多数还是走的http协议,那为什么抓不到优酷的视频?抓不到关键的访问——原因在于此,代{过}{滤}理!

目前有非常多的APP,都为了防止被抓包,不仅仅是只用了https这么简单。而使用fiddler抓不到包,本质原因在于wifi代{过}{滤}理!很多APP会检测你是否用了wifi代{过}{滤}理,如果设置了,则APP无法正常使用。这样就会从根本上杜绝被抓包

那么,有没有办法能抓到这种操作的包呢?当然是有的。
这边只能透露几点,不能正大光明地公布,否则大量非法分子就可以破解非常多的APP了。

提示:Fiddler的本质其实就是代{过}{滤}理服务器,那么,如果是代{过}{滤}理服务器,所有的请求是不是都会走这台服务器呢?那是肯定的。


以上是关于Fiddler探秘的主要内容,如果未能解决你的问题,请参考以下文章

fiddler使用教程是啥?

转Fiddler 教程

汉化版fiddler怎么抓包改包

fiddler工具怎么模拟登录

Fiddler教程

在调试一个软件需要使用fiddler抓包修改返回数据,但是软件没有走fiddler的代理,fiddler抓不到包怎么办