1.抓包流程:先使用fiddler抓包,如果发现抓不到,有以下两种方案
- 选用Proxy Droid这个工具来实现强制全局代理的效果。注意:需要有ROOT权限才能使用
Proxy Droid的原理是通过iptables将所有TCP连接重定向到代理服务器上,强制性地让APP的HTTP请求通过代理。 - 使用VPN抓包,可用Packet Capture来实现。注意:这个APP不需要ROOT权限
Packet Capture的原理是在本地创建一个VPN,使所有请求都从VPN中流过,从而实现不适用代理抓包的效果。(这个APP不是开源的,且处理部分都是调用的so库,APP本身只是一个壳而已,想要看代码的话需要有一定的Android逆向知识和经验) - 若遇上ssl pinning,
- 可使用低版本安卓如7.0
- 使用Xposed或兼容Xposed的框架+JustTrustMe,这个方案使用的是JustTrustMe这个Xposed模块,它所做的事情就是将各种已知的的HTTP请求库中用于校验证书的API都进行Hook,使无论是否是可信证书的情况,校验结果返回都为正常状态,从而实现绕过证书检查的效果。
- 若以上还是抓不到,则可能是APP没有使用Android自带的HTTP客户端进行请求,并且对HTTP客户端的代码进行了混淆,导致通用工具JustTrustMe失效的问题。而中级篇中除了JustTrustMe以外的所有方法也都会对这种情况束手无策,之前的方法本质上针对的是Android 7.0+系统增加的SSL Pinning方案,而无法对各个HTTP客户端自己实现的检测方案生效。(听说有个叫车速拍的APP就是这种类型呢)
2.app反编译
- 可先用jadx进行反编译,若有加固的壳,则需要脱壳
- 有一个脱壳工具叫 frida-unpack,是基于Frida的脱壳工具,其原理是利用frida hook libart.so中的OpenMemory方法,拿到内存中dex的地址,计算出dex文件的大小,从内存中将dex导出。tips:查看OpenMemory的导出名称,可以将手机中的libart.so通过adb pull命令导出到电脑,然后利用:nm libart.so |grep OpenMemory 命令来查看到出名。
- 工具:Inspeckage,它直接将Java标准库中常见的被用于生成加密参数的方法给Hook了,监听它们的输入参数和返回值,这样就能直接得到加密、Hash前的原文、密钥、IV等内容了
ssl pinning
很多app采用了证书锁定ssl pinning来防止中间人攻击, ssl pinning是将服务端证书打包内置到移动客户端中,HTTPS连接建立时与服务端返回的证书对比一致性,以确定这个连接的合法性, 采用ssl pinning的app,已经不可以直接使用mitm proxy,fiddler等抓包工具可获取到明文包了使用frida等工具绕过证书锁定后,抓包工具才能获取到明文HTTPS数据包, 采用了ssl pinning证书锁定的app,内置证书一般为自签名证书。