美团 App 逆向实录:URL Scheme 劫持与 WebView 攻击面深度探测

2 阅读5分钟

美团 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✅ 完整组件清单
dexdumpDEX反汇编✅ 249万行完整类信息
strings字符串提取✅ 106万行字符串
jadx反编译(尝试)❌ OOM (12个DEX, 60万方法)
Unzip/.NET ZipArchiveAPK解包✅ 提取关键文件

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绑定的 ActivityAuthority/Path风险评级
imeituan://MainActivity + ~100+ Activitieswww.meituan.com/*🔴 高
iMeituan://ArbiterLoadingActivity-🔴 高
meituanpayment://SchemeRouteActivity, NeoActivityneo.meituan.com/browser🔴 高
sailorpayment://NeoActivityneo.meituan.com/browser🟠 中
paymanagement://SchemeRouteActivityauth, wallet🟠 中
mesh://SchemeRouteActivityauth, wallet🟡 低
meituanedfu://ImageSearchActivity-🟡 低
qn412d54f5166d://TransitCenterActivitywww.meituan.com🟡 低
hwid://OrderActivitywww.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跑腿文件
MRNWebViewFileProviderWebView文件
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 下期计划

  1. Frida 环境搭建 - 编写 anti-anti-reverse hooks 绕过 mtguard
  2. SchemeRouteActivity 动态追踪 - Hook URL 解析逻辑
  3. NeoActivity WebView 参数验证 - 检查 URL scheme 白名单
  4. Hades 热更新机制分析 - 验证远程配置的可篡改性
  5. 实际 PoC 验证 - 演示攻击路径
  6. 第二篇文章产出

第五部分:已产出文件清单

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 的安全防御水准:

  1. 代码混淆非常彻底 - 11.8 万类几乎全部单字母重命名
  2. 多层原生保护 - mtguard 系列 + Cronet 自定义网络栈
  3. 攻击面有限但存在 - URL Scheme 是高价值入口点
  4. 核心问题是业务需求与安全的矛盾 - 为了 Deeplink 体验,必须暴露 Activity

最大的发现是 ArbiterLoadingActivity 作为兜底路由的存在——这实质上是一个"万能入口",一旦其动态配置加载机制存在缺陷,可能导致远程任意页面跳转。


声明: 本报告仅作安全技术研究,所有分析基于公开获取的 APK。发现的问题已按标准披露流程记录,不构成对特定企业的攻击建议。