前因

iOS针对IAP有一个保护机制,如果使用了全局代理的方式,iOS检查到之后为了保障交易的安全性,将会拒绝IAP流程,所以是无法抓取交易数据的,以豆瓣阅读为例,未开启代理时,可以正常的进入IAP充值界面,开启代理后则会报错:

使用全局代理充值请求报错

但是如果使用的动态代理的模式,可以绕过iOS的检查机制,下面就介绍下具体方法(PS:在这之前,默认你已经按之前的方法将证书倒入了iPhone设备中,教程地址:移动端安全修炼(一))。 这里需要补充一点,新版的iOS在信任证书环节需要新增一个信任,否则无法完全抓取HTTPS数据,具体位置在「设置」—「关于手机」—「信任证书设置」,如图所示:

二次信任证书位置

方法

先准备一个PAC文件(PAC,一个自动代理配置脚本,包含了很多使用 JavaScript 编写的规则,它能够决定网络流量走默认通道还是代理服务器通道,控制的流量类型包括:HTTP、HTTPS 和 FTP)。内容很简单:

function FindProxyForURL(url, host)
{
    if(shExpMatch(url,"*.douban.com/*")){
return "PROXY 192.168.1.134:8088";
    }
}

这个PAC的意思是域名douban.com使用192.168.1.134:8088进行代理,保存文件为test.pac之后,需要开启一个Web服务器提供这个PAC文件的地址,这里使用Python默认的模块来开一个简单的HTTP服务,到你保存的PAC路径使用如下命令:sudo python -m SimpleHTTPServer 9527,这样在你自己本机的IP地址下,就启动了一个Web服务,之后将iOS的WI-FI网络配置你的代理PAC如下:

代理配置

开启你的抓包软件,抓取你设定好的IP和端口的数据,打开豆瓣阅读进行正常的充值业务,发现不在报错而且可以抓取IAP支付流程的包了,这样就可做交易数据的安全分析了,设定和抓包详情如下:

代理设置

抓包详情

尾巴

使用该方法抓包,还是需要设备信任抓包工具的证书不管是Charles还是Burp Suite,基于HTTPS的流量抓包,证书是必备的,只不过使用动态代理的方式绕过了检查机制从而获取了想要的数据。