背景
本来用fiddler抓包Android应用一直都是开开心心的,结果就在今天,应用版本更新之后,在抓包过程中,突然给我来了个“网络无法链接,请重试”。 一打开浏览器,有网络访问,那么问题就是emmm~~ 握草无情啊…
原因
其实我觉得能看到这篇文章,说明肯定是会抓包的朋友,不然的话,标题就应该改为“关于某些Android应用抓包教程”了。
直接进入主题,一般来说Android应用的开发,为了避免别有用心的人进行流量劫持、嗅探,获得通过HTTP传输的敏感信息,或者通过劫持http加入自己的推广内容,会采用https通信,那么就涉及到证书的问题Android security-config。
上述背景中,我的浏览器是有网络访问的,但是我想要抓包的应用却提示我网络无法连接,并且一旦我把fiddler的代理IP关掉,我想要抓包的应用也是可以正常使用的。那么大胆的猜测一下,是不是由于我使用了,代理主机的证书,然后Android应用更新后添加了对证书的校验,导致的问题呢?
解决方案
假设我们的猜想是对。(有时间的话,可以反编译下需要抓包的Android apk,慢慢验证一下是不是因为添加了对证书的校验导致的)
我所知道的解决方案有几个,大致分为两类:
- 想办法让应用信任自己证书
- 想办法绕开Android应用的SSL pinning
第一类方案的话:要么有APP源码,通过修改代码允许其抓包https;没有源码的话就对其Android apk 解包,找到校验部分的代码修改后,重新打包。
第二类方案的话:需要手机root,手机root可以采用模拟器或者某些手机可以到官方申请解锁BL,然后root。
root后手机安装XPosed神器,然后使用插件Android-SSL-TrustKiller 或者 JustTrustMe
最后,我应该算是采用的上述第一类的方案,让应用信任代理主机的证书,由于手机已经root,就大胆的将证书放到了系统证书区域
详细步骤:
计算证书名
openssl x509 -inform der -in FiddlerRoot.cer -out FiddlerRoot.pem
openssl x509 -subject_hash_old -in FiddlerRoot.pem
算出数值,比如e5c3944b
证书文件改名
然后把原Fiddler证书FiddlerRoot.pem改名为e5c3944b.0
放到系统分区
放到/system/etc/security/cacerts/
最后运气比较好,问题解决了
题外话,模拟器可以帮我们解决很多问题。