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

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面板中有个Actions按钮,直接选择"Trust Root Certificate"即可。

在Android中安装根证书

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

前提

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

安装为用户级别证书

  • 证书文件 .crt/.cer下载到内部存储,比如/sdcard
  • 文件管理器打开文件,会自动打开证书管理应用,输入名字即可导入
  • 打开 设置 -> 安全和隐私 ->凭据存储 -> 用户 可以查看安装的证书

安装为系统级别证书

把证书文件转换为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 -alZ

-rw-r--r-- root root u:object_r:system_file:s0 5ed36f99.0

  • 重启设备
  • 打开“设置->安全和隐私->凭据存储->系统”可以查看安装的证书。

验证

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

参考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章