美团 App 逆向分析 — 完整项目报告
项目编号: MT-RECON-20260428
目标: com.sankuai.meituan (美团)
环境: Windows 10 + 雷电模拟器 (Root) + adb
日期: 2026-04-28
第一部分:分析总览
1.1 工作流概览
Copy
获取 APK → 解包提取 → 静态分析 → 报告产出
│ │ │
├ adb pull ├ AXML ├ dumpsys package
│ (96MB) ├ DEX × 12 ├ dexdump (249万行)
│ ├ .so × 50+ ├ strings (106万行)
│ └ resources └ 组件清单
1.2 工具链记录
| 工具 | 用途 | 结果 |
|---|---|---|
| adb | 设备连接、APK提取 | ✅ 成功连接 emulator-5554 |
| dumpsys package | 提取组件 & Intent Filter | ✅ 完整组件清单 |
| dexdump | DEX反汇编 | ✅ 249万行完整类信息 |
| strings | 字符串提取 | ✅ 106万行字符串 |
| jadx | 反编译(尝试) | ❌ OOM (12个DEX, 60万方法) |
| Unzip/.NET ZipArchive | APK解包 | ✅ 提取关键文件 |
1.3 应用基本参数
Copy
APK大小: 96,264,524 bytes (~96 MB)
包名: com.sankuai.meituan
类总数: 118,561
方法总数: 602,848
指令总数: 25,677,570
DEX文件: 12个 (classes.dex ~ classes11.dex)
Native库: 50+ (arm64-v8a)
第二部分:攻击面矩阵
2.1 URL Scheme 攻击面
| Scheme | 绑定的 Activity | Authority/Path | 风险评级 |
|---|---|---|---|
imeituan:// | MainActivity + ~100+ Activities | www.meituan.com/* | 🔴 高 |
iMeituan:// | ArbiterLoadingActivity | - | 🔴 高 |
meituanpayment:// | SchemeRouteActivity, NeoActivity | neo.meituan.com/browser | 🔴 高 |
sailorpayment:// | NeoActivity | neo.meituan.com/browser | 🟠 中 |
paymanagement:// | SchemeRouteActivity | auth, wallet | 🟠 中 |
mesh:// | SchemeRouteActivity | auth, wallet | 🟡 低 |
meituanedfu:// | ImageSearchActivity | - | 🟡 低 |
qn412d54f5166d:// | TransitCenterActivity | www.meituan.com | 🟡 低 |
hwid:// | OrderActivity | www.wlorder.com | 🟢 信息 |
2.2 关键危险 Activity
Copy
# 1. 兜底路由:无 Host/Path 校验
.router.ArbiterLoadingActivity
→ 所有未匹配的 imeituan:// URL 都落在这里
→ 风险: 任意 URL 可唤起,动态加载远端配置
# 2. 内置浏览器:应用内 WebView
com.meituan.android.neohybrid.container.NeoActivity
→ meituanpayment://neo.meituan.com/browser?url=XXX
→ 风险: 外部可唤起加载任意 URL(钓鱼)
# 3. 支付码入口:外部直接唤起付款
com.meituan.android.wallet.scheme.PayExternalSchemeActivity
→ imeituan://www.meituan.com/payment_code?code=XXX
→ 风险: 伪造支付码,劫持付款流程
# 4. 万能路由:支付 Scheme 路由
com.meituan.android.wallet.scheme.SchemeRouteActivity
→ meituanpayment://wallet/... / paymanagement://auth/...
→ 风险: 参数注入,页面跳转
2.3 Native 保护分析
Copy
# 防御库
libmtguard.so → 运行时完整性校验(检测Root/Xposed/Frida)
libmtguard_1.so → 模块1
libmtguard_2.so → 模块2
libmtguard_3.so → 模块3
libmtguard_log.so → 日志
libmet_defender.so → 元数据防御
# 加密库
libCGCipherSDK.so → 自定义加密
libPayRequestCrypt.so → 支付请求加密
# 跨平台渲染
libmsc.so → 美团自研脚本引擎
libmscjni.so → JNI桥接
libmscrenderer.so → 渲染层
# 网络栈
libcronet.90.0.4402.0.so → Google Cronet (QUIC/HTTP3)
libmtcronet.so → 美团定制网络
# JS引擎
libmtv8.so → V8引擎
libmtquickjsi.so → 快速JS桥接
libmtv8jsi.so → V8 JSI桥接
2.4 Content Provider 暴露
| Provider | 用途 |
|---|---|
MeituanFileProvider | 通用文件分享 |
TakeoutFileProvider | 外卖文件 |
LegworkFileProvider | 跑腿文件 |
MRNWebViewFileProvider | WebView文件 |
PayIdentifyFileProvider | 支付身份识别 |
HadesContentProvider | 热更新Hades |
EatProvider | 动态加载 |
2.5 BroadcastReceiver 监控
| Receiver | 监控内容 |
|---|---|
PhoneCallBroadcastReceiver | 📞 通话状态 |
EventReceiver | 📡 动态事件 |
MiPushMessageReceiver | 📨 小米推送 |
PushMessageReceiver | 📨 推送消息 |
HadesEatReceiver | 🔄 热更新 |
BlePreScanReceiver | 🔵 蓝牙预扫描 |
2.6 API 端点
Copy
# 认证
passport://www.meituan.com/web?url=https://i.meituan.com/thirdparty/protocol?target=privacy
# 业务服务(H5)
https://i.meituan.com/awp/hfe/block/index.html
https://i.meituan.com/awp/h5/hotel/...
https://i.meituan.com/awp/h5/lvyou/...
# 配置服务
https://fe-config.meituan.com/bm/config/...
# 规则中心
https://rules-center.meituan.com/m/detail/guize/...
# 客服
https://kf.dianping.com/csCenter/access/%s
# 协议
https://portal-portm.meituan.com/webpc/protocolmanage/useragree
# 猫眼
https://show.maoyan.com/qqw?utm_source=my_firstpage_ccjc
# Google Play
https://play.google.com/store/apps/details?id=com.sankuai.meituan
# 外卖下载页
http://waimai.meituan.com/getapp/1012
2.7 混淆特征
混淆策略:单字符命名 + 随机短名
首类示例:
Copy
Class #0 : 'LJ/N;' ← 类名: J/N
Superclass: Object
Methods:
M$iQjys_ (Native)
M$mITdbo (Native)
M$oMD214 (Native)
M0s8NeYn (Native)
M135Cu0D (Native)
M1cMYXGO (Native)
2-3字母包名示例:
Copy
La/a/a/a/a$a; ← 嵌套内部类
La/a/a/a/b;
La/a/a/a/c;
La/a/a/a/e;
La/a/a/a/g;
La/a/a/a/h/a;
La/a/b/a/a;
La/a;
La/b;
La/c;
La/d;
第三部分:安全风险评估矩阵
3.1 CVSS 风格评估
| 漏洞类型 | 攻击向量 | 权限要求 | 用户交互 | 影响 | 评级 |
|---|---|---|---|---|---|
| URL Scheme 任意唤起 | 网络 | 无 | 点击链接 | 高 | 高危 |
| 应用内浏览器URL加载 | 网络 | 无 | 点击链接 | 中-高 | 高危 |
| 支付码外部唤起 | 网络 | 无 | 点击链接 | 高 | 高危 |
| 电话广播监听 | 本地 | 正常权限 | 无 | 低 | 中危 |
| Provider文件泄露 | 本地 | 无(exported) | 无 | 中 | 中危 |
| Cronet降级攻击 | 网络 | MitM位置 | 无 | 中 | 中危 |
| JS Bridge暴露 | 网络 | 需JS执行 | 点击链接 | 高 | 高危 |
| 热更新Hades篡改 | 网络 | MitM位置 | 无 | 高 | 高危 |
3.2 攻击链示例
Copy
# 攻击链 1:支付码钓鱼
1. 攻击者发送链接: imeituan://www.meituan.com/payment_code?code=MALICIOUS
2. 用户点击 → 唤起美团 → 进入支付码界面
3. 用户看到"需要支付" → 输入密码 → 钱到攻击者账户
# 攻击链 2:应用内浏览器钓鱼
1. 攻击者发送链接: meituanpayment://neo.meituan.com/browser?url=http://phishing.com/fake_login
2. 用户点击 → 美团打开内置浏览器 → 加载钓鱼页面
3. 用户看到"登录过期" → 输入账号密码 → 被盗
# 攻击链 3:Scheme 路由参数注入
1. 攻击者构造: meituanpayment://wallet/hadesRouter?fragmentUrl=evil://payload
2. Activity 解析参数 → 传递给子路由 → 触发未授权操作
第四部分:分析局限性与后续计划
4.1 当前局限性
| 限制项 | 原因 | 缓解方案 |
|---|---|---|
| 代码无法反编译 | jadx OOM (60万方法) | 下期用 dex2oat + baksmali |
| 未做动态分析 | mtguard 运行时检测 | Frida hook + spawn-gating 绕过 |
| 未验证实际漏洞 | 需绕过保护 | 下期完成 |
| 未能获取完整 Manifest | 二进制XML需 aapt | 已通过 dumpsys 获取等效信息 |
4.2 下期计划
- Frida 环境搭建 - 编写 anti-anti-reverse hooks 绕过 mtguard
- SchemeRouteActivity 动态追踪 - Hook URL 解析逻辑
- NeoActivity WebView 参数验证 - 检查 URL scheme 白名单
- Hades 热更新机制分析 - 验证远程配置的可篡改性
- 实际 PoC 验证 - 演示攻击路径
- 第二篇文章产出
第五部分:已产出文件清单
Copy
meituan.apk - 原始 APK (96MB)
meituan-extracted/ - APK 解包内容
└ AndroidManifest.xml - (二进制, 未解码)
└ classes.dex ~ classes11.dex - 12个DEX文件
└ resources.arsc - 资源表
apk_strings.txt - 106万行字符串
dexdump_all.txt - 249万行 DEX 类信息
package_info.txt - dumpsys package 输出
meituan_reverse_analysis_p1.md - 文章 (第一篇)
memory/2026-04-28.md - 分析日志
第六部分:结论
美团 APK 展示了国内顶级 App 的安全防御水准:
- 代码混淆非常彻底 - 11.8 万类几乎全部单字母重命名
- 多层原生保护 - mtguard 系列 + Cronet 自定义网络栈
- 攻击面有限但存在 - URL Scheme 是高价值入口点
- 核心问题是业务需求与安全的矛盾 - 为了 Deeplink 体验,必须暴露 Activity
最大的发现是 ArbiterLoadingActivity 作为兜底路由的存在——这实质上是一个"万能入口",一旦其动态配置加载机制存在缺陷,可能导致远程任意页面跳转。
声明: 本报告仅作安全技术研究,所有分析基于公开获取的 APK。发现的问题已按标准披露流程记录,不构成对特定企业的攻击建议。