今天主要跟大家介绍一下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 的访问信息了。

总结

上述内容我们主要介绍了两种抓包方式:

  1. 使用AndroidStudio 自带的Profiler 进行抓包
  2. 使用Charles

使用Charls 介绍了两种安装证书的方式:

  1. 使用浏览器安装证书
  2. 手动安装证书

三种防止抓包的方式:

  1. 数据加密
  2. 进行SSL证书校验
  3. 禁用代理

一文搞懂Android抓包相关推荐

  1. 一文搞定http抓包工具Fiddler

    什么是fiddler fiddler是一个强大好用的http抓包工具,它通过代理服务器的方式将http客户端(可以是浏览器,可以是安卓APP,或者苹果APP)的请求进行拦截处理,只要能够拦截到http ...

  2. 网络知识扫盲,一文搞懂 DNS

    在找工作面试的过程中,面试官非常喜欢考察基础知识,除了数据结构与算法之外,网络知识也是一个非常重要的考察对象. 而网络知识,通常是很抽象,不容易理解的,有很多同学就在这里裁了跟头.为了更好地通过面试, ...

  3. 一文搞懂如何使用Node.js进行TCP网络通信

    摘要: 网络是通信互联的基础,Node.js提供了net.http.dgram等模块,分别用来实现TCP.HTTP.UDP的通信,本文主要对使用Node.js的TCP通信部份进行实践记录. 本文分享自 ...

  4. 一文看懂Android APK安装的原理

    一文看懂Android APK安装的原理 前言 APK包的构成 安装APK 总结 前言 大家有没有想过一个应用的APK是怎么被安装到安卓手机上的,安装的本质是什么?我们知道,Windows应用程序的安 ...

  5. 一文搞懂指标采集利器 Telegraf

    作者| 姜闻名 来源|尔达 Erda 公众号 ​ 导读:为了让大家更好的了解 MSP 中 APM 系统的设计实现,我们决定编写一个<详聊微服务观测>系列文章,深入 APM 系统的产品.架构 ...

  6. 一文搞懂设计模式--模板模式

    Hi,大家好.今年的天气实在是太热了,七月份的厦门晒得我觉得身上冒出了烤肉香,不知道各位是否安好,但是在再热的天气也不能阻止我们学习的热情(doge).今天的主题是模板(Template Method ...

  7. LeetCode刷题复盘笔记—一文搞懂0 - 1背包之494. 目标和问题(动态规划系列第九篇)

    今日主要总结一下动态规划0-1背包的一道题目,494. 目标和问题 题目:494. 目标和 Leetcode题目地址 题目描述: 给你一个整数数组 nums 和一个整数 target . 向数组中的每 ...

  8. 一文搞懂UART通信协议

    目录 1.UART简介 2.UART特性 3.UART协议帧 3.1.起始位 3.2.数据位 3.3.奇偶校验位 3.4.停止位 4.UART通信步骤 1.UART简介 UART(Universal ...

  9. 一文搞懂如何使用ArcGIS API for Python训练深度学习模型

    一文搞懂如何使用ArcGIS API for Python训练深度学习模型 文章目录 一文搞懂如何使用ArcGIS API for Python训练深度学习模型 写在前面 一.ArcGIS API f ...

  10. 一文搞懂什么VR,什么是6Dof,欧拉角,四元数转视图矩阵

    目录 一.什么是VR 二.什么是3Dof,6Dof, 9Dof 三.欧拉角(姿态角) 四.Android手机的欧拉角与坐标系 五.安卓坐标系转换欧拉角 六.根据姿态四元数求视图矩阵 一文搞懂什么VR, ...

最新文章

  1. 连续发表三篇NAR的数据库文章——数据库承建
  2. 终于知道10月27-28-29这3天为什么调整了
  3. HDU 1271整数对
  4. MSM USB插入流程代码分析
  5. jieba分词并做分析
  6. 大二生活之致给影响我最大的大学老师,我和老师的一些事
  7. Android开发之InstanceState详解
  8. J2ME开发入门专题系列之一:J2ME概述
  9. java 进程通信代码
  10. 【金猿投融展】Techsun天正聚合——联接品牌与人
  11. Window安装RabbitMQ并设置为开机启动
  12. 专访CAPA梁振宇:信息无障碍是互联网产品的必选项
  13. vscode+markdown+pandoc写论文
  14. MBR30200FCT低压降肖特基二极管ASEMI原装
  15. GEE:变异系数法在遥感影像分析中的应用及权重计算
  16. vue使用vue-dplayer播放m3u8视频
  17. uni-app 二维码生成(链接转二维码)
  18. 外行假装内行,我也来谈谈SAP BAPI和BADI
  19. xmuoj《C++与Python语法入门练习(By郭炜老师)》python参考代码
  20. 浏览器控制台 console 保存输出文件

热门文章

  1. 【Android】五种常用布局方式详解(图文+示例)持续更新中...
  2. Android 下载Zip文件,并解压到本地
  3. LOFTER轻博模板设计
  4. 基于SIFT特征提取的图像拼接算法matlab仿真
  5. 浅析 DDD 领域驱动设计
  6. 【华为机试题 HJ22】汽水瓶
  7. IE11怎么设置默认以IE8的方式解析
  8. 全球知名企业高管预测2019人工智能趋势
  9. 解决MDK(Keil)Download图标灰色不能下载的问题
  10. GlobalMapper20脚本应用(数据批量自动化处理)