准备工作
模拟器
- Google AVD(Android Studio)
- Genymotion
- 夜神模拟器:https://www.yeshen.com/(macOS 上暂不支持多开)
- 网易MuMu模拟器:http://mumu.163.com/(macOS上支持多开)
抓包工具
- Fiddler: https://www.telerik.com/fiddler(支持 Windows, Linux)
Fiddler 下方命令行中输入 bpu 域名可对指定域名进行请求包拦截处理,再次输入 bpu 可取消对该域名的拦截
Fiddler 下方命令行中输入bpafter 域名可对指定域名进行响应包拦截处理,再次输入 bpa可取消对该域名的拦截 - mitmproxy
安装证书:http://mitm.it/,双击证书在 macOS 中搜索 mitm 设置为信任,在 Windows 中按照步骤执行安装,此时即可对 https 进行抓包的加密、解密处理;除对浏览器添加代理外,也可对 Wifi 进行代理配置
iOS 上安装证书除在通用中启用描述文件外还需在“通用>关于本机>证书信息设置”中进行启用
安卓有些手机自带浏览器无法下载或无法安装,请使用其它浏览器下载,安装可在WLAN>高级设置>安装证书路径下进行
过滤内容:在 mitmproxy 命令界面输入 f,然后输入过滤命令,再次输入 f 可退出,按下 z 可清除所有的请求
拦截请求:在 mitmproxy命令界面输入 i
mitmdump 所配合使用的 Python 脚本示例:
- Packet Capture: https://www.coolapk.com/apk/app.greyshirts.sslcapture
运行于 Android 平台,无需 root 权限 - Anyproxy
Chrome 插件: SwitchyOmega
Json 在线解析:https://www.json.cn/
Android SDK 国内代理:
adb(Android Debug Bridge)
真机配合 adb 使用需开启 USB 调试
uiautomator
命令行直接输入uiautomatorviewer,打开连接设备时,直接点击左上角图标获取快照,即可分析页面中相应元素的 class, resource-id 等
网友开发了改进版本:https://github.com/512433465/autotest_helper,包含快速获取 xpath、生成 Python 代码等功能
https://github.com/lazytestteam/lazyuiautomatorviewer
Appium
安装包直接下载安装服务端,也可通过 NodeJS 来安装。
注:Alan 从 GitHub 上下载安装时下载 zip 解压后安装出现问题(可能和解压工具有关),而直接下载 dmg 文件则可正常安装
安装过程如报错(npm ERR! Failed at the appium-chromedriver@x.x.x postinstall script.)在其后添加相关参数:
安装 Appium 的Python 客户端
连接后点击右上角放大镜图标可进入 Inspector
Desired Capabilities 详解见:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md
获取安卓包名及启动的 Activity
方法一(aapt 路径请根据实际安装情况进行调整)
方法二
Desired Capabilities示例(macOS 上改用了网页MuMu 模拟器,版本号请在设备的设置中查询)
配置好后可保存设置,点击 Start Session开启可视化界面,其间可进行录制并生成多种语言的代码,右下方还会生成元素的 id 和 xpath
SSL Pinning
但此时如添加代理访问抖音等 APP会报网络错误,那我们就需要学习SSL Pinning:
HTTPS的三种连接方式
- 根据浏览器或者操作系统(Android)自带的证书链(需要去证书机构进行购买,较少)
- 使用自签名证书(多见于内部使用,较少)
- 自签名证书加上 SSL Pinning特性
SSL Pinning,即 SSL 证书绑定,是验证服务器身份的一种方式,是在 https 协议建立通信时增加的代码逻辑,它通过自己的方式验证服务器身份,然后决定通信是否继续下去,它唯一指定了服务器的身份,所以安全性较高。
SSL Pinning 的解决方案
安装 Xposed 框架 + JustTrustMe 组件
Xposed 是一个框架,它可以改变系统和应用程序的行为,而不接触任何 APK。它支持很多模块,每个模块可以用来帮助实现不同的功能。
JustTrustMe 是一个用来禁用、绕过 SSL 证书 检查的,它基于 Xposed 模块。JustTrustMe 是将 APK 中所有用于检验 SSL 证书的 API 都进行了屏蔽,从而绕过证书检查。
注意:
- 手机必须获取 root 权限
- 安装 Xposed 框架存在一定风险(真机建议使用已集成 Xposed 框架的系统)
- 手机可以直接刷带有 Xposed 框架的系统
下载地址:
https://repo.xposed.info/module/de.robv.android.xposed.installer
https://github.com/Fuzion24/JustTrustMe
官网说明了直接安装仅支持带有 root 的权限的Android 4.0.3到4.4,因此在这个版本区间内的可直接安装,安装完 JustTrustMe 之后应记得在 Xposed 的模块中勾选启用。
对于更高版本还应参见http://forum.xda-developers.com/showthread.php?t=3034811
以Android 6.0为例,下载文件有:
https://dl-xda.xposed.info/modules/de.robv.android.xposed.installer_v32_de4f0d.apk(当前稳定版)
https://dl-xda.xposed.info/framework/sdk23/x86/xposed-v89-sdk23-x86.zip(根据自己的系统是 x86, ARM,RMB64进行对应版本选择,这里为 x86)
字体解析
在查看抖音分享页面时会看到其中的点赞数等数字使用了图标字体,而非纯文本,那该如何进行解析呢?通过代码可定位到字体文件,下载到本地并使用如下工具打开:
http://fontstore.baidu.com/static/editor/index.html
如下图所示,在相应数字上右击并点击字形信息可获取每个数字对应的 Unicode,从而通过代码进行反向解析
常见问题
1、adb server version (xx) doesn’t match this client (xx); killing…
这是在使用 adb 连接夜神安卓模拟器时出现的报错,解决方案:
macOS下进入/Applications/Nox\ App\ Player.app/Contents/MacOS/,备份 adb 文件,然后将platform-tools目录下的 adb 文件拷入该目录中
Windows 方法类似,不同的是需拷贝adb.exe、AdbWinApi.dll、AdbWinUsbApi.dll多个文件
2、Original error: UIAutomation2 is only supported since Android 5.0 (Lollipop). You could still use other supported backends in order to automate older Android versions.
在使用 Appium 时遇到的这个问题,针对Mac 上的夜神 模拟器暂无解决方案,根据网上的做法改用了网易 MuMu 模拟器,执行如下命令进行连接: