**
**
抓包
代理抓包
Fiddler, charles
能抓http/https/websocket
属于应用层
优点:配置简单,抓取解析ssl
方便
缺点:app
对代理抓包的检测越发厉害
https
:
http
是明文传播,易被修改,易被拦截,网页弹广告
https
实在http
基础上加了一个安全层
https
特点:
- 数据加密,不再明文传播
- 使用数字证书(
CA Certificate Authority
)做身份校验,防止数据被截获,只有合法证书持有者才能读取数据
- 数据完整性,防止数据被篡改,对数据做签名
HTTP OVER SSL
传输数据要先SSL
加密处理
ssl
握手协议
先商量好加密方式
交换证书
用证书加密
正式开始发送数据(用证书来给数据加密)
SSL层握手协议
- 1.
Client Hello
发给服务端:一串随机数 和 客户端支持哪些加密算法 一般是RSA
加密
2.Server Hello
回客户端:一串随机数 和 确定使用哪种加密算法
3.Certificate
: 服务端把要公匙证书发给客户端
4.Client key Exchange
: 客户端把自己的证书又发给服务端
5.Session Ticket
:开始传输数据/用key 给http数据加密 传输给服务端
代理抓不到包的几种原因
请求没有走代理
可以设置走自己代理,安卓系统会优先走APP
设定的代理
http.route.default-proxy
判断方法
如何判断没有走我们的代理:
设置wifi
代理后 关闭fiddler
如果APP
还能正常访问 就是不走代理
解决方法:
ProxyDroid APP
全局代理 强制把IP
转发到指定端口上
原理: 使用 iptable
命令 实现端口转发
mumu
虚拟器iptable
会报错
案例:mm
应用市场
ssl pining(ssl证书验证) 目前大部分是这种导致抓不到包
APP
对服务端证书做校验 校验服务器的证书和域名。/这也叫单向认证
Fiddler/Charles
等的证书肯定是校验不过的
回看 中间人攻击 图解 和 SSL
层握手协议
APP
做ssl pining
的几种方式:
举例Python requests
库对ssl
的校验
requests.get(url, timeout=1, verify=false)
Python
requests
urllib
urlib3
aiohttp
Java的几种网络请求方式
HttpsURLConnection
okhttp
webview ssl pinning
Native SSL
ssl pinning解决办法:
部分 ssl pinning 失效的原因:
Hook
失败,APP
的网络请求库代码被混淆,或者大厂自己实现了一套网络请求库
解决办法:
逆向APP
,找到证书验证的地方,修改xposed
的 justtrustme
或者 frida
的DroidSSLUnpinning
代码,
重新Hook
双向认证 使用者很少,会影响服务器性能
客服端对服务端发来的证书做校验
真实的服务端也对客服端证书做校验
双向认证解决办法:
客服端校验任然使用SSL unPinning
方法
服务端校验,需把APP
里的证书导入到代理抓包软件中,让代理抓包工具使用真实的APP
证书。charles
比较方便
配置
如何找到APP里的证书
反编译APP
在assert
文件夹里有.p12 .pem
之类文件cer ssl
反编译后,在源代码里大量搜索
Hook
监听Assert
文件夹 知道读了哪些文件
可能有密码 Hook java.security.KeyStore
查看密码
Wireshark
不需要对客服端做改变(设置代理IP
),是对网卡抓包
能抓传输层/网络层 抓TCP
包
抓经过网卡的所有TCP
包
跟代理抓包的区别
如何抓手机上的数据:
在电脑上开wifi
热点,手机联电脑的wifi
热点,共用一个网卡
360wifi
热点 http://wifi.360.cn/easy/pc/
安卓虚拟机可以直接抓包,不需要热点
抓包过滤wireshark
演示wireshark
如何过滤数据包
根据目的IP抓包
ip.dst == 192.168.0.1
ip.addr == 192.168.0.1
按端口过滤
tcp.port == 80
tcp.port == 443
按协议过滤
ssl
关联过滤
ssl and ip.addr
特点:
抓https
需要把ssl
证书导入到wireshark
,不然没法解析https
,这个操作难度较大
tcp以
上的数据都能抓,http/https/socket
等
Hook
域名 把https
改成 http
让app
强行发http
包,请求会失败,抓不到response
数据,但是能抓到请求包
通用性太差
Hook
网络请求库
请求前打印出请求参数,响应后打印出返回数据
注意事项:
1.安卓7.0(包括7.0)以后,安卓系统不再信任用户安装的证书。(例如 fiddler/charles
的代理抓包证书) mumu
模拟器
解决7.0以后用户证书不信任问题两种方法:
(1)root
手机,把代理证书放到系统证书根目录下
用户CA
证书目录
/data/misc/user/0/cacerts-added
系统CA
证书目录
/system/etc/security/cacerts
问题:
有的手机root /system
分区是只能读 仍然不能把证书放到系统根目录, 比如魅族pro5
df
命令
mount -o rw,remount /system
(2) hook
系统方法,强行让系统信任用户证书:
比如:使用xposed
框架的justtrustme
模块 和 frida
的DroidSSLUnpinning
技巧:
1.优先使用安卓系统低版本抓包
优先使用安卓4.0 5.0 6.0
抓包
2.优先使用APP
低版本抓包
比如微信7.0
以下 在安卓4.0-6.0
上 容易抓包微信小程序
优先使用能用的APP
最低版本
APP历史版本:
https://wap.pp.cn/
apkpure.com
当安卓抓包很艰难时,试试iOS
抓包