除了最常见的网页爬虫,还有一种是针对客户端软件的爬虫。前者使用范围广泛,对后者的数据采集需求越来越大。潜水多年的小白第一次发帖,内容如有不当,请随意斧正。
常见客户端:
PC( Windows 、macOS 、Linux )、Android 、IOS
抓包工具:
支持平台:Windows 、 macOS 、 Linux
以下内容都是基于这款抓包软件。
需求分析:
想要批量或者自动获取某一平台客户端的某些数据。要做到我们的需求,需要使用网络抓包工具。据了解得知,网络协议层的每一层几乎都有对应的抓包工具。现如今最常用的协议是 https、http 这两种网络传输协议。
HTTP 协议抓包:
http 协议不包含 SSL ,抓包时只需要简单配置网络代{过}{滤}理即可抓取,而 https 需要安装证书并且信任证书才能抓取,否则无法解析显示为红色的 unknown 。
HTTPS 协议抓包:
https 协议在配置网络代{过}{滤}理的前提下还需要安装证书,并且必须让系统信任安装的证书才能实现对 https 协议进行抓包。
Charles 快速上手:
主界面:
常用功能菜单:
常用功能菜单,故名思义这两个菜单是经常会用到的,这里先做一些说明:
Proxy:
Help —— SSL Porxying:
安装 Charles 证书
macOS :
[ol]
[/ol]
IOS :
[ol]
[/ol]
Android:
自 Android 7.0 以后无法信任第三方根证书,抓取第三方 app 数据时,现有方法几乎都需要 Root 设备,自行考虑风险。还可以使用 Android 模拟器来抓取数据,但是模拟器的信息不是很完整,容易被客户端app后台所识别出来,比较费力不讨好。现有的几种 Root 后抓取 HPPTS 的方法我都尝试过:
使用 Xposed & edxposed 模块,在安装了 Xposed & Edxposed 框架的前提下,再安装 TrustMeAlready 模块并激活(经测试,部分系统 Android 10 ,部分软件无法使用,比如X信小程序);
安装 VirtualXposed ,再安装 TrustMeAlready 模块并激活,因为 VirtualXposed 较容易被第三方app识别,从而禁止使用,优势是不需要root ;
Root 后将 Charles 根证书导入并信任根证书,这个办法其实是将 Charles 根证书转换后放到 Android 系统根目录内。
[ol]
Charles 主界面点击help —— SSL Porxying —— Save Charles Root Certificate ,选择保存为 .pem 文件,以下只讲这种文件的转换方法。.cer 文件转换方法请自行寻找,欢迎交流。
保存好 .pem 文件后,macOS 需要安装 openssl ,然后打开 终端app —— 输入 openssl x509 -subject_hash_old -in Charles根证书文件.pem 回车结果如下,圈起来的这串字符很重要: d2479ff1
上一步完成后,将下载的 charles-proxy-ssl-proxying-certificate.pem 重命名为 d2479ff1.0 ,将 d2479ff1.0 文件放到手机内。
手机端安装 MT文件管理器 ,打开授予 root 权限,使用 MT文件管理器复制到 /system/etc/security/cacerts/ 文件夹内,重启手机,在设置内搜索 加密与凭据 —— 打开后找到 信任的凭据 打开 —— 在系统部分可以找到 详细信息为 Charles Proxy CA (……) 的证书,代表成功导入证书到系统中。 可使用 Charles 抓取 HTTPS 协议。
[/ol]
利用 Magisk 导入证书
自 Android O(8.0)以来,即使是获取了 root 权限,也很难修改系统分区文件,无法进行读写。且当下手机 root 方式都是利用 Magisk 修补 boot ,Magisk 还可以利用旁载的方式加载各种自定义模块,包括且不限于修改、替换系统文件。那么在这里我们可以根据上文所诉,创建一个 Magisk 补丁包,用以导入证书文件到根目录。
首先还是需要安装 Charles 以及 OpenSSL( Windows 推荐使用 choco install openssl 命令安装,需使用带管理员权限的 powershell )
导出证书文件
依次点击 charles -> help -> SSL Proxying -> Save Charles Root …… 选择位置导出 Charles 证书文件
转换证书文件
命令行切换到证书所在文件夹,运行:
openssl x509 -subject_hash_old -in 证书文件.pem
将证书文件改名为 d2479ff1.0 (以上文为例,后缀为 .0 )
创建 Magisk 模块
首先需要 Magisk 模块模板 magisk-module-template ,解压后文件列表为:
└─magisk-module-template-master
│ customize.sh
│ module.prop
│ post-fs-data.sh
│ README.md
│ service.sh
│ system.prop
│
├─META-INF
│ └─com
│ └─android
│ update-binary
│ updater-script
│
└─system #内部文件夹为自建
└─etc
└─security
└─cacerts
上图详细文件说明详见 Developer Guides这里我们关注 system 文件夹及子文件夹即可。模板文件是仅有 system 而没有其子文件夹的,system/etc/security/cacerts/ 刚好对应着我们本来要放证书的地方,即系统证书所在目录.此时将我们的证书文件放到 cacerts 文件夹内,将整个文件夹压缩为 zip 文件,放入手机内,在 Magisk 内刷入即可,验证方式如上。