抓包工具的安装和配置
1 Charles的安装和配置
1.1 Charles的安装
- 下载地址:https://www.charlesproxy.com/download/
- 安装地址:D:\Python\Charles
- 系统版本:W10 64位
- 注册破解:
- Registered Name: https://zhile.io
- License Key: 48891cf209c6d32bf4
1.2 Charles的配置
1.2.1 PC端证书安装
首先打开Charles,按照如下路径依次点击:
Help –> SSL Proxying –> Install Charles Root Certificate
即可进入证书安装页面。在弹出的证书安装页面点击安装证书(I)...进入证书安装向导,直接点击下一步,选中将所有证书放入下列存储(P),然后点击浏览按钮,从中选择证书存储位置为受信任的根证书颁发机构,再次点击确定按钮,然后点击下一步,再继续点击下一步按钮完成导入。
1.2.2 移动端证书安装
以IOS系统为例,首先查看PC端Charles代理是否开启:
Proxy –> Proxy Settings
打开代理设置页面,确保当前的HTTP代理是开启的,即勾选中Enable transparent HTTP proxying。此代理端口为8888,也可自行修改。
接下来将手机和电脑连接在同一个局域网下(同一个WIFI网络即可)。然后查询PC端的IP地址(不是网络IP地址,是机器的IPv4地址):
Wireless LAN adapter WLAN: Connection-specific DNS Suffix . : Link-local IPv6 Address . . . . . : fe80::a982:2d9c:45a7:7a96%5 IPv4 Address. . . . . . . . . . . : 192.168.31.48 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 192.168.31.1
然后启用手机已连接网络(WIFI网络)的http代理,将服务器设置为IPv4地址,端口设置为8888,然后保存。最后在PC端回出现一个提示窗口,询问是否信任此设备,点击Allow按钮即可。这样手机和PC就连接在同一个局域网内,并且设置了Charles的代理,即Charles可以抓取到流经App的数据包了。
接下来再移动端安装Charles的HTTP证书,首先打开Charles,然后按照如下路径依次点击:
Help –> SSL Proxying –>Install Charles Root Certificate on a Mobile Device
此时会出现一个提示框,提示在移动端设置好Charles代理(IPv4:8888),然后在手机浏览器(移动端系统自带的浏览器)中打开http://chls.pro/ssl下载证书,然后会弹出安装证书界面,点击安装即可。最后,若IOS系统版本是10.3以上,还需要在:
设置 –> 通用 –> 关于本机 –> 证书信任设置
中将证书的完全信任开关打开。到此,整个配置完成,打开Charles,并在手机上随便浏览一下网页,可以发现Charles已经能够抓取到数据包。
1.3 Charles的乱码问题
抓取的过程中发现抓取到的数据包乱码和链接unknown问题,原因是需要配置SSL代理,按如下顺序依次点击:
Proxy –> SSL Proxying Setting –> Enable SSL Proxying
然后点击Add,在弹出的窗口中,Host填写*,Port填写443,然后点击确定,最后重启Charles即可解决乱码问题。
2 mitmproxy的安装和配置
mitmproxy是一个支持HTTP和HTTPS的转包程序,类似Fiddler、Charles的功能。只不过通过控制台的形式操作。此外,mitmproxy还有两个关联组件,一个是mitmdump,它是mitmproxy的命令行接口,利用它可以对接Python脚本,实现监听后的处理;另一个是mitmweb,它是web程序,通过它可以清楚的观察到mitmproxy捕获到的请求。
2.1 mitmproxy的相关链接
- mitmproxy Github地址:https://github.com/mitmproxy/mitmproxy
- 官方网站:https://mitmproxy.org/
- PyPI:https://pypi.org/project/mitmproxy/
- 官网文档:https://docs.mitmproxy.org/stable/
- mitmdump脚本:https://docs.mitmproxy.org/stable/addons-scripting/
- mitmdump Github地址:https://github.com/mitmproxy/mitmproxy/releases
- DockerHub:https://hub.docker.com/r/mitmproxy/mitmproxy/
2.2 mitmproxy的安装方法
- 使用pip命令直接安装:
C:\Users\Strive>pip3 install mitmproxy
如果网络没有问题,会直接安装好mitmproxy和所有的依赖库。
- 在Github上下载安装包:
Tips:Windows上不支持mitmproxy的控制台接口,但是可以使用mitmdump和mitmweb。
2.3 mitmproxy的证书配置
对于mitmproxy来说,如果想要截获HTTPS请求,就需要设置证书。mitmproxy在安装后会提供一套CA证书,只要客户端信任了mitmproxy提供的证书,就可以通过mitmproxy截获HTTPS请求的具体内容。
- 首先,运行一下命令产生CA证书,并启动mitmdump:
mitmdump
- 接下来在用户目录下的.mitmproxy目录里找到CA证书,一共5个证书和一个导入证书引导页文件:
-
- mitmproxy-ca.p12: 打开该文件,会进入导入证书引导页。
- mitmproxy-ca.pem: PEM格式的证书私钥
- mitmproxy-ca-cert.pem: PEM格式证书,适用于大多数非Windows平台
- mitmproxy-ca-cert.p12:PKCS12格式证书,适用于Windows平台
- mitmproxy-ca-cert.cer: 与mitmproxy-ca-cert.pem相同,只是改变了后缀,适用于部分Android平台
- mitmproxy-dhparam.pem: PEM格式的密钥文件,用于增强SSL安全性
- 然后打开mitmproxy-ca.p12文件,进入导入证书引导页,点击下一步会出现密码设置提示,不需要设置密码,直接点击下一步,勾选将所有的证书都放入下列存储(P),再点击浏览,选择证书存储位置为受信任的根证书颁发机构,接着点击确定,然后点击下一步,如果有安全警告弹出,直接点击是。这样就完成Windows上mitmproxy证书的配置。
- 将mitmproxy-ca-cert.pem文件用邮件发送到Iphone上,然后再Iphone上直接点击附件并识别安装。注意,必须要用Iphone自带的邮件App收邮件,才能识别附件。
- 最后启用手机已连接网络(WIFI网络)的http代理,将服务器设置为IPv4地址,端口设置为8080(Charles的端口为8888),就可以成功HTTPS请求的具体内容。
3 Appium的安装和配置
Appium是移动端的自动化测试工具,类似于PC端的Selenium,利用它可以驱动Android、IOS等设备完成自动化测试,比如模拟点击、滑动、输入等操作。Appium负责驱动移动端来完成一系列操作,对于IOS设备来说,它使用UIAutomation来实现驱动;对于Android设备来说,它使用UIAutomator和Selendroid来实现驱动。同时,Appium也相当于一个服务器,可以向其发送一些操作指令,它会根据不同的指令对移动设备进行驱动,以完成不同的的工作。
3.1 Appium的相关链接
- Github地址: https://github.com/appium/appium
- 官网网站: http://appium.io/(需要使用代理)
- 官方文档: http://appium.io/docs/en/about-appium/intro/(需要使用代理)
- 下载地址: https://github.com/appium/appium-desktop/releases
- Python Client: https://github.com/appium/python-client
3.2 Appium的安装方法
- 下载Appium Desktop来安装Appium:
Appium Desktop支持全平台的安装,直接在https://github.com/appium/appium-desktop/releases下载对应平台的最新版本安装即可。
-
Windows平台可以下载exe安装包appium-desktop-setup-1.7.0.exe。
-
Mac平台可以直接下载dmg安装包如Appium-1.7.0.dmg。
-
Linux平台可以选择下载源码,但是更推荐使用Node.js安装方式。
-
- 使用Node.js的方式来安装Appium:
首先需要安装Node.js,具体安装方式可以参考http://www.runoob.com/nodejs/nodejs-install-setup.html,安装完成之后就可以使用npm命令了。接下来使用npm命令全局安装Appium即可:npm install -g appium
3.3 Android开发环境配置
如果使用Android设备进行App抓取的话,还需要下载和配置Android SDK,这里推荐直接安装Android Studio(安装教程):
在安装Android Studio之前还要确定已经安装好了Java JDK(安装教程):
完成上述环境配置后,下载逍遥模拟器,然后进行安装:
- 模拟器安装路径:D:\Program Files\Microvirt
- 模拟器adb路径: D:\Program Files\Microvirt\MEmu\adb.exe(和Android SDK的adb重名)
- 模拟器adb版本,进入MEmu目录,终端执行命令adb:
D:\Program Files\Microvirt\MEmu>adb Android Debug Bridge version 1.0.31
- 查看模拟器设备端口号,进入Memu目录,终端执行命令adb devices:
D:\Program Files\Microvirt\MEmu>adb devices List of devices attached 127.0.0.1:21503 device
可以查看到设备地址和端口127.0.0.1:21503
- Android SDK路径: D:\Java\Android\Sdk
- Andriod SDK adb路径:D:\Java\Android\Sdk\platform-tools\adb.exe
- Android SDK adb版本,因为已经配置好了环境变量,所以终端任意位置执行命令adb:
C:\Users\Strive>adb Android Debug Bridge version 1.0.40 Version 4986621 Installed as D:\Java\Android\Sdk\platform-tools\adb.exe
通过上述内容可以发现模拟器的adb和Android SDK的adb版本不同,为了实现Appium连接上模拟器,需要将模拟器的adb版本替换成Android SDK adb版本,并且替换后的adb命令名字必须和原来模拟器adb名字一样(例如,模拟器本来的adb文件名叫xiaoyao_adb.exe,用Android SDK 的adb.exe将xiaoyao_adb.exe替换掉后,需要将adb.exe重命名为xiaoyao_adb.exe)。
终端任意位置执行adb connect 127.0.0.1:21503命令来链接模拟器:
D:\Program Files\Microvirt\MEmu>adb connect 127.0.0.1:21503
already connected to 127.0.0.1:21503:5555
终端任意位置执行adb devices -l命令来查看连接情况:
C:\Users\Strive>adb devices -l
List of devices attached
127.0.0.1:21503 device product:LG-H990DS model:LG_H990DS device:LG-H990DS transport_id:2
说明PC已经正确连接到模拟器了。Appium启动一个App时需要设置Desired Capabilities(完整的Desired Capabilities配置)的四个参数:
- platformName: 平台名称,需要区分Android和ios,根据具体平台填写即可。
- deviceName: 设备名称,此处是手机的具体类型,即model的值LG_H990DS(模拟器的话是类似127.0.0.1:21503这样的address:port)。
- appPackage: App的包名,可以使用adb shell pm list packages -3命令查看机器中安装的第三方App包名:
C:\Users\Strive>adb shell pm list packages -3 package:io.appium.settings package:com.youku.phone package:com.UCMobile.x86 package:com.tencent.mm package:com.tencent.mobileqq package:com.jingdong.app.mall package:com.sina.weibo package:io.appium.unlock package:com.eg.android.AlipayGphone
- appActivity: 入口Activity名称,通常需要以.开头,可以使用adb shell dumpsys package <package name>来查找到appActivity:
C:\Users\Strive>adb shell dumpsys package com.tencent.mm
因为显示内容太多,终端缓存不够,查看不到最开始的信息,所以将输出保存为文件(有的内容短的不需要保存为文件)查看:
C:\Users\Strive>adb shell dumpsys package com.tencent.mm > weixin.txt
在C:\Users\Strive目录下有个名为weixin.txt的文件,打开查看:
Activity Resolver Table: Full MIME Types: vnd.android.cursor.item/vnd.com.tencent.mm.chatting.profile: 11b256ae com.tencent.mm/.plugin.account.ui.ContactsSyncUI vnd.android.cursor.item/vnd.com.tencent.mm.plugin.sns.timeline: 11b256ae com.tencent.mm/.plugin.account.ui.ContactsSyncUI application/*: 14424fdc com.tencent.mm/.ui.tools.AddFavoriteUI ...省略掉了... Base MIME Types: vnd.android.cursor.item: 11b256ae com.tencent.mm/.plugin.account.ui.ContactsSyncUI (6 filters) text: 34b938e5 com.tencent.mm/.plugin.account.ui.VoiceActionActivity (2 filters) Wild MIME Types: text: 14424fdc com.tencent.mm/.ui.tools.AddFavoriteUI 17ec1c4f com.tencent.mm/.ui.tools.ShareImgUI audio: 14424fdc com.tencent.mm/.ui.tools.AddFavoriteUI ...省略掉了... Schemes: weixin: 34d28d86 com.tencent.mm/.plugin.setting.ui.qrcode.GetQRCodeInfoUI 35497e61 com.tencent.mm/.plugin.base.stub.WXCustomSchemeEntryActivity tencent1103188687: 20694647 com.tencent.mm/.plugin.webview.ui.tools.QQCallbackUI http: 34d28d86 com.tencent.mm/.plugin.setting.ui.qrcode.GetQRCodeInfoUI Non-Data Actions: ...省略掉了... android.intent.action.MAIN: 22b4de0 com.tencent.mm/.ui.LauncherUI ...省略掉了...
上述内容22b4de0 com.tencent.mm/.ui.LauncherUI中的.ui.LauncherUI即为查找到的appActivity
如果想要用真机进行测试和数据抓取,具体可以参考https://github.com/appium/appium/blob/master/docs/cn/appium-setup/real-devices-android.md
3.4 IOS开发环境配置
Appium是一个做自动化测试的工具,用它来测试自己开发的App是完全没有问题的,因为它携带的是开发证书(Development Certificate)。如果想用IOS设备来做数据爬取的话,又是另外一回事了。一般情况下,做数据爬取都是使用现有的App,在IOS中一般都是通过App Store下载爱的,它携带的是分发证书(Distribute Certificate),而携带这种证书的App是禁止测试的,所以只有获取ipa安装包再重新签名之后才可以被Appium测试(ipa包重签名教程)。
Appium驱动IOS设备必须在Mac下进行,Windows和Linux平台是无法完成的。Mac平台的配置:
- macOS 10.12及更高版本
- Xcode 8及更高版本
配置满足要求之后,执行如下命令配置依赖库和工具:
xcode-select --install
这样IOS部分的开发环境就配置完成了,可以用IOS模拟器来进行测试和数据抓取了。
如果想要用真机进行测试和数据抓取,具体可以参考https://github.com/appium/appium/blob/master/docs/cn/appium-setup/real-devices-ios.md
4 参考资料
- Charles 注册码/破解:https://www.jianshu.com/p/89111882fa99
- 细说 Charles 配置 HTTPS 代理的乱码问题:https://blog.csdn.net/sara_xuehua/article/details/73331981