阅读文本大概需要 10 分钟。
1
目 标 场 景
在移动互联网时代,很大一部分企业抛弃了传统的网站, 选择将数据、服务整合到 App 端,因此 App 端无论是爬虫还是反反爬都显得尤为重要。
常见的 App 端的爬虫方式是利用 Appium 和 Airtest 驱动手机打开应用,操作页面,然后通过元素 ID 获取元素的内容,又或者借助 mitmproxy 捕获到请求的数据,最后将数据保存下来。
如果要完成复杂的操作,加快爬虫的效率, 就必 须破解 App 端的 登录, 获取一些关键的数据,直接模拟接口请求,达到快速高效地爬取数据的目的。
本篇文章的目的是带大家 「 破解 App 端的登录 」这一操作。
ps: 本文仅限技术交流,请勿用于其他用途。
2
准 备 工 作
在开始编写脚本之前,需要做好如下准备工作
-
待破解的 APK 应用,可去官网或者各大 应用市场去下载,然后安装应用到手机中
-
反编译工具,MAC OSX 推荐 Android Crack Tool 工具集,Win OS 可以使用 dex2jar 来反编译 APK 应用包
-
源码浏览工具: jadx-gui
-
抓包工具: Charles 或者 Fiddler
3
编 写 脚 本
第 1 步,确保手机配置好代理之后,就可以利用 Charles 对 「 获取 验证码 」 和 「 登录 」 进行抓包操作,得到请求地址、请求参数和请求头等数据。
第 2 步,对请求参数、请求头中 「 没有规律的数据 」 寻找生成的规律,并用 Python 代码来生成这些数据。
首先,我们查看获取验证码这一请求的参数,发现除了手机号码外,参数 t 可以很容易想到是请求的时间戳,唯独参数 token 在没有其他网络请求的情况下生成了。
def get_unix_time(type_13):
"""
获取时间戳
:param type_13:10位、13位,是否是13位
:return: