大家好,我是白帽攻防录的白帽K。
在移动端混合开发、自动化测试、引流跳转等场景中,URL Scheme 是打通 H5 与 Native 的"万能钥匙"。本文基于真实逆向案例,系统梳理了获取 APP URL Scheme 的 5 大技术手段,并汇总了涵盖银行、电商、社交、短视频、办公等 10 余个领域的 200+ 条实战 Scheme,附带 Android/iOS 双端差异对比。
一、URL Scheme 是什么?为什么值得深入研究?
URL Scheme 是移动操作系统提供的一种进程间通信(IPC)机制,允许一个应用通过特定格式的 URL 唤起另一个应用并传递参数。其标准格式为:
scheme://host/path?query=params
例如:
weixin://dl/officialaccounts?username=csdn
在以下场景中,URL Scheme 是不可或缺的技术基础设施:
| 应用场景 | 技术价值 |
|---|---|
| H5 引流唤醒 | 从浏览器/微信直接跳转到 APP 指定页面 |
| 自动化测试 | 通过脚本直接唤起被测页面,绕过繁琐的 UI 操作 |
| 混合开发 | React Native / Flutter 与原生页面的桥接通信 |
| 银行聚合支付 | 收银台一键唤起各行手机银行完成转账 |
| 小程序跳转 | url scheme 是微信小程序开放能力的重要补充 |
然而,官方文档往往只暴露极少量 Scheme,大量内部页面参数属于"黑盒"。本文将带你掌握逆向提取的核心技巧。
二、获取 URL Scheme 的五大实战技巧
技巧 1:F12 控制台 + 设备仿真(零门槛)
适用场景:H5 页面内嵌了唤起 APP 的逻辑。
操作步骤:
-
Chrome DevTools 打开目标 H5 页面
-
开启 设备仿真(Device Toolbar)
-
点击页面上的"打开 APP"按钮
-
查看 Console 面板,通常会抛出类似错误:
Failed to launch 'taobao://m.taobao.com/...' because the scheme does not have a registered handler. -
报错信息中即包含完整的 Scheme 链接
进阶:在 Network 面板过滤 intent:// 或 scheme= 关键字,可捕获隐式跳转请求。
技巧 2:隐式 Intent 日志抓取(Android)
适用场景:Android APP 内部通过 Intent 进行页面路由。
原理:许多 APP 内部并非直接使用 Scheme,而是通过 Intent 的 action 和 data 字段进行分发。我们可以利用系统日志反推 Scheme。
操作步骤:
# 连接设备,清空日志
adb logcat -c
# 过滤 Intent 相关日志
adb logcat | grep -i "intent|scheme|activitymanager"
# 在 APP 内执行目标操作,观察日志输出
典型案例:某电商 APP 的商品详情页,日志中会出现:
I/ActivityManager: START u0 {act=android.intent.action.VIEW dat=snssdk1128://goods/detail?id=123456}
技巧 3:Intent 拦截器(免 Root)
工具推荐:Intent Intercept(开源工具,Google Play 可下载)
原理:注册为所有 Intent 的接收者,当其他 APP 发起隐式调用时,拦截并展示完整的 action、data、category、extras。
使用流程:
- 安装 Intent Intercept
- 在目标 APP 内执行跳转操作
- 系统弹出"选择打开方式" → 选择 Intent Intercept
- 查看解析出的完整 URI 和参数
技巧 4:Xposed 框架 Hook 路由层(高阶)
适用场景:Scheme 被加密、动态拼接,或经过 Native 层(SO 库)处理。
Hook 点选择:
android.app.Activity.startActivity(Intent)android.net.Uri.parse(String)- 各 APP 自研路由库(如阿里 ARouter、美团 WMRouter)的
navigation方法
示例代码片段:
XposedHelpers.findAndHookMethod("android.app.Activity", lpparam.classLoader,
"startActivity", Intent.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) {
Intent intent = (Intent) param.args[0];
XposedBridge.log("Scheme Hook: " + intent.getDataString());
}
});
技巧 5:静态反编译 APK 提取 Manifest
工具链:apktool + grep / JADX
关键文件:AndroidManifest.xml 中注册的 <intent-filter>:
<activity android:name=".WebViewActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="dewuapp" android:host="m.poizon.com" />
</intent-filter>
</activity>
一键提取命令:
apktool d target.apk -o out
grep -r "android:scheme=" out/ | sort | uniq
三、银行类 APP URL Scheme 大全(Android / iOS 双端)
银行类 Scheme 是金融聚合场景的核心,以下整理自真实逆向与官方文档,注意 Android 与 iOS 的 Scheme 通常不一致:
银行app Scheme
| 银行 | Scheme 示例 | 备注 |
|---|---|---|
| 工商银行 (ICBC) | com.icbc.iphoneclient:// | 早期版本使用 |
| 农业银行 (ABC) | bankabc:// | 双端一致 |
| 中国银行 (BOC) | bocmbciphone:// | iOS 专属 |
| 建设银行 (CCB) | ccbmobilebank:// | 需拼接 cmbls/functionjump 路径 |
| 交通银行 (BCM) | bocom:// | 简洁 |
| 招商银行 (CMB) | cmbmobilebank:// | 需配合 CMBLS 路径使用 |
| 民生银行 (CMBC) | com.cmbc.cn.iphone:// | iOS Bundle ID 风格 |
| 邮储银行 (PSBC) | psbcMobileBank:// | 驼峰命名 |
| 广发银行 (GDB) | cgbMobileHuidu:// | 含 "Huidu" 后缀 |
| 平安银行 (PAB) | paesuperbank:// | "平安易行" 缩写 |
| 中信银行 (CITIC) | citicbank:// | 简洁 |
| 浦发银行 (SPDB) | spdbbank:// | 与域名一致 |
| 光大银行 (CEB) | com.cebbank.ebank:// | Bundle ID 风格 |
| 华夏银行 (HXB) | hxbmb:// | "mb" = Mobile Bank |
| 上海银行 (BOS) | BankOfShangHai:// | 驼峰命名 |
| 兴业银行 (CIB) | cibmb:// | "mb" = Mobile Bank |
| 宁波银行 (BONB) | nbbank:// | 简洁 |
| 南京银行 (NJCB) | nicbmbank:// | "nicb" = Nanjing City Bank |
| 江苏银行 (BOJS) | jsbsjyh:// | 拼音缩写 |
| 北京银行 (BOBJ) | bankofbj:// | 与英文缩写一致 |
⚠️ 注意事项:银行类 Scheme 通常需要配合数字证书或白名单包名校验,单纯唤起可能触发安全拦截,建议结合Universal Link 或 App Link 使用。
四、互联网主流 APP URL Scheme 速查表
以下 Scheme 均通过 F12 控制台、Intent 拦截或日志分析实战提取。
4.1 社交 / 内容社区
| APP | Scheme 示例 | 功能说明 |
|---|---|---|
| 微信 | weixin://dl/businessWebview/url?u=xxx | 内置浏览器 |
| 微信读书 | weread://weread.qq.com/ | 唤起微信读书 |
| 知乎 | zhihu://goods/bottom_sheet_hybrid | 底部弹窗 H5 |
| 知乎登录 | zhihu://signin?next= | 登录后回跳 |
| B站 | bilibili://browser/ | 内置浏览器 |
| B站视频 | bilibili://video/{avid} | 直跳视频页 |
| B站动态 | bilibili://opus/detail/{id} | 动态详情 |
| B站商城 | bilibili://mall/web | 会员购 |
| 抖音 | snssdk1128://webview?url=&from=webview | 内置 WebView |
| 抖音极速版 | snssdk2329://polaris? | 极速版活动页 |
| 快手 | kwai://webview | 内置浏览器 |
| 快手极速版 | ksnebula://webview | 极速版 |
| 微视 | weishi://feed?feed_id= | 视频流 |
| 微视个人页 | weishi://profile?person_id= | 用户主页 |
| Soul | soul://ul.soulapp.cn/web/web | 内置 Web |
| Soul 群聊 | soul://ul.soulapp.cn/chat/groupCreatePage | 群创建页 |
| 皮皮虾 | bds://cell_detail?item_id= | 作品详情 |
| 西瓜视频 | snssdk32://detail?groupid= | 视频详情 |
4.2 电商 / 生活服务
| APP | Scheme 示例 | 功能说明 |
|---|---|---|
| 淘宝 | taobao://m.taobao.com/tbopen/index.html?h5Url= | H5 桥接 |
| 天猫 | tmall://page.tm/appLink?h5Url= | 活动跳转 |
| 京东 | openapp.jdmobile://virtual?params= | 虚拟页面路由 |
| 拼多多 | pddopen://?h5Url= | H5 活动页 |
| 闲鱼 | fleamarket://2.taobao.com/onepiece?h5Url= | 闲鱼币游戏等 |
| 唯品会 | vipshop://showWebview?url= | 内置浏览器 |
| 得物 | dewuapp://m.poizon.com/router/web/BrowserPage?loadUrl= | 商品/活动页 |
| 得物短链 | dewulink://m.dewu.com/note?routerUrl= | 笔记分享 |
| 转转 | zhuanzhuan://jump/core/web/jump | 通用 Web 跳转 |
| 转转卖家版 | zhuanzhuanseller://jump/core/openZhuanZhuan/jump | 卖家端 |
| 点淘 | taobaoliveshare://xevddy.com/gateway/index.htm?targetUrl= | 直播活动 |
| 美团 | imeituan://www.meituan.com/web?notitlebar=1&url= | 特惠活动 |
| 美团支付 | meituanpayment://neo.meituan.com/browser?url= | 支付内页 |
| 滴滴出行 | onetravel://router/page/web?url= | 内置活动 |
| 饿了么 | eleme://web?url= | 通用(需自行拼接) |
| Hello 单车 | hellobike://hellobike.com/openWeb | 活动页 |
4.3 办公 / 效率
4.4 视频 / 音乐 / 娱乐
4.5 金融 / 支付
4.6 工具 / AI / 其他
五、微信小程序 URL Scheme 特殊格式
weixin://dl/business/?appid={APPID}&env_version=release&path=pages/index/index&query=source%3D80046
参数说明:
appid:小程序的 AppIDenv_version:release(正式版)/trial(体验版)/develop(开发版)path:页面路径,需 encodequery:页面参数,需 encode
注意:此 Scheme 有调用频次限制,且需要微信开放平台权限,适合 B 端系统对接。
六、实战:拼接一个完整的银行唤起链路
以建设银行唤起 H5 活动页为例:
iOS 端
ccbmobilebank://cmbls/functionjump?action=gochannel&channelname=home&needlogin=false&ccbParam=https://res.yunbusiness.ccb.com/activity/index.html
Android 端
ccbapp://main.ccb.com?target=url&ccbParam=https://res.yunbusiness.ccb.com/activity/index.html
关键差异:
- Scheme 前缀不同:
ccbmobilebankvsccbapp - 路径结构不同:
cmbls/functionjumpvsmain.ccb.com - 参数名可能不同:
channelname仅在 iOS 端有效
兼容性处理代码(JavaScript) :
const u = navigator.userAgent;
const isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1;
const isIOS = !!u.match(/(i[^;]+;( U;)? CPU.+Mac OS X/);
const scheme = isIOS
? `ccbmobilebank://cmbls/functionjump?action=gochannel&channelname=home&ccbParam=${encodeURIComponent(url)}`
: `ccbapp://main.ccb.com?target=url&ccbParam=${encodeURIComponent(url)}`;
// 尝试唤起
window.location.href = scheme;
// 超时未唤起则跳下载页
setTimeout(() => {
if (!document.hidden) {
window.location.href = 'https://m.ccb.com/download';
}
}, 2500);
七、避坑指南:Scheme 调用的四大陷阱
1. 双端 Scheme 不一致
如上文银行案例所示,Android 与 iOS 的 Scheme 前缀、路径、参数往往完全不同,必须做双端适配,不能简单复用。
2. 高版本系统的 Intent 拦截
Android 12+ 引入了 android:exported 强制声明,部分隐式 Scheme 可能无法被外部应用捕获,需配合 Intent 的 package 字段显式指定。
3. 微信/QQ 内置浏览器的限制
微信内置浏览器会拦截大部分非白名单 Scheme,建议:
- 使用微信官方的
wx-open-launch-app标签 - 或引导用户"右上角用浏览器打开"
4. Scheme 的动态变更
APP 版本迭代时,Scheme 可能增减或修改(如字节系从 snssdk1128 迁移到 aweme),生产环境需建立Scheme 灰度验证机制。
八、总结与资源推荐
本文系统介绍了 URL Scheme 的提取方法论与实战库,核心要点回顾:
| 维度 | 要点 |
|---|---|
| 提取手段 | F12 控制台 → Intent 拦截 → Xposed Hook → 静态反编译,难度递增 |
| 银行差异 | Android/iOS 双端 Scheme 几乎完全不同,需分别维护 |
| 互联网 APP | 普遍支持 xxx://webview?url= 的通用 H5 桥接模式 |
| 兼容性 | 必须处理微信拦截、系统版本差异、未安装 fallback |
推荐工具:
- Intent Intercept:Android 端免 Root 拦截
- apktool + JADX:静态逆向分析
- Frida/Xposed:动态运行时 Hook
如果你在实际逆向过程中发现了新的 Scheme,欢迎在评论区补充。技术因共享而进步,我们下篇见!
免责声明:本文所涉及的 URL Scheme 提取技术仅供安全研究与学习交流使用。请严格遵守《网络安全法》及各大平台 SRC 规则,未经授权不得对任何系统进行渗透测试。任何因滥用技术产生的法律后果与本文作者无关。
我是白帽攻防录的白帽K,持续分享 AI 挖洞和src漏洞挖掘干货,觉得有用的话记得👍点赞、⭐收藏和💬关注。