暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Android 高版本用Charles抓包

阿柒的魔法屋 2022-05-09
4723

前提

   最近一段时间,线上有一个偶现问题被报给客户端,这个问题比较难复现。经过代码调试验证,发现大概率可能是接口数据的问题,为了最准确的定位问题,最终决定用Charles抓包来进行问题定位。但是之前没接触过这个, 所以只能自己慢慢摸索了。


手机端安装证书

1. 以Mac电脑为例,打开电脑端Charles, 首先设置抓包端口,这里设置为 28888


2. 做完这一步,好了,已经有一个完美的开始了。

接下来我们来看看我们电脑的本地IP是多少:


3. 下面我们就开始在手机端操作,保证手机和电脑连接的是同一个Wifi. 设置手机端的代理:

ip地址设置为电脑的局域网ip: 192.168.3.167

端口号为我们第一步设置的端口:28888

设置结束后,保存即可。


4. 进行 charles 证书安装。这一步可能会遇到问题,我是卡在这一段时间, 官网的方法是在浏览器输入:chls.pro/ssl。但是发现根本不会自动下载 charles 的代理证书啊。


研究了一下之后,发现 charles 给我们开了一个后门,那就是导出电脑 CA 证书,

Charles -> Help -> SSL Proxying -> Save Charles Root Certificate...

将证书保存到本地后, 通过 Android Studio 导入到手机, 记得自己的放入位置。

然后进行证书安装。

5. charles-ssl-proxying-certificate.pem 导入之后, 我们进入到下面的界面:

设置 -> 安全 -> 更多安全设置 -> 加密和凭证 -> 从存储设备安装


点击左上角按钮, 选择我们刚才放置 pem 证书的位置。点击安装。

选择WLAN (如果不可以,可以再选择 VPN和应用)。安装完,我们就可以在用户凭据里面看到。也可以在受信任凭据里面的用户Tab 查看到。

6. 接下来,我们需要在我们的工程里面做一点小小的设置(`因为 Android 7.0之后,默认不能对APP的https请求进行抓包`)。

在app的res目录下新建xml文件夹, 新建一个network_security_config.xml


    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
    <base-config cleartextTrafficPermitted="true">
    <trust-anchors>
    <certificates src="user"/>
    <certificates src="system"/>
    </trust-anchors>
    </base-config>
    </network-security-config>


    接下来还需要在AndroidManifest.xml中配置android:networkSecurityConfig属性来让上述配置生效:

      <application
      ...
      android:networkSecurityConfig="@xml/network_security_config">
      ...
      </application>

      做完上面的步骤,我们就可以开心的进行抓包啦!


      总结

             经过一系列的折腾和抓包,最终定位了问题出在CDN解析的地方。也算是完美的甩了一锅。生命在于折腾,让我们继续接下来的冒险之旅吧。


      文章转载自阿柒的魔法屋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论