写本文的契机主要是前段时间有次用青花瓷抓包有一步忘了,在网上查了半天也没找到写的完整的教程,因而待问题解决后抽时间截了图,本身写一遍封存在博客园中以便之后随时查阅。html
charles又名青花瓷,在iOS开发中的抓包中具备重要做用。最大的三点用处,一就是拦截别人软件的发送的请求和后端接口,练习开发。二是本身后端返回的response拦截修改后再接收以达到测试临界数据的做用。三写脚本重复拦截抓取别人的数据。(由于不太道德,本文不提第三点)前端
若是你不是在董铂然博客园看到本文,请点击查看原文。java
首先安装一下这个软件json
这个相信不少人电脑里应该都安装了,没安装的搜charles破解版也能很容易搜到。若是没安装java环境,首次进入charles会提示让你安装java包得,直接给你连接是苹果官网的,去下一个一键安装就好了。后端
安装完成后先打开,在进行下面操做。浏览器
而后去本身电脑的系统偏好设置-》网络-》选中如今连着的网(大部分人应该都是WiFi吧)能够查到本身这个电脑在如今这个wifi里的IP地址,好比我如今这个就是192.168.0.105(建议最好用私人网络,用公司网络的话可能会有限制会出现没反应的问题)bash
而后找到本身手机也连着这个同名的wifi,而后选中右边的蓝色i。服务器
而后进入到了这个无线局域网的高级设置页面。进去以后拉到最下方,找到HTTP代理字样。而后选中手动代理,并在服务器中填本身电脑查到的ip地址,而后把端口调8888,最后点击左上角返回。返回值后系统会自动设置代理从新链接。网络
这时候你的手机上网的过程当中就要通过你的电脑了。刚用手机打开一个联网的程序,你的电脑上应该会显示一个弹窗问你【allow】仍是【deny】确定不能拒绝啊就点allow吧。这个只有第一次才弹窗,图没截上,你到时候看见确定能看懂的。点了赞成以后你手机发出的每个请求都会被拦截出痕迹。测试
拿网易新闻举例,之前就练习这写过网易新闻的项目,其中网易的接口全是用charles拦截的。拦截到了网易发请求时发的是什么,而后在练习项目中须要获取数据的地方也把这一串连接直接拿过来用便可。
固然这上面拦到的比较多,若是有过开发经验的话应该能很快看出来右边哪一个是真正返回json数据的接口。或者一个一个点看内容也行啊。
好比选中一个url而后右键点击copy。
放到浏览器地址栏里打一下。能看到
这就说明这个接口是对的了。能够获取到数据。而后能够给他转化一下看的更清楚。虽然不少人都是用bash看,但我仍是推荐一个网址http://www.w3cschool.cc/jsontool。转JSON以后看的很是清晰。大部分软件json整理后都是默认把大括号全都打开,而仅有这个网站是默认全给你把大括号关上。想点哪一个再点开,并且能知道字典里有多少个键值对,因此看着很是清晰。
到此就已经完成了一次完整的,拉取接口,和得到数据。
这里有两点我想说下:
①就是若是这个App发的请求加密了或是RSA什么的,这个就算拦截了你也弄不到数据。网易是没有作任何加密,因此能够抓取到数据。之前试了拦截百度医生的就不行。他设置的是一分钟内能获取到数据,超过了1分钟这个复制过来的接口就取不到数据了。怀疑多是用的HMAC方法加密,而且在里面加入了时间判断。32分和33分发出的请求通过编码后是不同的,后台可能作了容错,会把32分和31分都和你判断下,只要有一个对上就让你过,可是超过了整整一分钟后是确定获取不到数据了。
②就是不少比较大型的网站,通常会开放一个开发者平台,里面注册开发者帐号后会向你公开一个接口文档,你不用再去费事的拦截了。像新浪微博和大众点评都有开发者平台。
这个是重点了。由于这种作法可让一个iOS前端的开发人员独立完成测试而不用拉过来一个后端一块儿联调。而且各类特殊维度,或是临界的帐号也不用再去辛苦找了,仅仅本身在青花瓷上改来改去就能够达到效果了。好比这个地方若是返回了nil程序会不会崩,直接改response就好了。下面是具体操做方案。
打开青花瓷切换成结构页面
这里能够看到断点和调试信息
而后找一个咱们公司的页面。这个页面原本应该返回是这样的:如上图右边
你先正常的打开这个页面把玩几下,这个青花瓷就会抓取不少接口和域名分类了。在这里找到你这个页面所属的域名分类应该不难。而后打上断点。这里要注意是在域名上打断点而不是在下面的单个请求上打断点。
再次用手机进入这个页面,就会经过你刚才打断点的那个域名来请求数据,就会被断点拦住,以下图所示。
右边的信息也很清晰,一开始能够编辑请求。若是点击单步执行,等一下相应回来了也能够编辑响应。
这里的有好几种查看的方式,可是推荐使用JSON Text看的比较清楚。 如今咱们对拦截回来的数据进行修改,我把这些统计数据全改为999以下图
而后再次点击下方的Execute单步执行,更改后的数据就会像正常返回回来的数据那样显示到,APP的页面上展现。
能来到这一步就说明已经完整的掌握了用青花瓷篡改返回数据测试App的技术。
若是你不是在董铂然博客园看到本文,请点击查看原文。
这么作的意义:
这里只是简单的更改了一些数字,在页面显示更加直观。实际的操做中,你能够常常用来把某些值改成临界状况以看到App在处理这些临界情况时的反应,这样比找那些临界数据的测试帐号成本要低得多。也能够把一些可能不会反回数值的字段找到,直接将里面的值删成nil,看看会不会报异常等等。