抓包分析安卓手机的HTTPS请求

996.icu

工具和资料

HTTP抓包流程

为了实现对安卓手机或模拟器的网络请求抓包,简单流程为:

  • 电脑上安装Fiddler等抓包工具,其原理就是一个HTTP/HTTPS代理服务器。注意需要允许远程电脑连接
  • 确保电脑和安卓手机在同一个子网中,互相能够PING通。比如:可以连接同一个WIFI热点,或者用电脑给手机开热点都可以
  • 在手机的WLAN设置中,设置WIFI代理,指向电脑的IP和抓包工具的端口,比如:192.168.122.101:8888
  • 这个时候,如一切正常,HTTP代理就已经可以工作了,可以在手机浏览器里访问HTTP站点,看看抓包工具中是否有反应。

HTTPS抓包原理

  • HTTPS抓包就要麻烦一些了,要知道HTTPS的报文是加密的,主要防的就是在网络传输中间环节做手脚。
  • 不过抓包工具可以用中间人方式(Man-In-The-Middle)方式来解析HTTPS报文,大概原理是对访问者假装自己是目标网站,对目标网站假装自己是访问者,
  • 这需要访问者信任这个中间人签发的(伪造的)网站证书,具体做法是将抓包工具提供的根证书添加到系统的“受信任的根证书颁发机构”中去。
  • 在电脑上比较简单,打开"Fiddler设置->HTTPS面板":

    1. 选中"Capture HTTPS CONNECTs", "Decrypt HTTPS traffic", "Ignore server certificate errors(unsafe)"
    2. 点击右面的Actions按钮,选择"Trust Root Certificate"即可

在Android中安装根证书

但是在安卓系统中就要自己动手安装根证书了,下面梳理一下整个过程:

前提

  • Android 4.4及以上
  • 手机已经root,则可以安装为系统证书,否则只能安装用户证书
    区别在于:用户证书会要求手机必须有锁屏密码
  • adb连接手机正常

安装为用户级别证书

  • 把证书文件 .crt/.cer下载到内部存储,比如/sdcard
  • 文件管理器打开文件,会自动打开证书管理应用,给证书起个名字即可导入,另外需要设定屏幕解锁密码
  • 打开 设置 -> 安全和隐私 ->凭据存储 -> 用户 可以查看安装的证书
  • 对于Fiddler有个更简便的办法:

    • 打开手机浏览器,访问 http://ipv4.fiddler:8888/
    • 打开的页面最下面的链接:You can download the Fiddler certificate,点击即可下载安装证书,步骤和从文件安装一致

安装为系统级别证书

把证书文件转换为Android可识别格式

  • 确定文件名。我这里安装了两个不同工具的证书,即Fiddler和LittleProxy-MITM,它们的证书格式不同,因此使用的命令也略有不同。
    openssl x509 -inform DER -subject_hash_old -in FiddlerRoot.cer
    openssl x509 -inform PEM -subject_hash_old -in littleproxy-mitm.pem
    把输出的第一行的8位hex字符串保存下来,比如269953fb,最终的证书文件名则为269953fb.0
  • 转换证书文件格式
    openssl x509 -inform DER -in FiddlerRoot.cer -text > 269953fb.0
    openssl x509 -inform PEM -text -in littleproxy-mitm.pem > 4bb9877f.0
  • 编辑输出的文件,把"-----BEGIN CERTIFICATE-----"到文件结束这部分移动到文件首部

安装证书

  • 把证书文件复制到手机内部存储。adb push后第一个参数是证书文件在电脑上的路径,第二个是手机内部存储的路径
    adb push path/to/269953fb.0 /sdcard
  • 从内部存储复制到系统证书目录。adb shell启动命令行交互,su获取超级用户权限,mount将/system目录重新挂载为可读写,最后执行复制

    adb shell
    su
    mount -o remount,rw /system
    cp /sdcard/269953fb.0 /system/etc/security/cacerts/
  • 修改文件权限。

    cd /system/etc/security/cacerts/
    chmod 644 269953fb.0
  • 用ls命令检查文件权限是否正确。下面一行是期望的输出。

    ls -alZ
    -rw-r--r-- root root u:object_r:system_file:s0 5ed36f99.0
  • 重启设备
  • 打开“设置->安全和隐私->凭据存储->系统”可以查看安装的证书。

验证

  • 手机浏览器打开HTTPS站点,看抓包工具中是否可以正常解析HTTPS报文。

参考

阅读 7.5k

推荐阅读
玩儿编程
用户专栏

编程也是可以玩儿的!微信公众号“玩儿编程”

62 人关注
32 篇文章
专栏主页