当前位置: 首页 > article >正文

逆向与爬虫实战:手把手教你用mitmproxy+MuMu模拟器抓取APP数据(Python脚本入门)

移动端数据抓取实战从零构建mitmproxy与MuMu模拟器的自动化抓包系统在移动互联网时代应用数据抓取已成为开发者必备的核心技能之一。无论是进行竞品分析、接口调试还是构建自动化测试流程能够精准捕获并解析APP的网络请求都显得尤为重要。不同于传统的抓包工具如Charles或Fiddlermitmproxy以其开源、可编程的特性为开发者提供了更灵活的中间人攻击(MITM)解决方案。本文将带领读者从零开始搭建一套完整的移动端数据抓取系统涵盖环境配置、证书处理、脚本编写等全流程实战要点。1. 环境搭建与基础配置1.1 mitmproxy的安装与验证mitmproxy作为一款基于Python开发的中间人代理工具其安装过程简洁明了。对于Python开发者而言推荐使用pip进行安装pip install mitmproxy安装完成后可通过以下命令验证安装是否成功mitmproxy --version若系统提示命令未找到可能需要将Python的Scripts目录添加到系统环境变量中。mitmproxy实际上包含三个组件mitmproxy交互式控制台界面mitmdump命令行接口支持Python脚本扩展mitmweb基于Web的图形界面1.2 MuMu模拟器的特殊配置网易出品的MuMu模拟器在抓包场景中表现优异其网络配置灵活性远超其他安卓模拟器。安装完成后需特别注意以下配置项网络模式选择在设置-属性设置中确保选择桥接模式而非NAT模式Root权限开启部分APP会检测Root状态MuMu需要在设置中显式开启共享文件夹配置用于证书传输路径通常为/mnt/shared/提示部分国产APP会检测模拟器环境此时可尝试修改模拟器的build.prop文件来伪装成真实设备2. HTTPS抓包的核心证书配置详解2.1 本地证书安装mitmproxy运行时会自动生成CA证书存放于用户目录下的.mitmproxy文件夹中。Windows系统可通过资源管理器直接访问C:\Users\[用户名]\.mitmproxy\该目录包含多种格式的证书文件mitmproxy-ca.pemPEM格式证书mitmproxy-ca.p12PKCS12格式证书mitmproxy-ca-cert.cerDER编码证书双击mitmproxy-ca.p12文件按照向导完成证书导入。关键步骤包括选择当前用户存储位置不设置密码直接留空选择将所有证书放入下列存储并指定受信任的根证书颁发机构2.2 模拟器证书安装将mitmproxy-ca-cert.pem文件拖入MuMu模拟器的共享文件夹后按以下步骤操作打开系统设置-安全-从SD卡安装导航至共享文件夹通常位于/storage/emulated/0/选择证书文件并设置任意名称在设置-安全-信任的凭据-用户标签下验证安装常见问题排查证书不生效检查证书是否安装到用户凭据而非系统凭据时间不同步确保模拟器时间与主机时间误差在5分钟以内APP使用证书固定需配合Xposed框架使用JustTrustMe模块3. 代理配置与网络调试3.1 多设备代理方案对比配置方式优点缺点适用场景模拟器全局代理配置简单影响所有APP初步调试APP单独代理目标明确需要root权限精准抓包VPN模式绕过部分代理检测配置复杂对抗检测强的APP透明代理无需客户端配置需要iptables规则路由器级抓包3.2 MuMu模拟器代理设置在MuMu模拟器中配置代理的完整流程获取主机IP地址cmd中执行ipconfig进入模拟器的WLAN设置长按当前网络-修改网络选择显示高级选项代理选择手动输入主机IP和mitmproxy监听端口默认8080保存后立即生效无需重启验证代理是否生效的快速方法adb shell ping 主机IP若网络连通但抓不到包可能是以下原因防火墙阻止了mitmproxy端口APP使用了WebSocket等非HTTP协议存在证书固定(Certificate Pinning)机制4. Python脚本自动化实战4.1 mitmdump基础脚本结构mitmdump的强大之处在于其Python脚本扩展能力。一个典型的处理脚本包含以下要素from mitmproxy import http def request(flow: http.HTTPFlow) - None: # 请求拦截逻辑 if target-api in flow.request.url: print(f拦截到目标请求: {flow.request.url}) def response(flow: http.HTTPFlow) - None: # 响应处理逻辑 if flow.response.status_code 200: print(f获取到响应: {flow.response.text[:100]}...)启动脚本的命令mitmdump -s script.py4.2 实战案例新闻APP数据抓取假设我们需要抓取某新闻APP的列表数据完整脚本示例如下import json from mitmproxy import ctx, http class NewsCapture: def __init__(self): self.news_list [] def response(self, flow: http.HTTPFlow): if /api/v3/news/list in flow.request.url: data json.loads(flow.response.text) for item in data[items]: self.news_list.append({ title: item[title], source: item[source], time: item[publish_time] }) ctx.log.info(f已捕获{len(self.news_list)}条新闻) def done(self): with open(news.json, w, encodingutf-8) as f: json.dump(self.news_list, f, ensure_asciiFalse) addons [NewsCapture()]该脚本实现了识别特定API请求提取关键字段并结构化存储运行结束时自动保存为JSON文件4.3 高级技巧请求改写与Mockmitmproxy允许动态修改请求和响应这在测试场景中极为有用def request(flow: http.HTTPFlow): # 修改请求头 flow.request.headers[User-Agent] Mozilla/5.0 (Custom) # 重定向请求 if advertisement in flow.request.url: flow.request.url flow.request.url.replace( production.com, test-mock.com ) def response(flow: http.HTTPFlow): # 注入JavaScript if text/html in flow.response.headers[content-type]: html flow.response.text html html.replace(/body, scriptalert(Injected!)/script/body) flow.response.text html5. 数据存储与分析优化5.1 多格式存储方案根据数据量和使用场景可选择不同的存储方式存储格式写入方式适用场景JSONjson.dump()中小规模结构化数据CSVcsv.writer()Excel分析SQLitesqlite3.connect().cursor()复杂查询需求MongoDBpymongo.MongoClient()[db][col].insert大规模非结构化数据5.2 性能优化技巧当处理高频率请求时需注意以下性能要点批量写入避免频繁IO操作采用缓冲区机制class BatchWriter: def __init__(self, batch_size100): self.buffer [] self.batch_size batch_size def add(self, item): self.buffer.append(item) if len(self.buffer) self.batch_size: self.flush() def flush(self): if self.buffer: # 执行批量写入 self.buffer.clear()异步处理使用asyncio提升吞吐量import asyncio async def process_response(flow): await asyncio.sleep(0) # 让出控制权 # 处理逻辑过滤规则尽早过滤无关请求def request(flow): if flow.request.host not in TARGET_DOMAINS: return # 快速跳过6. 反爬对抗策略解析现代APP常用以下机制阻止抓包需针对性处理SSL Pinning解决方案使用frida脚本绕过frida -U -f package.name -l ssl_pinning_bypass.jsXposed模块JustTrustMe修改APK的network_security_config.xml协议混淆处理WebSocket使用mitmproxy的WebSocket支持gRPC需额外解析HTTP/2帧Protobuf准备.proto文件反序列化行为检测对抗模拟真实操作间隔随机化User-Agent保持会话状态# 随机请求头生成示例 import random USER_AGENTS [ Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36, Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) ] def request(flow): flow.request.headers[User-Agent] random.choice(USER_AGENTS)

相关文章:

逆向与爬虫实战:手把手教你用mitmproxy+MuMu模拟器抓取APP数据(Python脚本入门)

移动端数据抓取实战:从零构建mitmproxy与MuMu模拟器的自动化抓包系统 在移动互联网时代,应用数据抓取已成为开发者必备的核心技能之一。无论是进行竞品分析、接口调试,还是构建自动化测试流程,能够精准捕获并解析APP的网络请求都显…...

从‘画面撕裂’到‘自适应同步’:聊聊游戏图形API(OpenGL/DirectX)里控制垂直同步的那几行代码

从‘画面撕裂’到‘自适应同步’:游戏图形API中的垂直同步实战解析 第一次在屏幕上看到自己编写的3D场景动起来时,那种兴奋感至今难忘。但当镜头快速旋转,画面突然出现一道明显的水平裂痕——就像有人用刀划开了显示屏——我才意识到图形编程…...

StarRailCopilot终极指南:专业级崩坏星穹铁道自动化脚本解决方案

StarRailCopilot终极指南:专业级崩坏星穹铁道自动化脚本解决方案 【免费下载链接】StarRailCopilot 崩坏:星穹铁道脚本 | Honkai: Star Rail auto bot (简体中文/繁體中文/English/Espaol) 项目地址: https://gitcode.com/gh_mirrors/st/StarRailCopil…...

C# WinForm 工作流设计 工作流程图拖拽设计 +GDI 绘制工作流程图 大概功能说明一...

C# WinForm 工作流设计 工作流程图拖拽设计 GDI 绘制工作流程图 大概功能说明一下:1.支持拖动绘制工作节点2.支持移动每个节点的移动3.支持直线连接节点4.支持节点移动连接线自动跟随5.支持高亮显示选中的节点连线6.支持能删除选中节点和连线7.支持选中节点能显示节…...

别再用官方教程了!用Awesome-Backbones库5分钟搞定EfficientNetV2图像分类(附花卉数据集实战)

5分钟极速实战:用Awesome-Backbones解锁EfficientNetV2图像分类新姿势 当你第一次接触图像分类任务时,是否曾被PyTorch官方教程中复杂的代码结构和繁琐的配置步骤劝退?现在,一个名为Awesome-Backbones的开源库正在改变这一现状。这…...

【进阶指南】3dMax散布(Scatter)工具:从基础随机到可控艺术化分布

1. 理解Scatter工具的核心逻辑 3dMax的Scatter工具本质上是一个空间分布控制器,它解决的不仅是"如何放"的问题,更是"如何放得好看"的问题。很多人在使用这个工具时容易陷入两个极端:要么完全依赖默认的随机分布&#xff…...

从MASM到NASM:为什么我换了汇编编译器?聊聊开源NASM的几大爽点

从MASM到NASM:为什么我换了汇编编译器?聊聊开源NASM的几大爽点 记得第一次用MASM写汇编时,光是段定义和伪指令就折腾了半小时。当屏幕上终于跳出"Hello World"时,成就感还没持续三秒,就被同事一句"试试…...

从‘找色块’到‘追小球’:用K210实现一个简易颜色追踪机器人(代码开源)

从静态识别到动态追踪:K210颜色追踪机器人开发实战 在创客教育和小型机器人开发领域,视觉追踪一直是个令人着迷的技术方向。想象一下,你的机器人能够像宠物一样跟随彩色小球移动,或者自动追踪特定颜色的目标——这正是K210芯片结合…...

车载以太网DoIP网关:是选透传还是非透传?一次讲清TBOX与诊断仪的不同配置策略

车载以太网DoIP网关:透传与非透传模式的技术决策指南 当工程师第一次面对车载以太网诊断架构设计时,往往会在边缘节点的配置策略上陷入两难——选择透传模式还是非透传模式?这个看似简单的选择题背后,实则牵动着整车电子电气架构的…...

别再死记硬背了!用Vector Configurator Pro搞定AutoSar BSW_ECUC配置的保姆级流程

Vector Configurator Pro实战:AutoSar BSW_ECUC配置从入门到精通 第一次打开Vector Configurator Pro时,面对密密麻麻的配置项和晦涩的AutoSar术语,大多数工程师都会感到无从下手。ECUC模块作为BSW层的基础配置核心,直接影响着整个…...

Windows安卓应用安装器终极指南:告别臃肿模拟器,轻量级跨平台解决方案

Windows安卓应用安装器终极指南:告别臃肿模拟器,轻量级跨平台解决方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经遇到过这样的困…...

如何在Linux系统上轻松读取Microsoft Access数据库:MDB Tools完整指南

如何在Linux系统上轻松读取Microsoft Access数据库:MDB Tools完整指南 【免费下载链接】mdbtools MDB Tools - Read Access databases on *nix 项目地址: https://gitcode.com/gh_mirrors/md/mdbtools 你是否曾经需要在Linux或macOS系统上处理Microsoft Acce…...

超维计算与DECOHD:高维向量压缩技术解析

1. 超维计算基础与DECOHD创新概述超维计算(Hyperdimensional Computing, HDC)是一种革命性的计算范式,它利用高维空间(通常维度D在1,000-10,000之间)的数学特性来实现高效的信息表示和处理。与传统机器学习方法不同&am…...

TensorFlow图像识别优化:从数据增强到模型部署

1. 项目概述与核心目标在上一篇文章中,我们已经完成了TensorFlow环境搭建和基础图像分类模型的构建。这次我们将深入探讨如何优化这个简单的图像识别系统,使其具备更高的准确率和更强的实用性。本教程适合已经掌握TensorFlow基础操作,希望提升…...

Linux内核驱动开发踩坑记:为什么我的Makefile一编译就报错?原来是-Werror在搞鬼

Linux内核驱动开发实战:当-Werror让编译崩溃时如何精准排雷 深夜两点,屏幕上的红色错误信息格外刺眼——昨天还能正常编译的内核模块,今天突然因为几个"无关紧要"的未使用变量报错退出。这种场景对Linux内核开发者来说再熟悉不过&a…...

AI时代内存层次重构:从五分钟规则到秒级缓存决策

1. 内存层次重构:从五分钟规则到秒级缓存决策1987年,Jim Gray和Gianfranco Putzolu提出了著名的五分钟规则,这个简单的经济学启发式方法指导我们何时应该将数据保留在DRAM中,而不是从存储设备中获取。这个规则的核心思想是&#x…...

免费音乐解锁工具:3分钟搞定QQ音乐、网易云加密文件解密

免费音乐解锁工具:3分钟搞定QQ音乐、网易云加密文件解密 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: htt…...

SAP ABAP表控件(Table Control)实战:从向导生成到手工打造可编辑数据表格

SAP ABAP表控件深度实战:从快速生成到高级交互设计 在SAP Dialog程序开发中,Table Control(表控件)是实现数据批量维护的核心组件。不同于简单的数据显示控件,Table Control需要开发者深入理解ABAP屏幕编程中的PBO/PAI…...

别再手动改PR了!教你写个ABAP报表,一键批量处理采购申请审批与信息更新

告别低效操作:用ABAP打造智能采购申请批量处理系统 每天面对数百条采购申请的状态更新和文本修改,你是否已经厌倦了重复的点击和等待?在SAP系统中,采购申请的日常维护往往成为业务人员的时间黑洞。本文将带你从零开始构建一个智能…...

Python之基础函数案例详解

函数的定义格式:12def 函数名():函数代码使用当前文件的函数我们直接定义一个函数然后运行程序, 函数并不会被调用12def hello():print(hello)想要函数被执行, 需要使用函数名来调用函数1234567# 定义函数def hello():print(hello)# 调用函数hello()需要注意的是, 在有些语言中…...

CCC vs. FiRa:数字车钥匙UWB MAC层时间网格设计的差异与选择

CCC与FiRa标准下的UWB MAC层时间网格设计:数字车钥匙技术选型指南 当你的手机在靠近车门时自动解锁,或是停车场精准引导你找到空位,背后很可能是UWB(超宽带)技术在发挥作用。作为数字车钥匙的核心技术,UWB的…...

Unlock Music:浏览器中一键解锁加密音乐文件的终极方案

Unlock Music:浏览器中一键解锁加密音乐文件的终极方案 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: http…...

保姆级教程:Windows 11下OAK-DepthAI一键安装包实测(含中文路径报错解决)

Windows 11下OAK-DepthAI极简安装指南:从拆箱到运行Demo的全流程实录 刚拿到OAK相机的兴奋感,往往会被繁琐的环境配置浇灭大半。作为一款强大的空间计算设备,OAK-D系列相机在Windows 11上的安装过程却可能让新手望而生畏。本文将带你体验官方…...

CAN总线总报错?别慌!手把手教你用CANoe和示波器定位错误帧(附波形分析)

CAN总线错误帧实战排查指南:从波形诊断到精准修复 最近在调试某新能源车型的CAN网络时,Trace窗口突然开始频繁弹出错误帧警告。仪表盘上的故障灯接连亮起,原本流畅的总线通信变得时断时续——这种场景对汽车电子工程师来说再熟悉不过。错误帧…...

拆解鲲鹏920:从ARM核到Chiplet封装,一张图看懂国产服务器CPU的互连奥秘

鲲鹏920架构深度解析:从ARM核心到Chiplet互连的技术革命 在云计算与数据中心领域,处理器架构的创新从未停歇。鲲鹏920作为国产服务器CPU的代表作,其独特的Chiplet设计和高效的互连架构为高性能计算提供了全新思路。本文将带您深入探索这颗芯片…...

别再只会用STL分解了!用MATLAB的SSA(奇异谱分析)手把手拆解你的时序数据(含完整代码)

超越STL:用MATLAB实现奇异谱分析(SSA)的时序数据深度解析 当你的销售数据呈现出难以捉摸的周期性波动,或是传感器信号中隐藏着多层复杂模式时,传统的时间序列分解方法往往力不从心。STL(Seasonal-Trend decomposition using Loess)虽然广为人…...

如何快速解密QQ音乐文件:qmc-decoder完整使用教程

如何快速解密QQ音乐文件:qmc-decoder完整使用教程 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder QQ音乐下载的歌曲在普通播放器里无法播放?那些神秘…...

从虚拟到现实:用RobotStudio仿真验证你的ABB码垛程序,避开这3个常见坑

从虚拟到现实:用RobotStudio仿真验证你的ABB码垛程序,避开这3个常见坑 在工业自动化领域,ABB机器人的码垛应用已经从实验室走向了规模化生产。但许多工程师都遇到过这样的困境:在RobotStudio中运行完美的仿真程序,一旦…...

Unity Shader 屏幕空间反射 (SSR) 原理解析

深入理解 URP 中 SSR 的实现原理、工作流程与性能优化策略,附带完整案例分析与代码实现什么是屏幕空间反射 (SSR)屏幕空间反射(Screen Space Reflection,简称 SSR)是一种实时反射技术,它利用当前渲染帧的深度缓冲区和颜…...

Formily:重新定义企业级表单开发的架构范式

Formily:重新定义企业级表单开发的架构范式 【免费下载链接】formily 📱🚀 🧩 Cross Device & High Performance Normal Form/Dynamic(JSON Schema) Form/Form Builder -- Support React/React Native/Vue 2/Vue 3 项目地址…...