← 资料库索引 ← 个人博客 原始链接 ↗ 🔍
个人博客

美团SSO登录过程分析 原文标题:美团SSO登录过程分析 - HackMD

发表时间:(页面未标注)采集时间:2026-10-09 14:48:56来源:hackmd.io原文语言:zh状态:完整

内容概要总结

HackMD 对美团 SSO(单点登录)的逆向分析。关键字段有 fingerprint、unionid、mtgsig。fingerprint 与美团 FingerprintInfo 类有关,可经 FingerprintManager.fingerprint 采集;mtgsig 是数据包签名,由 MTGuard.requestSignatureForBabelV4 生成;unionid 是用户身份标识,未登录时通过 deviceInfo 向服务器换取,其关键 token 需要设备品牌、型号和 android_id(约等于安卓设备唯一标识,同一签名应用共享),故所有美团系 App 获得同一 android_id,服务器据此返回 unionid。结论:SSO 本质是设备信任机制。

原文内容(原文即中文)

⚠ 说明:⚠ 逆向分析来源,仅供研究参考。原文末尾登录按钮等页脚内容已剔除。

背景

最近在研究安卓应用的一键登录功能,发现大部分应用的一键登录功能都需要拉起已登录的app进行验证,而美团却能直接识别出已登录的app,十分神奇,因此对这一过程进行逆向分析。

SSO登录包

登录时的数据包如图所示,由于测试次数过多返回包显示need_verify,正常情况下应该是直接登陆成功。对请求包进行测试的结果可以得出,其中主要有三个关键字段:fingerprint、unionid和mtgsig,接下来我们逐一进行分析。

fingerprint

该字段主要与com.meituan.android.common.fingerprint.info.FingerprintInfo类有关,其中包括大量设备信息:

虽然信息项很多,不过app里可以直接调用com.meituan.android.common.fingerprint.FingerprintManager.fingerprint方法一次性采集齐全。

mtgsig

该字段是对数据包的签名,在com.meituan.android.common.mtguard.MTGuard.requestSignatureForBabelV4方法中生成,参数为网络请求的url和body:

继续往下追会发现签名逻辑是在native实现的,遂放弃。但是签名的密钥是写死的,通过这个函数就可以对任意数据包进行签名,因此保护力度相对来说也不是很强。

unionid

该字段是对用户身份的鉴别,在所有美团系app中共享。那么未登录的美团是如何知道这个ID的呢?在代码中大量搜索之后终于找到下图的位置:

也就是用deviceInfo向服务器换来的。继续看看其中包含些什么:

疑似有很多设备信息,但是抓包测试后发现,唯一有用的字段是一个token:

其中又需要设备的品牌、型号和android_id。这个id在安卓上约等于设备的唯一标识符,只要不刷机就不会改变;同时它在同一签名中的应用中是共享的,所以所有美团系的app都会获得同一个android_id,发往服务器之后,服务器就能识别出该设备上还有其他已登录的美团app,从而返回unionid。

总结

整个SSO登录的流程如上图所示。可以看出,整个链条的起点是deviceinfo,因此美团SSO本质上是一个设备信任的机制,通过设备id来识别其中已经登录的美团系应用。这一机制的有效性依赖于设备信息的唯一性和可靠性,其安全性值得进一步研究。

Sign in via Google

Sign in via Facebook

Sign in via X(Twitter)

Sign in via GitHub

Sign in via Dropbox

Sign in with Wallet

By signing in, you agree to our terms of service.

放大预览