一文搞懂Android抓包
今天主要跟大家介绍一下Android的抓包和防止抓包
抓包工具的话介绍两款抓包工具,Profiter和Charles。
工具环境:
Android Studio 4.2.2
手机Google Pixel 3XL Android 11
使用Profiler 工具抓包
将自己的手机连接到电脑上,然后打开Android Studio 的Profiler
Android Studio 白狐及以下版本的NetWork Inspector 在 Profler 中,大黄蜂版本的NetWork Inspector 在 App Inspection中。
然后app 访问网络会有这样提示:
我们选中波动 ,可以看到请求的信息
然后我们点击接口信息之后,可以看到请求的详细信息
这样我们就可以通过AndroidStudio 的Profiler 轻松的抓取我们App 的网络信息了。
使用Charles 工具抓包
1.安装证书
首先下载Charles ,打开之后点击Help->SSL Proxying -> Install Charles Root Certificate 安装根证书
然后双击证书,进行信任
电脑端这就配置完了, 接下来配置 客户端
方式1:
手机端通过浏览器下载证书
手机端 对连接wifi 进行代理设置,设置手动代理,将charles 提示的代理地址 设置好,然后charles 就会有一个提示:
然后我们同意就好了。
然后浏览器输入chls.pro/ssl 进行下载证书,下载完成进行安装即可;不过有时候这种方式无法安装,可以通过方式2 进行安装。
方式2:
通过Help->SSL Proxying -> Save Charles Root Certificate 将证书保存在电脑上
然后上传到手机端,点击设置-安全-加密与凭证-安装证书-CA证书,选择我们刚刚的证书进行安装即可。
至此,安装证书的步骤我们就完成了。
2.抓包
此时,当我们进行网络访问 的时候,可以在charles上面看到我们访问的数据了
我们可以通过左下角的Filter 进行地址过滤,找到我们想看的网络数据。
防止抓包
有时候在我们的项目中,因为一些安全问题,我们不想让我们app被抓包,就需要增加一些防止抓包的方法。
数据加密:
我们的接口信息可以采用数据加密的方式,防止信息泄露,这个客户端与后端定义好就可以了。
SSL证书校验:
这种方式需要后端或者运维方面配合,拿到SSL服务器证书。
1.提取证书的公钥
openssl rsa -in certificate.crt -pubout > public_key.pub
2.将 public_key.pub
内的 ---begin public key---
和 ---end public key---
去除,并合并成一行
cat public_key.pub | grep -v ‘PUBLIC’ | awk ‘{printf(“%s”,$0)}’
得到输出类似:
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMI...
3.利用2命令输出的结果,然后 计算sha256摘要 (下载pubkey-sha256.py)
python pubkey-sha256.py MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMI…
得到的输出类似
SHA256:S8Ff3JCaO4V...
将开头的 SHA256:
改成 sha256/
,得到
sha256/S8Ff3JCaO4V...
然后在我们的OkHttp中进行配置一下
OkHttpClient.Builder builder = new OkHttpClient.Builder();builder.certificatePinner(new CertificatePinner.Builder().add("域名", "sha256/S8Ff3JCaO4V...").build());
然后我们再次用charles 进行抓包就会是这样的结果:
虽然存在网络请求记录,但是数据抓不到了。
禁止代理
Okhttp 在建立socket 连接之前,Okhttp 会获取系统的代理信息,如果设置代理,那么通过DNS
解析其IP
然后使用代理IP
来建立socket
连接。如果没有设置代理,那么会使用请求中的url的IP
地址,来建立连接。
/*** Gets the system-wide proxy selector.** @throws SecurityException* If a security manager has been installed and it denies* {@link NetPermission}{@code ("getProxySelector")}* @see #setDefault(ProxySelector)* @return the system-wide {@code ProxySelector}* @since 1.5*/public static ProxySelector getDefault() {SecurityManager sm = System.getSecurityManager();if (sm != null) {sm.checkPermission(SecurityConstants.GET_PROXYSELECTOR_PERMISSION);}return theProxySelector;}/*** Sets (or unsets) the system-wide proxy selector.** Note: non-standard protocol handlers may ignore this setting.** @param ps The HTTP proxy selector, or* {@code null} to unset the proxy selector.** @throws SecurityException* If a security manager has been installed and it denies* {@link NetPermission}{@code ("setProxySelector")}** @see #getDefault()* @since 1.5*/public static void setDefault(ProxySelector ps) {SecurityManager sm = System.getSecurityManager();if (sm != null) {sm.checkPermission(SecurityConstants.SET_PROXYSELECTOR_PERMISSION);}theProxySelector = ps;}
OkHttp
使用ProxySelector
来获取代理信息,在构造OkHttpClient
时是可以设置的,其默认值是ProxySelector.getDefault()
,该默认值会反应出系统的代理信息。 那么我们就可以提供自己的ProxySelector
实现来达到绕过系统代理的能力。
OkHttpClient client = new OkHttpClient.Builder()2 .proxySelector(new ProxySelector() {3 @Override4 public List<Proxy> select(URI uri) {5 return Collections.singletonList(Proxy.NO_PROXY);6 }7 8 @Override9 public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {10
11 }
12 }).build();
设置玩完成之后,再用Charles进行抓包的话,已经抓取不到app 的访问信息了。
总结
上述内容我们主要介绍了两种抓包方式:
- 使用AndroidStudio 自带的Profiler 进行抓包
- 使用Charles
使用Charls 介绍了两种安装证书的方式:
- 使用浏览器安装证书
- 手动安装证书
三种防止抓包的方式:
- 数据加密
- 进行SSL证书校验
- 禁用代理
一文搞懂Android抓包相关推荐
- 一文搞定http抓包工具Fiddler
什么是fiddler fiddler是一个强大好用的http抓包工具,它通过代理服务器的方式将http客户端(可以是浏览器,可以是安卓APP,或者苹果APP)的请求进行拦截处理,只要能够拦截到http ...
- 网络知识扫盲,一文搞懂 DNS
在找工作面试的过程中,面试官非常喜欢考察基础知识,除了数据结构与算法之外,网络知识也是一个非常重要的考察对象. 而网络知识,通常是很抽象,不容易理解的,有很多同学就在这里裁了跟头.为了更好地通过面试, ...
- 一文搞懂如何使用Node.js进行TCP网络通信
摘要: 网络是通信互联的基础,Node.js提供了net.http.dgram等模块,分别用来实现TCP.HTTP.UDP的通信,本文主要对使用Node.js的TCP通信部份进行实践记录. 本文分享自 ...
- 一文看懂Android APK安装的原理
一文看懂Android APK安装的原理 前言 APK包的构成 安装APK 总结 前言 大家有没有想过一个应用的APK是怎么被安装到安卓手机上的,安装的本质是什么?我们知道,Windows应用程序的安 ...
- 一文搞懂指标采集利器 Telegraf
作者| 姜闻名 来源|尔达 Erda 公众号 导读:为了让大家更好的了解 MSP 中 APM 系统的设计实现,我们决定编写一个<详聊微服务观测>系列文章,深入 APM 系统的产品.架构 ...
- 一文搞懂设计模式--模板模式
Hi,大家好.今年的天气实在是太热了,七月份的厦门晒得我觉得身上冒出了烤肉香,不知道各位是否安好,但是在再热的天气也不能阻止我们学习的热情(doge).今天的主题是模板(Template Method ...
- LeetCode刷题复盘笔记—一文搞懂0 - 1背包之494. 目标和问题(动态规划系列第九篇)
今日主要总结一下动态规划0-1背包的一道题目,494. 目标和问题 题目:494. 目标和 Leetcode题目地址 题目描述: 给你一个整数数组 nums 和一个整数 target . 向数组中的每 ...
- 一文搞懂UART通信协议
目录 1.UART简介 2.UART特性 3.UART协议帧 3.1.起始位 3.2.数据位 3.3.奇偶校验位 3.4.停止位 4.UART通信步骤 1.UART简介 UART(Universal ...
- 一文搞懂如何使用ArcGIS API for Python训练深度学习模型
一文搞懂如何使用ArcGIS API for Python训练深度学习模型 文章目录 一文搞懂如何使用ArcGIS API for Python训练深度学习模型 写在前面 一.ArcGIS API f ...
- 一文搞懂什么VR,什么是6Dof,欧拉角,四元数转视图矩阵
目录 一.什么是VR 二.什么是3Dof,6Dof, 9Dof 三.欧拉角(姿态角) 四.Android手机的欧拉角与坐标系 五.安卓坐标系转换欧拉角 六.根据姿态四元数求视图矩阵 一文搞懂什么VR, ...
最新文章
- 连续发表三篇NAR的数据库文章——数据库承建
- 终于知道10月27-28-29这3天为什么调整了
- HDU 1271整数对
- MSM USB插入流程代码分析
- jieba分词并做分析
- 大二生活之致给影响我最大的大学老师,我和老师的一些事
- Android开发之InstanceState详解
- J2ME开发入门专题系列之一:J2ME概述
- java 进程通信代码
- 【金猿投融展】Techsun天正聚合——联接品牌与人
- Window安装RabbitMQ并设置为开机启动
- 专访CAPA梁振宇:信息无障碍是互联网产品的必选项
- vscode+markdown+pandoc写论文
- MBR30200FCT低压降肖特基二极管ASEMI原装
- GEE:变异系数法在遥感影像分析中的应用及权重计算
- vue使用vue-dplayer播放m3u8视频
- uni-app 二维码生成(链接转二维码)
- 外行假装内行,我也来谈谈SAP BAPI和BADI
- xmuoj《C++与Python语法入门练习(By郭炜老师)》python参考代码
- 浏览器控制台 console 保存输出文件