Python 逆向抓取 APP 数据

点击上方“菜鸟学Python”,选择“星标”公众号

超级无敌干货第一时间推给你!!!

今天给大伙分享一下 Python 爬虫的教程,这次主要涉及到的是关于某 APP 的逆向分析并抓取数据,关于 APP 的反爬会麻烦一些,比如 Android 端的代码写完一般会进行打包并混淆加密加固,所以除了抓包之外,还需要对 APP 进行查壳脱壳反编译等操作。

接下来由「小帅b的朋友:Houser」 给大家演示一下,如何逆向抓取 APP 数据,给你参考一下思路:

所需设备和环境:

设备:安卓手机

抓包:

fiddler+xposed+JustTrustme

查壳:ApkScan-PKID

脱壳:frida-DEXDump

反编译:jadx-gui

hook:frida

抓包

手机安装app,设置好代理,打开 fiddler 先来抓个包,发现这个 app 做了证书验证,fiddler 开启之后  app提示连接不到服务器:

那就是 app 做了 SSL pinning 证书验证,解决这种问题一般都是安装 xposed 框架,里面有一个 JustTrustme 模块,它的原理就是hook,直接绕过证书验证类,安装方法大家百度吧。

之后再打开app,可以看到成功抓到了包:

先简单分析一下,可以看到请求体中 formdata 是密文,响应内容也是密文,这个请求和响应中有用信息非常少,甚至都不知道在 jadx-gui 里怎么搜索,请求体中 formdata 是以两个等号结尾的,应该是个 base64 编码,其他一概不知。。。

脱壳反编译

那先来反编译,在这之前,通常是先用查壳工具检查一下 app 是否加固,打开 ApkScan-PKID ,把 app 拖入:

可以看到这个 app 使用了 360 加固,真是层层设限啊!!这里使用frida-DEXDump来脱壳,可以到 github 上下载 frida-DEXDump 的源代码,完成之后打开项目所在文件夹,在当前位置打开命令行运行以下命令:

python main.py

等待脱壳完成,可以看到当前项目中生成了一个对应文件夹,里面有很多dex文件:

下面用 jadx-gui 打开 dex 文件,一般先从最大的文件开始依次搜索关键字,我们知道 java 中使用 base64 是有 BASE64Encoder 关键字的,因为抓包得到的信息非常少,在这里就只能搜索这个关键字了,搜到第四个dex中,得到了疑似加密处:

可以看到是使用了一个 aes 加密,密钥是固定的字符串。

Frida Hook

Java不太熟,分析不来,直接使用 frida 来写一段 hook 代码看一看 encrypt 函数入参和出参的内容:

同时来抓包对比:

就得到了这里的请求 data 入参数据:

pageIndex:当前页码

pageSize:当前页对应的数据条数

typeId 和 source 是固定的, 接下来再来 hook decrypt 函数,对比抓包和 hook 结果:

结果是一样的,至此,我们逆向分析就完成了。

总结一下请求和响应过程,就是请求体中的 data 经过 encrypt 函数加密传参,改变 pageIndex 就可以得到每页数据,响应是经过 decrypt 函数加密显示,那我们只需要在 python 中实现这个 aes 加密解密过程就行了,从反编译的 java 代码中可以看出密钥是固定的:wxtdefgabcdawn12,没有 iv 偏移。


请求

直接上代码:

运行代码,成功拿到数据:

ok,以上就是逆向 app 爬虫的全部内容,可以看到,现在数据加密已经很普遍了,随便一个很小的 app 都有好几道数据保护机制,这次只涉及到 java 层的加密,下次来讲讲 native 层加密的 hook 方法、frida-rpc 主动调用以及逆向神器 inspeckage 的应用。 

最后,以上内容仅供学习交流,小帅b今天的分享希望能给你带来一点帮助,那么我们下回见,peace!

近期八大热门:

发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片!
盗墓热再起!我爬取了6万条《重启之极海听雷》的评论,发现了这些秘密
用Python一键生成炫酷九宫格图片,火了朋友圈
菜鸟也疯狂!8分钟用Python做一个酷炫的家庭随手记
Github获8300星!用Python开发的一个命令行的网易云音乐
一道Python面试题,硬是没憋出来,最后憋出一身汗!卧槽!Pdf转Word用Python轻松搞定!教你6招,不错的Python代码技巧!
菜鸟编程大本营,现已正式上线!
每个程序员都是从菜鸟开始成长起来的,没有人一开始就是程序员高手。菜鸟编程大本营,专注于分享小白开始学习编程的技巧,让菜鸟爱上编程,进阶成为高手!感兴趣的小伙伴可以关注一下哈!

点这里,领取新手福利
<think>我们正在处理一个关于使用Python爬虫抓取手机App数据的问题。用户希望得到教程指导。 根据系统指令,我们需要: 1. 使用中文回答 2. 行内数学表达式用$...$,独立公式用$$...$$ 3. 正确使用LaTeX语法(但本问题可能不涉及数学公式,所以可能不需要) 4. 生成相关问题 5. 在引用的段落末尾添加引用标识(注意:我们只能引用提供的三个引用内容,并且要自然添加) 提供的引用内容: 引用[1]:介绍了APP数据抓取的基本流程、工具和Python依赖。 引用[2]:提供了一个豆瓣网页数据抓取的示例,但用户需要的是APP数据抓取,所以这个引用可能不太相关,但我们可以参考其请求和解析的方法。 引用[3]:展示了一个APP接口请求的示例,其中包含了一些参数。 用户需求:使用Python编写爬虫抓取手机App数据。 根据引用[1],我们可以总结出抓取APP数据的一般步骤: 1. 安装并配置抓包环境(如Fiddler、Charles、Mitmproxy) 2. 抓取真实APP请求并分析接口 3. 提取必要的参数(如Headers、Token、Sign等) 4. 使用Python重构请求,实现自动化数据抓取 5. 存储结果(CSV、数据库、JSON等) 因此,我们的回答应该围绕这些步骤展开。 注意:由于用户要求的是教程,我们将按照步骤进行讲解,并尽可能提供代码示例。 另外,由于引用[3]提供了一个具体的请求参数示例,我们可以参考它来展示如何构造请求。 步骤详细说明: 第一步:环境与工具准备 - 模拟器:用于在电脑上运行手机APP(如夜神模拟器、雷电模拟器等) - 抓包工具:用于捕获APP发出的网络请求(如Charles、Fiddler、Mitmproxy) - 安装Python依赖:requests(用于发送HTTP请求)、mitmproxy(用于中间人攻击抓包,也可以用于脚本扩展)等 第二步:配置抓包环境 - 以Charles为例:安装Charles,设置代理(通常为电脑的IP和8888端口),然后在模拟器或手机中设置相同的代理。 第三步:抓取并分析APP请求 - 启动抓包工具,然后在APP中进行操作,抓包工具会记录所有的网络请求。 - 找到我们关心的数据请求,分析其请求方法(GET/POST)、URL、请求头、请求参数等。 第四步:提取必要参数 - 通常APP的接口会有一些验证参数,如Token、Sign(签名)等,这些需要从请求中提取并分析生成规则。 第五步:使用Python重构请求 - 使用requests库模拟请求,注意携带必要的请求头和参数。 第六步:存储数据 由于引用[2]是网页抓取的例子,我们可以参考其请求和解析的方式,但APP接口返回的通常是JSON数据,所以解析会更简单。 下面我们按照这些步骤来编写教程。</think>### Python爬虫抓取手机App数据教程 以下是使用Python抓取手机App数据的详细步骤,基于引用[1]的核心流程: #### 1. 环境准备 - **抓包工具**(用于捕获App网络请求): - Charles(支持HTTPS代理)[^1] - Fiddler(轻量级工具) - Mitmproxy(支持Python脚本扩展)[^1] - **模拟器**(可选): - 夜神模拟器/Nox - 雷电模拟器/LDPlayer - **Python库安装**: ```bash pip install requests mitmproxy rich prettytable ``` #### 2. 抓包分析接口 1. 配置抓包工具的代理(通常为`IP:8888`) 2. 在手机/模拟器设置中配置相同代理 3. 操作目标App,观察抓包工具捕获的请求 4. 定位数据接口(通常返回JSON格式): ```http GET /api/data?timestamp=1625550000&sign=afe4c... HTTP/1.1 Host: app.example.com Authorization: Bearer xxxxx User-Agent: Dalvik/2.1.0 ``` #### 3. 提取关键参数(以引用[3]为例) ```python params = { 'timestamp': '1625550000', # 时间戳 'phoneBrand': 'Meizu', # 设备品牌 'platform': '1', # 平台标识 'sign': 'afe4c...' # 加密签名[^3] } headers = { 'Authorization': 'Bearer xxxxx', 'User-Agent': 'AppClient/7.2.1' } ``` #### 4. Python重构请求(示例代码) ```python import requests import json url = "https://app.example.com/api/data" params = { "timestamp": "获取动态时间戳", "sign": "计算签名值" # 需逆向分析签名算法 } headers = { "User-Agent": "Mozilla/5.0 (Linux; Android 10)", "Authorization": "Bearer token_value" } response = requests.get(url, params=params, headers=headers) if response.status_code == 200: data = response.json() print(json.dumps(data, indent=2, ensure_ascii=False)) ``` #### 5. 数据处理与存储 ```python # 存储到JSON文件 with open('app_data.json', 'w', encoding='utf-8') as f: json.dump(data, f) # 存储到CSV(示例) import csv with open('data.csv', 'w', newline='') as csvfile: writer = csv.DictWriter(csvfile, fieldnames=data[0].keys()) writer.writeheader() writer.writerows(data) ``` #### 关键注意事项 1. **动态参数处理**:多数App接口使用动态token和签名,需逆向分析生成逻辑 2. **反爬机制**: - 使用随机请求头(`fake_useragent`库) - 添加请求延迟(`time.sleep(random.uniform(1,3))`) 3. **HTTPS证书验证**:抓包时需安装抓包工具的根证书 4. **法律合规性**:确保遵守目标App的`robots.txt`和服务条款
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值