抓包原理
HTTPS即使安全,也是能够被抓包的,常见的抓包工具有:Charles、fildder等。
常用的HTTPS抓包方式是作为中间人,对客户端伪装成服务端,对服务端伪装成客户端。简单来说:
- 截获客户端的HTTPS请求,伪装成中间人客户端去向服务端发送HTTPS请求
- 接受服务端返回,用自己的证书伪装成中间人服务端向客户端发送数据内容。
具体过程如下图所示:
反反抓包策略
代理抓不到包的几种原因
1、请求有没有走代理
可以设置走自己的代理,安卓系统会优先走APP设定的代理
如何判断有没有走我们的代理:
设置 WIFI 代理后,关闭 Fiddler,如果 APP 还能正常访问,就是不走代理
解决方法:
ProxyDroid APP 全局代理 强制把IP转发到指定端口上
原理: 使用 iptable 命令 实现端口转发
也可以使用 Drony,是一个 VPN 软件
Drony 下载地址 https://files.cnblogs.com/files/lulianqi/Drony_102.apk
可以对手机上不同APP的流量进行单独配置。
Drony 配置
一、下载并安装到安卓手机上,http://www.appchina.com/app/org.sandroproxy.drony
二、打开Drony,并右滑至SETTING标签页,选择Networks,点击当前在用的wifi名,进入Network details设置页
三、网络详情设置
1、点击Proxy type,选择manual(手动)
2、点击Hostname,输入当前电脑的局域网IP,比如192.168.1.123
3、点击Port,输入抓包软件的端口号,比如8888
4、点击Filter default value,选择Direct all
5、返回 SETTINGS 点击Rules,进入Rules详情页,点击右上角的加号,进入Add filter rule,action选择Local proxy chain,Application选择需要抓包的应用,然后保存,返回主页
四、左滑到LOG标签页,点击底部到OFF按钮,启用Drony,同时确保Drony进程在后台不会被杀掉
2、ssl pining(ssl证书验证)
目前大部分是这种导致抓不到包
如何判断是 ssl sinning
ssl pinning 解决办法:
1.使用 Hook 手段 Hook APP 端网络请求库对 ssl 证书的判断方法
借助xposed 模块 justtrustme apk 地址:https://github.com/Fuzion24/JustTrustMe
它所做的事情就是将各种已知的的HTTP请求库中用于校验证书的API都进行Hook,使无论是否是可信证书的情况,校验结果返回都为正常状态,从而实现绕过证书检查的效果
借助frida 程序 DroidSSLUnpinning https://github.com/WooyunDota/DroidSSLUnpinning
2.逆向APP 扣出里面的证书 放到 charles 里,让 charles 使用真实证书做代理
3.部分 ssl pinning 失效的原因:
Hook 识别,APP 的网络请求库代码被混淆,或者大厂自己实现了一套网络请求库
解决方法:
逆向 APP ,找到证书验证的地方,修改 Xposed 的 justtrustme 或者 Frida 的DroidSSLUnpinning 代码,重新 Hook
4.双向认证
双向认证使用者很少,会影响服务器性能
客服端对服务端发来的证书做校验
真实的服务端也对客服端证书做校验
如何判断是双向验证:
当做了ssl unpinning后,报如下错误:
双向证书解决方法:
客服端校验任然使用SSL unPinning方法
服务端校验,需把APP里的证书导入到代理抓包软件中,让代理抓包工具使用真实的APP证书。charles 比较方便配置
如何找到APP里的证书
反编译 APP 在 assert 文件夹里有 .p12 .pem 之类文件 cer ssl
反编译后,在源代码里大量搜索
Hook 监听Assert文件夹 知道读了哪些文件
可能有密码 Hook java.security.KeyStore 查看密码