关于android:Android端Charles抓包

30次阅读

共计 4967 个字符,预计需要花费 13 分钟才能阅读完成。

目录介绍

  • 01. 下载安装
  • 02. 抓包代理设置
  • 03. 抓包 Https 操作
  • 04. 抓包原理介绍
  • 05. 抓包数据介绍
  • 06. 常见问题总结
  • 07.Android 拦挡抓包

01. 下载安装

  • 下载地址(下载对应的平台软件即可)

    • https://www.charlesproxy.com/…
  • 下载破解文件

    • https://assets.examplecode.cn…
    • 关上 Finder, 在应用程序中抉择 Charles 并右键抉择显示包内容
    • 显示包内容后在 Content/Java 目录下将破解文件复制过去替换掉原文件即可
    • 如果关上 Charles 时提醒:程序已损坏,打不开。您应该将它移到废纸篓。此时须要在终端中执行以下命令即可:sudo spctl –master-disable

02. 抓包代理设置

  • charles 代理设置

    • 能够设置抓包数据类型,包含 http 与 socket 数据。能够依据须要在 proxies 栏下勾选。这里简略操作进行设置,Proxy —> Proxy Settings 默认端口是 8888,依据理论状况可批改。

  • Android 手机代理设置

    • 首先获取电脑 ip 地址

      • 第一种形式:查看本机 IP 地址:Help —> Local IP Addresses

      • 第二种形式:命令行形式,输出 ifconfig 即可

    • 而后关上手机设置代理

      • 留神:手机须要和电脑应用同一个 Wi-Fi 网络,这是前提!!!
      • 操作步骤:关上 WiFi 列表 —> 长按连贯的 WiFi 批改网络设置代理 — > 设置代理信息

  • 最初抓包如下

    • 抓包数据如下所示

03. 抓包 Https 操作

  • 须要做哪些操作

    • 1. 电脑上须要装置证书
    • 2. 手机上须要装置证书
    • 3.Android 我的项目代码设置兼容
  • 1. 电脑上须要装置证书

    • 第一步装置证书:help —> SSl Proxying —> install charles root certificate —> 装置证书
    • 第二步设置 SSL 属性:Proxy —> SSL Proxy Settings —> 而后 add 操作(设置 port 为 443)。如下所示

    • 而后抓包试一下,会发现 Android7.0 手机之前能够抓包,然而 Android7.0 之后是无奈抓包的

      • 报错信息:客户端 SSL 握手失败: 解决证书时呈现未知问题(certificate_unknown)
    • 如何解决在 Android7.0 之后也能够抓包 https 信息,接着往下看。
  • 2. 手机上须要装置证书

    • 第一步下载证书

      • 关上浏览器,输出:chls.pro/ssl,就会本人下载到手机上,这里须要记住下载实现保留到本地的门路。
    • 第二步装置证书

      • 设置 —> 更多设置 —> 系统安全 —> 加密与凭据 —> 从 SD 卡装置,抉择之前保留证书的门路。
      • 留神,有的手机是间接点击下载的文件即可装置……
    • 安装操作如下图所示

  • 3.Android 我的项目代码设置兼容

    • 增加平安配置文件。如下所示:
    • java.security.cert.CertPathValidatorException: Trust anchor for certification path not found 这个异样,解决方案如下所示:
    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <base-config cleartextTrafficPermitted="true">
            <trust-anchors>
                <certificates
                    overridePins="true"
                    src="system" />
                <certificates
                    overridePins="true"
                    src="user" />
            </trust-anchors>
        </base-config>
    </network-security-config>
    
    // 清单文件配置
    <application
        android:networkSecurityConfig="@xml/network_security_config_debug">
    • Android 7.0 及以上为何不能轻易抓取到 Https 申请的明文数据?

      • 在 Android 7.0(API 24),有一个名为“Network Security Configuration”的新平安性能。这个新性能的指标是容许开发人员在不批改利用程序代码的状况下自定义他们的网络安全设置。如果利用程序运行的零碎版本高于或等于 24,并且 targetSdkVersion>=24,则只有零碎 (system) 证书才会被信赖。所以用户 (user) 导入的 Charles 根证书是不被信赖的。
  • 抓 https 最初后果如下所示

04. 抓包原理介绍

  • 1. 抓包的原理:

    • 代理。客户端申请 -> 通过代理 -> 达到服务端 服务端返回 -> 通过代理 -> 达到客户端
  • 2. 任何 Https 的 app 都能抓的到吗?

    • 7.0 以下是能够的,只有手机里装置对应 CA 证书,比方用 charles 抓包,手机要装置 charles 提供的证书就行。
    • Android 7.0 之后,Google 推出更加严格的平安机制,利用默认不信赖用户证书(手机里本人装置证书),本人的 app 能够通过配置解决,然而抓其它 app 的 https 申请就行不通。
  • 3. 如何防止抓包

    • 1. 基于抓包原理的根底上,间接应用 okhtttp 禁止代理,就能够了 builder.proxy(Proxy.NO_PROXY); 通过测试,能够防止抓包
    • 2. 间接应用加密协议,全是字段乱码,把域名换装 IP。这样根本他人很难抓到,像混同一样
  • 4.charles 抓包原理图

  • 5. 大略步骤流程

    • 第一步,客户端向服务器发动 HTTPS 申请,charles 截获客户端发送给服务器的 HTTPS 申请,charles 伪装成客户端向服务器发送申请进行握手。
    • 第二步,服务器发回相应,charles 获取到服务器的 CA 证书,用根证书(这里的根证书是 CA 认证核心给本人颁发的证书)公钥进行解密,验证服务器数据签名,获取到服务器 CA 证书公钥。而后 charles 伪造本人的 CA 证书(这里的 CA 证书,也是根证书,只不过是 charles 伪造的根证书),假冒服务器证书传递给客户端浏览器。
    • 第三步,与一般过程中客户端的操作雷同,客户端依据返回的数据进行证书校验、生成明码 Pre_master、用 charles 伪造的证书公钥加密,并生成 HTTPS 通信用的对称密钥 enc_key。
    • 第四步,客户端将重要信息传递给服务器,又被 charles 截获。charles 将截获的密文用本人伪造证书的私钥解开,取得并计算失去 HTTPS 通信用的对称密钥 enc_key。charles 将对称密钥用服务器证书公钥加密传递给服务器。
    • 第五步,与一般过程中服务器端的操作雷同,服务器用私钥解开后建设信赖,而后再发送加密的握手音讯给客户端。
    • 第六步,charles 截获服务器发送的密文,用对称密钥解开,再用本人伪造证书的私钥加密传给客户端。
    • 第七步,客户端拿到加密信息后,用公钥解开,验证 HASH。握手过程正式实现,客户端与服务器端就这样建设了”信赖“。
    • 在之后的失常加密通信过程中,charles 如何在服务器与客户端之间充当第三者呢?
    • 服务器—> 客户端:charles 接管到服务器发送的密文,用对称密钥解开,取得服务器发送的明文。再次加密,发送给客户端。
    • 客户端—> 服务端:客户端用对称密钥加密,被 charles 截获后,解密取得明文。再次加密,发送给服务器端。因为 charles 始终领有通信用对称密钥 enc_key,所以在整个 HTTPS 通信过程中信息对其通明。
  • 6. 总结一下

    • HTTPS 抓包的原理还是挺简略的,简略来说,就是 Charles 作为“中间人代理”,拿到了服务器证书公钥和 HTTPS 连贯的对称密钥,前提是客户端抉择信赖并装置 Charles 的 CA 证书,否则客户端就会“报警”并停止连贯。这样看来,HTTPS 还是很平安的

05. 抓包数据介绍

  • HTTP 申请包的构造

    • 申请报文

      • 申请报文构造格局:

        申请行:<method> <request-URL> <version>
        头部:<headers>
        主体:<entity-body>
      • 申请报文构造示意图:

      • 例子:

        • 申请了就会收到响应包(如果对面存在 HTTP 服务器)
        POST /meme.php/home/user/login HTTP/1.1
        Host: 114.215.86.90
        Cache-Control: no-cache
        Postman-Token: bd243d6b-da03-902f-0a2c-8e9377f6f6ed
        Content-Type: application/x-www-form-urlencoded
        
        tel=13637829200&password=123456
    • 常见的是那些

      • User-Agent:产生申请的浏览器类型。
      • Accept:客户端可辨认的响应内容类型列表;
      • Accept-Language:客户端可承受的自然语言;
      • Accept-Encoding:客户端可承受的编码压缩格局;
      • Host:申请的主机名,容许多个域名同处一个 IP 地址,即虚拟主机;
      • Connection:连贯形式(close 或 keep-alive);
      • Cookie:存储于客户端扩大字段,向同一域名的服务端发送属于该域的 cookie;
  • HTTP 响应包构造

    • 响应报文

      • 响应报文构造格局:

        状态行:<version> <status> <reason-phrase>
        响应头部:<headers>
        响应主体:<entity-body>
      • 响应报文构造示意图:

      • 例子:

        HTTP/1.1 200 OK
        Date: Sat, 02 Jan 2016 13:20:55 GMT
        Server: Apache/2.4.6 (CentOS) PHP/5.6.14
        X-Powered-By: PHP/5.6.14
        Content-Length: 78
        Keep-Alive: timeout=5, max=100    Connection: Keep-Alive
        Content-Type: application/json; charset=utf-8
        
        {"status":202,"info":"\u6b64\u7528\u6237\u4e0d\u5b58\u5728\uff01","data":null}
    • 常见的响应头部参数

      • Allow 服务器反对哪些申请办法(如 GET、POST 等)。
      • Content-Encoding 文档的编码(Encode)办法。
      • Content-Length 示意内容长度。只有当浏览器应用长久 HTTP 连贯时才须要这个数据。
      • Content-Type 示意前面的文档属于什么 MIME 类型。
      • Server 服务器名字。
      • Set-Cookie 设置和页面关联的 Cookie。
      • ETag:被申请变量的实体值。ETag 是一个能够与 Web 资源关联的记号(MD5 值)。
      • Cache-Control:这个字段用于指定所有缓存机制在整个申请 / 响应链中必须遵从的指令。
  • 响应报文状态码

    • 蕴含了状态码以及起因短语,用来告知客户端申请的后果。
    • 对于状态码,能够看这篇文章,http 状态码。

      状态码 类别 起因短语
      1XX Informational(信息性状态码) 接管的申请正在解决
      2XX Success(胜利状态码) 申请失常处理完毕
      3XX Redirection(重定向状态码) 须要进行附加操作以实现申请
      4XX Client Error(客户端谬误状态码) 服务器无奈解决申请
      5XX Server Error(服务器谬误状态码) 服务器解决申请出错

06. 常见问题总结

  • 1. 配置好后无奈关上 APP

    • 在咱们抓取时碰到个别 APP 在配置代理后无奈关上,这个次要是因为该 APP 做了避免抓取解决,比方校验 https 的证书是否非法等,这种解决办法能够通过反编译 APP,查看源码解决,难度较大。
  • 2. 抓取到的内容为乱码

    • 有的 APP 为了避免抓取,在返回的内容上做了层加密,所以从 Charles 上看到的内容是乱码。这种状况下也只能反编译 APP, 钻研其加密解密算法进行解密。

07.Android 拦挡抓包




  • 网络拦挡剖析,次要是剖析网络流量损耗,以及 request,respond 过程工夫。打造网络分析工具……
  • 我的项目代码地址:https://github.com/yangchong2…
  • 如果你感觉这个拦挡网络助手不便了测试,以及开发中查看网络数据,能够 star 一下……

网络拦挡库:https://github.com/yangchong2…

正文完
 0