APP 抓包问题总结及相关解决⽅案
App 抓包问题总结及相关解决⽅案
⽂章⽬录
前⾔
本⽂主要⽤于介绍我们在常规App抓包过程中遇到的各种问题以及解决⽅案
1 抓包⼯具的选择现阶段关于App抓包使⽤的较多的软件有以下两个:Fiddler
郑爽胡彦斌恋情Charles
2 常见问题解决
在App抓包过程中常见有以下⼏类问题:
下⾯来对这些问题进⾏⼀⼀解决。
2.1 App 正常运⾏,但是抓包⼯具中没有对应的请求记录
这个问题有两种可能性:
2.1.1 UDP 协议进⾏⽹络通信
分析
我们常规抓包⼯具的原理是设置⼀个代理服务,然后⼿机⾥的http这类底层库主动识别到了系统代理的变化,然后主动去连接的代理服务器,后⾯的请求都会直接发往代理服务器。但是UDP协议为Http协议之下,其会⽆视系统代理的设置。
解决⽅案
⽬前遇到这种情况,⼀般是使⽤App⾃带属性,我们关闭其相关底层协议的功能,让其强⾏⾛Https协议进⾏⽹络通信。
参考:
2.1.2 ⽆代理模式
分析 1.App 正常运⾏,但是抓包⼯具中没有对应的请求记录2.App 正常运⾏,但是抓包⼯具中对应的请求记录标记为失败3.App 不能正常运⾏,报请求失败或⽹络错误
1
2
31、该App 不使⽤传统Http/https 协议进⾏⽹络通信,⽽使⽤⼀些底层协议如UDP 协议进⾏⽹络通信,因此抓不到包,⽬前常见的有QUIC 和Spdy 协议。2、App 运⾏于⽆代理模式,因此我们的抓包代理抓不到数据包。
1
2
在App开发过程中,开发⼈员通过配置,让当前App运⾏于⽆代理模式,常见的Okhttp设置代码如下:
在⽆代理模式下任何请求都不会⾛代理,⽽我们的抓包软件原理⼜是通过设置代理来对数据请求进⾏抓取的,因此不能够在抓包软件上看到对应的请求记录。
解决⽅案 现阶段我们⽤的较多的是通过安装Drony应⽤来解决这⼀问题 使⽤也⾮常简单,⽅法如下:
2.2 App 正常运⾏,但是抓包⼯具中对应的请求记录标记为失败
问题分析
这⼀问题多在安卓7.0及以上版本⼿机抓Https包时出现,这主要是因为⼿机安卓7.0及以上版本我们抓包软件安装在⼿机上的证书不被系统层⾯所信任
解决⽅案
解决⽅法也⽐较简单,只需要把抓包软件安装在⼿机的证书从⽤户层⾯提升到系统层⾯即可,相关教程如下:
2.3 App 不能正常运⾏,报请求失败或⽹络错误
这个问题在对如今主流App分析中都会遇到,主要也是出现在对Https请求进⾏抓取的过程中,多是由于Https证书校验不通过所导致的,下⾯先对Https证书校验进⾏⼀个简单的介绍。
Https请求介绍
⾸先看⼀下Https请求的建⽴过程:1、打开Drony ,并右滑⾄SETTING 标签页,选择Networks ,点击当前在⽤的wifi 名,进⼊Network details 设置页2、点击Proxy type ,选择manual (⼿动)3、点击Hostname ,输⼊当前电脑的局域⽹IP ,⽐如192.168.1.1234、点击Port ,输⼊抓包软件的端⼝号,⽐如88885、点击Filter default value ,选择Direct all 6、点击Rules ,进⼊Rules 详情页,点击右上⾓的加号,进⼊Add filter rule ,action 选择Local proxy chain ,Application 选择需要抓包的应⽤,然后保存,返回主
7、左滑到LOG 标签页,点击底部到OFF 按钮,启⽤Drony ,同时确保Drony 进程在后台不会被杀掉1
2
3
4
5
6
7
看完这个图,整理⼀下逻辑:
单向认证: 核⼼在于客户端要对服务端证书进⾏校验,客户端使⽤服务端公钥加密通讯密钥,该通讯密钥⽤于后续的数据来往。
双向验证: 核⼼在于客户端要对服务端证书进⾏校验,且服务端也要对客户端证书进⾏校验,客户端使⽤服务端公钥加密通讯密钥,服务端使⽤客户端公钥加密所选的对称加密⽅法,使其更为安全。
上⾯所写的单向认证和双向认证都会导致App不能正常运⾏,报请求失败或⽹络错误的问题,下⾯⾸先来说⼀下单向认证。
2.3.1 单向认证(SSL pinning)
上⾯介绍到,单向认证其本质就是客户端存在对服务端证书的校验逻辑,⽽关于单向认证的具体实现⼜分为以下两种情况:证书锁定(Certificate Pinning)
需要在客户端代码内置仅接受指定域名的证书,⽽不接受操作系统或浏览器内置的CA根证书对应的任何证书,通过这种授权⽅式,保障了APP与服务端通信的唯⼀性和安全性,因此客户端与服务端(例
如API⽹关)之间的通信是可以保证绝对安全。但是CA签发证书都存在有效期问题,缺点是证书续期后需要重新内置到APP中
冬眠动物公钥锁定(Public Key Pinning)
提取证书中的公钥并内置到客户端中,通过与服务器对⽐公钥值来验证连接的正确性。制作证书密钥时,公钥在证书的续期前后都可以保持不变(即密钥对不变),所以可以避免证书有效期问题,⼀般推荐这种做法。
解决单向认证主要有以下两种⽅法:
到证书校验的代码逻辑,对相关校验代码逻辑进⾏覆盖或者修改(⾮root)
关于如何到证书校验的代码逻辑,⼤概有两种⽅法:
使⽤logcat查看相关报错⽇志追踪
反编译APP对APP进⾏关键字全局搜索如:checkServerTrusted、verify等。
对于相关校验代码逻辑的覆盖或修改,⼤概有两种⽅法:
反编译App修改其源代码(⼀般为smali代码),修改完毕重打包运⾏(但是可能会存在App打包证书校验问题导致App⽆法运⾏)使⽤Xposed对关键⽅法进⾏拦截修改
Xposed框架+JustTrustMe 绕过(root)
常州自由行Xposed()
JustTrustMe()
关于SSL pinning最后补充⼀下,⽬前⼤部分APP的校验都放在Java层,但是现在有少数校验放在Native层校验的,这种情况下需要去进⾏so⽂件的动态调试来查出校验的⽅法,然后进⾏⽅法拦截修改或者直接修改ARM代码,因此遇到Native层做SSL pinning的解决起来会⼗分⿇烦!有兴趣可以去了解下的证书校验。
2.3.2 双向认证
关于双向认证主要卡住的地⽅是服务端校验客户端证书出现问题,解决⽅案有两个思路:
将证书⽂件装⼊抓包⼯具
1、到client.p12⽂件
如何向喜欢的女生表白对于client.p12⽂件,我们直接解压Apk⽂件,然后在assets⽂件夹中直接拿就可以了
2、证书密码
对于证书密码查,⼀般是直接使⽤jadx等⼯具查看Apk源码,然后全局搜索client.p12、PKCS12、等等关于证书验证的关键字,然后查看这些关键字的调⽤情况,到加载证书时⽤到的密码。
3、使⽤.p12证书⽂件和上⼀步到的密码将证书安装到抓包⼯具中
2015年中考证书Dump
主要是通过hook KeyStore来获取相关证书,hook可以使⽤xposed也可以使⽤frida
换挡技巧详情可以参考
3 总结
最后总结⼀下,在抓包过程中会遇到很多奇奇怪怪的问题,上⾯罗列的可能只是⽐较典型的⼏种情况,现在⼤的趋势是基于UDP来⾃定义通信协议,以后抓包只会更难。
参考⽂章:Xposed 框架是⼀款开源框架,其功能是可以在不修改APK 的情况下影响程序运⾏(修改系统)的框架服务,基于它可以制作出许多功能强⼤的模块,且在功能不冲1JustTrustMe ⼀个⽤来禁⽤、绕过 SSL 证书检查的基于 Xposed 模块。简单来说,JustTrustMe 是将 APK 中所有⽤于校验 SSL 证书的 API 都进⾏了 Hook ,从11、查.p12证书⽂件以及相关的证书密码, 然后把该证书安装到抓包⼯具中即可。2、App 运⾏时如果使⽤到双向认证则必定有打开打开证书的过程,打开证书会调⽤相关的⽅法,我们直接hook 这些⽅法拿到证书并且保存到我们的本地⽂件中,1
2
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论