IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 关于代理抓包,ssl pinning解决方案 -> 正文阅读

[网络协议]关于代理抓包,ssl pinning解决方案

抓包

代理抓包

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层握手协议
APPssl 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,找到证书验证的地方,修改xposedjusttrustme 或者 fridaDroidSSLUnpinning 代码,
重新Hook

双向认证 使用者很少,会影响服务器性能

客服端对服务端发来的证书做校验
真实的服务端也对客服端证书做校验

双向认证解决办法:

客服端校验任然使用SSL unPinning方法
服务端校验,需把APP里的证书导入到代理抓包软件中,让代理抓包工具使用真实的APP证书。charles 比较方便
配置

如何找到APP里的证书

反编译APPassert文件夹里有.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模块 和 fridaDroidSSLUnpinning

技巧:

1.优先使用安卓系统低版本抓包
优先使用安卓4.0 5.0 6.0抓包
2.优先使用APP低版本抓包
比如微信7.0以下 在安卓4.0-6.0上 容易抓包微信小程序
优先使用能用的APP最低版本

APP历史版本:
https://wap.pp.cn/
apkpure.com
当安卓抓包很艰难时,试试iOS抓包

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-04 17:54:21  更:2021-09-04 17:54:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:22:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码