详解Android/IOS平台下抓包工具使用以及抓取API接口

时间:2024-05-23 18:18:46

抓包(Packet Capture),实际上就是对网络请求(包括发送与接收)的数据包进行截获、重发、编辑、转存等操作,在Android下,也经常被用来进行数据截取等。学会抓包之后,获取某个App的API就是轻而易举的事了,当然,现在有很多App,都对API进行了加密验证,例如Mac校验。所以在这种条件下,调用人家的API就困难得多了。

在Android或iOS下,抓包的方式不外乎两种,一种是代理,另一种是tcpdump。正常情况下,走代理模式就可以了。

抓包工具

抓包工具比较常见的是Fiddler,Wireshark等,个人比较喜欢Charles,官网,界面简洁人性化,只做数据截取的话,足够用了,并且同时支持Windows,Mac,Linux。下面就介绍如何利用Charles进行抓包。Mac OSX下Charles是收费的,这里提供一个**版下载链接: https://pan.baidu.com/s/1c1NghOW 密码: v74u

Charles

charles界面如图

详解Android/IOS平台下抓包工具使用以及抓取API接口

主机允许代理模式

菜单栏Proxy -> Proxy settings,Port设置一个不与电脑其他端口冲突的端口号,比如8888,并勾选Enable transparent HTTP proxying,点击OK。如图

详解Android/IOS平台下抓包工具使用以及抓取API接口

这样,就允许了HTTP代理模式。

客户端设置代理

在Android/iOS下设置代理。

首先,通过ipconfig查看主机ip地址(mac或linux下使用ifconfig)。

详解Android/IOS平台下抓包工具使用以及抓取API接口

然后,Android或iOS须和主机处于同一个局域网下(连同一个路由器,同网段)。在Android中打开设置->WLAN->长按当前连接的Wifi->修改网络->高级选项->打开代理(手动)->输入主机ip地址及代理端口号->保存,如图

详解Android/IOS平台下抓包工具使用以及抓取API接口

iOS开启代理的方式也差不多,进入设置->无线局域网-> 查看当前连接的Wifi信息->HTTP设置服务器和端口。如图

详解Android/IOS平台下抓包工具使用以及抓取API接口

截获数据包

前面设置完毕之后,当Android/iOS 下,有进行网络请求时,那么Charles会弹出一个对话框,确认是否允许代理,点击Allow,表示允许。如图

详解Android/IOS平台下抓包工具使用以及抓取API接口

这个时候,请求的地址就会出现在左侧的structure栏里面,点击可以查看具体请求的信息。

详解Android/IOS平台下抓包工具使用以及抓取API接口

Overview:HTTP请求的具体信息,包括URL、请求时间、服务端响应结果等。

Request:请求参数,包含Headers,Params等

Response:响应结果,包含Headers,Json格式数据、Json预览等。Json数据就是比较直观的响应体。

详解Android/IOS平台下抓包工具使用以及抓取API接口

这样,就完成了一次HTTP请求的拦截。同样,我们拷贝该URL在浏览器打开,同样可以得到这些json数据。如图

详解Android/IOS平台下抓包工具使用以及抓取API接口

在浏览器也可以安装对应的json格式化插件,例如Chrome的jsonview插件。效果如图

详解Android/IOS平台下抓包工具使用以及抓取API接口

这样,响应的json数据就很直观的展现在我们的面前。

HTTPS

HTTPS请求,响应数据可能会出现乱码,这时候就需要安装Charles的CA证书,下载后解压,双击crt文件,选择总是信任就可以了,当然如果要抓取iPhone设备上的HTTPS请求,需要在iPhone上也安装一个证书,在safari输入这个网址:http://charlesproxy.com/getssl ,点击安装即可。

charles还有其他挺多功能,比如模拟网速慢,断点,数据过滤,重定向等功能,这里就不一一介绍了,有兴趣的同学自行研究哈~

模仿一个app

重头戏来了,很多做Android的童鞋都没接触过服务端开发,这时候想要模仿人家做一个app来练手最头疼的就是没有数据来源,没有API,虽然可以选择诸如新浪微博提供的API接口,但是大部分的app在这方面都是没有提供对应接口的,这时候,HTTP抓包就派上用场了。

UI

可以解压对应的APK,res及assets下的图片资源是没有被加密的,可以直接使用。其他诸如layout以及drawable的xml资源一般都被加密了,个人认为也没必要去反编译,效率太低了,有图片资源就够用了。

请求接口封装

可以通过抓包得到的json数据,来生成一个实体类。那么如果json字段特别多呢?Android Studio提供了一个GsonFormat插件,可以快速的把json数据转换成Java Bean。如图:

详解Android/IOS平台下抓包工具使用以及抓取API接口

点击OK,选择所需字段。一般就默认全选就可以了~

详解Android/IOS平台下抓包工具使用以及抓取API接口

点击OK,就可以生成一个实体类。有了请求URL和实体类,那么封装一个请求接口就不是啥难事啦~~

加密请求

有一些做的比较好的接口,可能需要对请求参数做一个校验。例如虎扑体育的API,就需要把所有的请求参数,排序后进行MD5加密,服务端会对加密结果进行校验。但是这方面没有固定的套路,还需要自己檫亮眼睛去发现加密方式~~

Headers

在实现的过程中,你可能会发现有部分url直接在浏览器打开,获取不到数据,但是在Charles却可以。那么就很有可能是Header的问题了,那么就需要去尝试把Header信息加入我们的请求里面了。这部分就不细说了,具体可以参考后面的项目。

详解Android/IOS平台下抓包工具使用以及抓取API接口

快速写完,可能语言有点不通顺,还望谅解~~ 喜欢的话就给个赞吧

参考项目

上述的追书神器API全部内容,已经托管在GitHub。 
地址:https://github.com/JustWayward/BookReader

虎扑体育加密API在另外一个项目。 
地址:https://github.com/smuyyh/SprintNBA

最后,想要说一句的是,这些做法其实不是很可取,至于为什么大家都懂的,把握个度就好~