android fiddler抓包赶紧操作一波

Posted Android编程精选

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android fiddler抓包赶紧操作一波相关的知识,希望对你有一定的参考价值。

点击右侧关注,了解黑客的世界!


作者丨mandypig
https://www.jianshu.com/p/a0826e607590


fiddler抓包 http协议 崩溃 fiddler抓包 http协议 崩溃


每一次去研究一个东西都是有动机的,这次也不例外,虽然是一个很小的知识点,但是还是让自己踩坑了,也是通过这个踩坑让自己告诉了测试妹子如何去避免这类抓包崩溃问题,要做一个帮助他人的好员工,手动滑稽。具体是什么问题,大家有兴趣可以继续看看。


事情的经过是这样的,早上来公司上班,正在专注看代码中...这时测试妹子突然发信息过来


测试妹子:"你这代码有问题啊,我每次抓包修改完数据后程序就直接崩溃了,我都没法测试了。"


我:"真的?我都自测过的,不会吧,怎么崩的"


测试妹子:"就这样,改个json中字段数据就崩掉了",随手发了一张截图过来


仔细瞅了一眼,修改了一个昵称字段值,内心旁白:"怎么可能,这怎么会崩溃"。
我:"稍等,我查下原因"


内心是比较纳闷的,因为在提测之前是充分自测过,不可能会出现这种失误,既然妹子都提bug了,咱也不能不管吧,开启找崩溃原因模式,debug,代码伪造假数据测试,mock调试。结论:完美,丝毫不崩溃。


我:"不可能啊,我又测试了一遍,没问题啊,你重新打个最新包试试"


过了不到十分钟,测试妹子:“还是不行啊,同样的问题”


此时内心就是这样的,



我:"给我复现一下,我过去找你",又可以见妹子去了


测试妹子:"修改完毕的接口数据已经准备好了,你点击app页面试试"


一试还真是,居然真崩溃了


我:“让我看下你是怎么修改返回数据的”


测试妹子:"就这么操作" 如图所示,通过fiddler的find a file,将响应后的数据替换成file数据从而达到篡改原数据的目的


android fiddler抓包赶紧操作一波


file数据如图所示


android fiddler抓包赶紧操作一波


实际上这个file数据就是真正返回的数据的一份拷贝,然后测试妹子就把里面的个别字段进行了修改,就是这么个简单操作却发生了上述所述的崩溃问题,到底是哪里有问题,如果有人已经发现了问题所在,那么其实接下来就不必看下去了,如果看完上面两张截图还是一脸懵逼不知道问题所在那就继续看下去。


为了找到问题原因,自己打开了风尘多年的fiddler,嗯是的好久没使用了,但是不得不说fiddler确实很强大,写完这篇文章也要好好去重新学习下,利用妹子给的file数据很容易就能复现出问题,然后就是debug代码,发现了一个比较奇怪的问题就是接口返回的数据总是少了最后的一段,导致json解析异常崩溃,这就让我比较奇怪,原来自己也使用过测试妹子的方法修改过返回接口的数据从来没出过问题,这次为什么出问题了。


带着问题我又仔细观察了下数据,相信大家也可能注意到了就是数据的头部会有一个奇怪的数值5c0,尾部会有一个0,其实刚开始就注意到这两个值觉得可能是fiddler自己给添加上去的就没太在意,现在卡着没解决问题,就需要特意留意下这两个数了。特地去搜了下这两个值,并没有什么收获,那这两个值到底表示什么意思。突破口就在协议头字段,看看有什么平时没怎么注意到的协议,还真发现一个,Transfer-Encoding: chunked,对chunk还是比较敏感的,原因就是原来自己研究过recyclerview的源码,内部就有一个方法叫layoutchunk,当然这个只是题外话和http并没有什么太大关系。这个协议字段至少自己原来没太留意过,大概也能猜到是传输按块。


能找到问题源头就比较好解决了,搜索一下大致就能知道这个协议头的作用,这里简单说下,http协议会把一些传输内容比较多的数据分块来传输,传输格式就是类似


1a
xxxxxx

5c
xxxxxx
0


这些数字表示的意义就是各个块中数据的长度,最后的0表示数据传输完毕,知道协议的作用后再结合为什么fiddler抓包改数据后会崩溃就好理解了,因为测试妹子使用的是一个file文本,每次修改字段时没有及时修改最开头的数据长度值,这样做最终就会存在真正获取到数据会出现被部分截断的可能性,导致json在解析时出现异常崩溃。


解决


既然问题原因找到了那么该如何解决这个问题,目前自己想到的就三种方法,如果谁有更好的方法去解决这个问题,希望留言告诉我,自己写文章的目的一是告诉大家如何解决这个问题,另一方面也希望可以得到更优解。


1、最笨的方法,就是修改完file中的字段后,同时去修改数据长度的值,这个方法最容易想到,但是太麻烦了,要是只修改简单的字段还能勉强应付下,如果要修改多个字段,岂不是要边修改边数数了,不太可取


2、通过fiddler的响应断点来修改,方法就是断点想要修改的接口响应,在响应真正返回给手机前修改掉数据,可以通过如下命令


bpafter xxx 来设置断点,xxx表示的就是接口路径,设置完断点之后respone就会成功被fiddler拦截掉如图所示,


android fiddler抓包赶紧操作一波


双击该接口后会出现如下页面


android fiddler抓包赶紧操作一波


其中raw就是我们要真正修改数据的地方,在修改之前需要先把transfer-encoding那个复选框给取消掉,然后再去修改raw中的数据,想怎么改就怎么改,修改完毕之前,重新将transfer-encoding选中即可,最后点击run to completion,最终你就会看到修改完的数据被最终应用到了手机上,且不会崩溃。


3、通过edit response来完成修改数据的操作,具体步骤如下:双击选中被断点的接口,然后点击


android fiddler抓包赶紧操作一波


这个选项的作用就是能修改response请求数据,记得把enable rules给选中。此时应该能看到设置响应的接口名称


android fiddler抓包赶紧操作一波


如果没有的话 不要紧,直接将需要修改返回数据的接口拖到这里即可,右击鼠标在弹出的对话框选中edit response,此时就会出现这么个对话框


android fiddler抓包赶紧操作一波


接下来就直接在raw中把你想要修改的数据先拷贝进来,然后就可以直接修改了,修改完毕之后记得点save保存,这样就大功告成了,以后你的每次请求都是使用你刚刚设置的数据。


可能还存在其他类似方法,除了第一种方法不可取,剩下两种还能用用,但感觉也不是什么特别好的方法,如果想修改数据还是要每次进行重复操作,但确实没找到更智能的方法,可能是fiddler在造数据这块没这么强大的功能,也可能是自己没掌握更fiddler更高级的用法,所以如果有知道更好方法的希望能留言告知,这方面mock确实要强很多。


问题原因找到了,解决方法也有了,知道接下来要做什么嘛,当然是过去找测试妹子在她面前当一回老师把你的解决方法告诉她,目的很单纯当然是避免她下次踩坑再来找你麻烦。


android fiddler抓包赶紧操作一波


总结


其实这个问题说难也并不难,如果对于transfer-encoding了解的话很快就能找到问题所在,当然还需要你对fiddler有一定的了解,不然估计也要懵逼,单纯的写如何使用fiddler的文章网上已经很多了也写不出太多新意,所以结合自己的踩坑经历让大家对于这个协议字段有更多了解,同时也对fiddle进行了粗略讲解,需要了解更多fiddler使用的建议去网上搜下,文章很多相信问题不大,其实很多时候对于一些技术问题的把握,都是在不断的踩坑填坑中


一点点积累起来的。


*********************************************1月31号更新*************************************************


趁还没忘记先记录一下,fiddler抓包修改数据


公司接口回传数据上文提到过使用了chunk传输方式,回传回来的数据还使用了gzip压缩,看着回传回来的迷之文字如何修改里面的数据,其实比较简单分以下几步走:


1、响应回来的response中的headers不会被压缩所以可以直接看到所有字段值,比如这样的


android fiddler抓包赶紧操作一波


保存起来 等下要使用


2、解压数据内容。


android fiddler抓包赶紧操作一波


操作都标出来了,按着操作后那么原来压缩的内容就能被解压看到真正的东西,把这部分也给保存起来。


3、设置返回response


操作见上文,create new res
ponse后在弹出的对话框中选中headers的tab,然后将刚才保存的response中的headers数据复制进去,注意需要去掉chunk字段,否则可能有问题。造好headers之后接下来就是造数据内容了,也很简单将刚才解压出来的内容复制进来,这样数据内容也有了,接下来要做的就是手动修改里面的字段内容为你想要的,修改完毕后保存一下,已经离成功只差一步。


4、设置正确的url匹配


之前在这被小坑一把,主要就是接口url每次都会带上一个时间戳参数,所以每次请求的url都不一样,fiddler默认使用的就是exact匹配,所以会导致无法拦截接口的问题。解决方法也很简单,如图


android fiddler抓包赶紧操作一波


去掉后面url的参数即可


android fiddler抓包赶紧操作一波


把前面圈红的部分去掉,否则每次精准匹配会拦截不到不带参数的url


完成上述几步操作之后,就可以实现抓包修改数据了,这是自己摸索出来的方法,分享出来给大家。


 推荐↓↓↓ 

以上是关于android fiddler抓包赶紧操作一波的主要内容,如果未能解决你的问题,请参考以下文章

[转] Android利用Fiddler进行网络数据抓包

Android利用Fiddler进行网络数据抓包

Android利用Fiddler进行网络数据抓包怎么跟踪微信请求

android抓包 fiddler怎么配置

Android 配置Fiddler抓包

android抓包工具——fiddler与charles的基本操作(弱网模拟,map local/remotebreakpoint 等)