ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Paytm(包名:`net.one97.paytm`)这款应用的**登录、账户和账单相关协议

Paytm(包名:`net.one97.paytm`)这款应用的**登录、账户和账单相关协议 Paytm包名net.one97.paytm这款应用的登录、账户和账单相关协议进行一份详尽的技术推测分析。由于无法直接抓取该 App 的加密通信数据所有内容均基于公开信息、移动支付行业的通用架构、历史安全研究报告以及相关技术文档进行合理推测与推演并非官方协议文档也不涉及任何逆向工程或未授权测试。分析将覆盖协议层次、具体 API 推测、数据格式、安全机制、流程示例等全文约一万字以上。一、前言与应用概况Paytm 是印度最大的移动支付和电子商务平台之一由 One97 Communications 运营。其 Android 应用提供充值、账单支付、转账、购物、金融服务等丰富功能。分析这类应用的通信协议核心在于安全、高效、实时三个维度。由于 Paytm 承载着大量金融交易其协议设计必然会遵循严格的金融级安全标准包括数据加密、请求防篡改、防重放等。本次分析将集中在三大模块登录协议涵盖手机号验证、OTP、生物识别、第三方登录、令牌管理。账户协议用户资料、KYC、钱包余额、银行卡管理、安全设置。账单协议交易历史、账单支付、钱包流水、退款状态。二、总体通信架构与协议栈在深入具体业务之前有必要勾勒出 App 底层的网络通信轮廓。2.1 网络传输层主要使用 HTTPSTLS 1.2/1.3所有 API 请求强制走 HTTPS服务端证书经过严格校验。App 极大概率实现了SSL Pinning证书绑定防止中间人攻击。公共 Wi-Fi 环境下的安全也依赖于此。实验性/逐步采用 QUIC从 Google Play 服务的数据来看大量顶级应用已逐渐启用 QUIC基于 UDP 的 HTTP/3以改善弱网下的延迟和连接迁移。Paytm 作为高性能需求应用很可能在部分域名上测试或部署了 QUIC。2.2 应用层协议RESTful APIJSON over HTTPS这是最主要的通信方式。绝大部分登录、账户查询、账单获取都通过 RESTful 风格的端点完成。JSON 作为数据容器轻量且易于调试。WebSocket或封装的长连接用于实时推送余额变动、交易成功通知、聊天客服等场景。虽然系统级推送FCM可唤醒 App但应用内长连接能确保更实时的体验。gRPC可能用于内部服务间或高性能场景并非 App 与业务 API 直连但 App 端某些复杂的数据同步如大列表增量更新可能会考虑使用 gRPC-web 或定制化流式传输。公开资料曾显示 Paytm 后端大量使用 gRPC 进行微服务通信但前端是否直接使用仍不确定。我们更倾向于 App 主要使用 HTTP/1.1 或 HTTP/2 的 REST。MQTT物联网场景不太适用支付 App 一般不用 MQTT 作为主协议由 FCM 或自建 WebSocket 负责推送。2.3 数据序列化格式JSON大部分文本型 API 的请求和响应体为application/json。Protocol Buffers可能在对流量和解析性能要求极高的接口如首页动态配置下发、交易记录批量查询可能会采用 Protobuf 进行二进制序列化并在 Header 中指定Content-Type: application/x-protobuf。但从黑盒观察通常会伪装成 Base64 的 JSON 字段难以确认。Multipart Form-Data上传文件KYC 文档、票据照片时使用。2.4 API 网关与域名Paytm 很可能有一个统一 API 网关对外暴露多个域名api.paytm.com核心业务 APIaccounts.paytm.com或login.paytm.com认证相关wallet.paytm.com钱包服务bills.paytm.com账单支付img.paytm.com或 CDN 域名静态资源所有请求都会带上定制 Header如x-paytm-app-version,x-paytm-device-id,x-paytm-channelandroid / ios用于路由和数据分析。三、登录协议深度剖析登录是整个安全体系的入口涉及多因素认证、令牌生命周期管理及设备绑定。3.1 基础登录流程手机号 OTP这是最常见的登录方式推测流程如下第一步用户输入手机号App 会收集手机号和设备指纹信息向认证服务发起 OTP 请求。推测端点POST /api/v2/auth/sendOtp请求 HeadersContent-Type: application/json x-paytm-device-id: Android_ID 其他维度的哈希 x-paytm-client-id: 生成的唯一客户端ID x-paytm-signature: 请求签名请求体示例JSON{mobile:98xxxxxxxx,countryCode:91,channel:ANDROID,verificationMethod:SMS,device:{osVersion:14,appVersion:10.5.2,manufacturer:Samsung,model:SM-S908B,uniqueId:a1b2c3d4e5f6...,simSerial:8901...,networkType:4G},timestamp:1721712000000,nonce:randomly-generated-string}签名机制猜测Paytm 为确保请求不被篡改且来自合法应用会使用预置的密钥对关键参数做 HMAC-SHA256。早期一些安全评估曾提到 Paytm API 使用了名为CHECKSUMHASH的字段其生成方式可能是将 body 参数排序并拼接然后使用服务端下发的 salt 或内置密钥进行加密。如今大概率演进为使用动态密钥协商如 ECDH生成的 session 密钥来签名。第二步服务端处理服务端验证手机号合法性做频率限制每号码每天最多几次同一设备限制然后调用短信网关发送 6 位 OTP。同时返回一个stateToken或verificationId用于下一步校验。响应示例{status:SUCCESS,data:{verificationId:vId_abc123xyz,otpExpiry:60,retryAfter:30}}第三步用户输入 OTP验证端点POST /api/v2/auth/verifyOtp请求体{mobile:98xxxxxxxx,countryCode:91,otp:294817,verificationId:vId_abc123xyz,device:{...},timestamp:1721712060000,nonce:another-random}验证成功后返回认证令牌{status:SUCCESS,data:{accessToken:eyJhbGciOiJSUzI1NiJ9... (JWT),refreshToken:rt_def456ghi,expiresIn:3600,user:{userId:paytm_123456,kycStatus:FULL,walletBalance:500.75}}}令牌体系大概率采用JWTJSON Web Token搭配OAuth2的刷新令牌模式。accessToken有效期较短1小时用于后续 API 鉴权置于Authorization: Bearer token头中。refreshToken有效期很长如30天与设备绑定用于无感获取新accessToken。第四步生物识别登录指纹/面部在已登录状态下用户可开启生物识别快速登录。实际上这并非直接认证到服务器而是利用 Android KeyStore 系统。App 在首次启用时生成一对非对称密钥私钥安全存储在设备上需用户指纹/面部验证才能解锁公钥上传至服务器并绑定用户。启动快速登录流程启动 App 时服务器发送一个随机挑战值challenge。App 调用 Android Biometric API用户验证指纹后使用私钥对挑战值签名。将签名结果和公钥 ID 提交服务器进行验证。验证通过后服务器颁发新的 accessToken无需再走 OTP 流程。协议端点猜测POST /api/v2/auth/biometric/challenge获取挑战然后POST /api/v2/auth/biometric/authenticate提交签名。3.2 第三方登录与社交集成Paytm 可能集成 Google、Facebook 等登录。遵循标准 OAuth 2.0 Authorization Code 流程。App 调起系统浏览器或 WebView 跳转至第三方授权页面获取 code 后回传 Paytm 后端交换令牌。3.3 设备绑定与风控登录时服务端会生成deviceToken关联用户、设备和推送。请求中携带的大量设备参数如已安装应用列表、设备传感器、广告 ID会进入风控模型判断是否为新设备或可疑环境。若判定为高风险可能要求额外验证如输入支付密码、回答安全问题或视频 KYC。这些风控交互可能通过专用 API 进行例如POST /api/v2/risk/validate。3.4 令牌刷新与吊销刷新端点POST /api/v2/auth/token/refresh携带refreshToken和原accessToken可选返回新的 token 对。若refreshToken已过期或被吊销则返回 401App 清除本地登录态引导用户重新登录。吊销端点POST /api/v2/auth/logout用于用户主动退出服务端会使相关令牌失效。四、账户管理协议详解账户模块涉及用户核心数据的读写与安全设置。4.1 用户资料获取与更新获取个人资料GET /api/v2/user/profileHeaders:Authorization: Bearer accessToken响应包含姓名、邮箱、手机号、KYC 状态、头像 URL、注册时间等。{firstName:Rahul,lastName:Sharma,email:r****gmail.com,mobile:98******88,kycStatus:MINI,avatar:https://img.paytm.com/avatars/u123.jpg}部分敏感字段如完整手机号和邮箱可能经过脱敏处理需额外验证才能查看完整信息。更新资料PUT /api/v2/user/profile传入可修改字段如 email、通讯地址。更新邮箱通常需要 OTP 验证绑定流程先请求sendEmailOtp再提交验证。4.2 KYC了解你的客户协议根据印度监管支付应用必须进行 KYC。流程包括上传证件照片、自拍、视频验证等。上传文档POST /api/v2/kyc/documentsContent-Type: multipart/form-data字段包含panCardImage,aadhaarFront,aadhaarBack,selfie等。上传时可能带进度回调使用分块传输。视频 KYC若需视频验证会建立 WebSocket 连接进行实时音视频通话可能基于 WebRTC信令服务通过 WebSocket 传递后台人员核实身份。协议信令通常使用 JSON 控制消息如{type:offer,sdp:...}。查询 KYC 状态GET /api/v2/kyc/status返回当前审核进度。4.3 钱包与余额Paytm 钱包是一个核心数字资产容器。查询余额GET /api/v2/wallet/balance返回 Paytm 钱包余额和可能绑定的其他余额如礼品卡、返现。为防止被截获后篡改余额响应通常会附带数字签名或者客户端不直接信任重要操作需后端确认。钱包流水通常归入账单见下章充值充值实质是发起一笔交易通常通过POST /api/v2/payments/order/create创建订单然后引导支付。这部分会在账单支付协议里重叠。4.4 银行卡与 UPI 管理获取已绑定支付方式GET /api/v2/payment-instruments返回银行卡掩码号、UPI ID、信用卡等包含发卡行、图标等。添加银行卡POST /api/v2/bank-accounts输入卡号、有效期等。符合 PCI DSS 要求这些数据一般直接标记化tokenization处理App 可能调用第三方如 Visa/Mastercard 网络或 Paytm 的安全组件生成 token网络传输的并非卡号明文而是加密后的数据。删除、设置默认DELETE /api/v2/payment-instruments/{id}或PATCH /api/v2/user/settings修改默认支付方式。4.5 安全设置相关 API修改支付密码MPINPOST /api/v2/user/changePin需要旧 PIN、新 PIN、设备签名。PIN 不在客户端明文发送通常先经过客户端哈希或加盐服务端再进一步处理。启用/关闭生物识别支付如前所述上传公钥绑定设备。管理受信任设备GET /api/v2/user/devices列出已登录设备DELETE可远程撤销。五、账单与交易协议深度分析这是 App 使用最频繁、逻辑最复杂的模块涵盖交易历史、账单支付、实时通知等。5.1 交易历史与钱包流水Passbook用户查看所有收支记录需要支持分页和筛选。端点推测GET /api/v2/passbook/transactions请求参数?page1size20startDate2023-01-01endDate2023-12-31typeALLcategorypeer_transfer或 POST 方式以便携带复杂过滤器。响应数据结构{page:1,size:20,totalRecords:1567,transactions:[{txnId:TXN202307150001,type:DEBIT,amount:500.00,currency:INR,status:SUCCESS,peerName:Amit,peerMobile:99******77,description:Sent to Amit,timestamp:1689426600000,category:PEER_TRANSFER,iconUrl:https://img.paytm.com/icons/transfer.png}// ...]}为确保数据完整性列表可能包含hash或checksum客户端可选择性验证。5.2 交易详情点击某条记录请求详细数据。GET /api/v2/transactions/{txnId}返回更丰富信息订单号、银行参考号、手续费、退款状态等。对于失败的交易会包含失败原因码和描述的本地化映射。5.3 账单支付Bills核心协议Paytm 的账单支付覆盖水电煤、宽带、信用卡还款、保险等。这个流程本质是账单获取 → 账单支付 → 状态查询。步骤1发现账单类别和运营商GET /api/v2/bills/categories返回可用类别ELECTRICITY, WATER, GAS, DTH, BROADBAND, CREDIT_CARD 等。选择类别后获取运营商列表GET /api/v2/bills/providers?categoryELECTRICITYstateDELHI返回运营商 ID、名称和所需输入字段定义如 Consumer Number, 手机号等。步骤2获取账单详情Bill FetchPOST /api/v2/bills/fetch请求体{providerId:BSES_DELHI,consumerNumber:123456789,mobile:98xxxxxxxx}响应返回账单金额、应缴日期、账单编号billId等可能直接展示欠款。步骤3发起支付账单获取成功后用户确认支付。这步复用统一的支付引擎。POST /api/v2/payments/order/create请求参数{orderType:BILL_PAYMENT,billId:BILL20230712345,providerId:BSES_DELHI,amount:1245.50,paymentMode:WALLET,deviceFingerprint:...}响应中可能包含一个orderId以及下一步需调用的支付认证接口。如果是钱包支付则需要验证支付密码或生物识别。步骤4支付认证执行端点POST /api/v2/payments/order/pay钱包支付时需传入加密后的 MPIN 或生物识别签名结果。{orderId:ORD123456,paymentMode:WALLET,auth:{type:MPIN,mpinHash:经过加密和签名的PIN},checksum:signed-payload-hash}支付成功返回交易 ID 和状态。可能还会返回一个“是否要接收账单到期提醒”的提示。步骤5查询支付状态GET /api/v2/transactions/{txnId}/status长时作业如银行扣款中可能返回PENDINGApp 每隔几秒轮询或通过 WebSocket/FCM 接收最终状态。5.4 扫码支付与线下交易用户使用二维码付款流程包含扫码解码、创建订单、支付认证。扫码后 App 将解码出的文本如统一支付接口 URIupi://pay?pamerchantpaytmpn...解析然后调用POST /api/v2/upi/collect或者商户支付 API。如果走 Paytm 钱包本质上还是创建订单和支付步骤但商户信息已从二维码中获取。近场通讯NFC可能走不同协议但通常最终落到同一支付网关。5.5 退款与争议退款通常由商户或系统触发用户可在交易详情中看到退款状态。若需提交争议走POST /api/v2/support/disputes附带理由和附件图片。查询退款进度GET /api/v2/refunds/{refundId}六、安全协议与防御机制支付类 App 的安全性要求极高以下为推测的多层防护。6.1 传输层安全TLS 证书锁定所有连接强制 TLS 1.2/1.3客户端只信任特定 CA 或自签固定证书指纹。即使设备被安装根证书也无法抓包需绕过 SSL Pinning但正常 App 已用多种手段对抗。6.2 请求签名 (Request Signing)防止参数被篡改和重放攻击。典型做法客户端和服务端通过某种密钥协商如 ECDH得到共享密钥k。对于每个请求将 HTTP 方法、URI、有序参数、时间戳、随机数串接计算HMAC-SHA256(k, stringToSign)。放入 Headerx-paytm-signature或 body 参数CHECKSUMHASH。服务端重新计算签名并比对同时检查时间戳与服务器时间差在允许范围内防重放。随机数可做一次性记录。6.3 敏感数据加密对于像 MPIN 这样的超敏感数据除了在请求签名之外还会进行端到端加密。很可能使用服务端公钥RSA 或 EC对 PIN 加密后再传输确保即使 TLS 被破解也无法解密明文。公钥可能内置在 App 中或通过安全接口动态获取经签名的。6.4 反欺诈与设备指纹App 会上报海量设备特征用于生成设备指纹通过风控模型评估交易风险。这些数据通过专用 APIPOST /api/v2/risk/device上报包括但不限于传感器列表、是否 root/越狱、运行中进程、字体列表、屏幕属性、电池状态等。高风险设备可能会被限制功能或要求二次验证。6.5 生物识别安全Android Keystore 保证私钥无法导出指纹验证需用户确认。流程类似 FIDO2 标准服务器存储公钥。6.6 令牌绑定 (Token Binding)可能会将 accessToken 与 TLS 会话或设备 ID 绑定即使令牌泄露攻击者在不相同环境下也无法使用。七、推送通知与实时更新协议账单支付状态、收款提醒等需要实时触达用户。7.1 系统级推送FCMPaytm 注册在 Google Firebase 下使用 FCM 作为主要推送通道。服务端通过 Firebase API 发送推送。推送负载Payload会携带结构化的数据例如{to:device_fcm_token,data:{type:TRANSACTION_UPDATE,txnId:TXN123,status:SUCCESS,message:Bill payment of ₹1245.50 to BSES successful.}}App 收到后解析并更新本地数据库或界面。7.2 应用内 WebSocket 长连接为了弥补 FCM 可能的不及时或离线App 可能维持一条到ws-notify.paytm.com的 WebSocket 连接用于接收实时消息。这条连接会在 App 处于前台时激活后台可能依赖 FCM。WebSocket 协议客户端发送鉴权帧携带 token。服务端推送 JSON 帧{event:transaction.status,payload:{...}}定期心跳 ping/pong。7.3 消息可靠性重要通知如支付成功可能会两种通道都发App 端去重。同时账单类消息可能支持离线存储连接恢复后批量下发。八、可能的性能优化与协议细节为达到流畅体验Paytm 可能采用以下技术持久连接与连接复用HTTP/2 多路复用避免过多 TCP 握手。数据压缩请求头Accept-Encoding: gzip, brJSON 响应压缩。增量更新交易记录可能通过If-Modified-Since或 ETag 实现缓存避免重复传输大数据。本地数据库同步协议部分静态数据如运营商列表、银行列表会以 zip 包形式下发解压后存入本地定期更新。预加载与预请求在用户可能点击之前提前获取账单数据。九、API 版本管理与降级策略API 常通过 URL 路径版本/v2/或自定义头管理。当服务端升级时老版本 App 可能需强制更新。因此会有专门的 APIPOST /api/v2/config/check携带当前版本号、系统版本服务端返回是否需要强制更新、维护公告等。还有动态配置项如功能开关、超时时间、安全策略。十、推演示例一次完整的电费支付流程中的协议交互为了将上述碎片串联假设用户从登录到支付电费冷启动App 初始化读取存储的 refreshToken调用POST /api/v2/auth/token/refresh获取新 accessToken。若失败进入登录页。登录用户输入手机号 → sendOtp → 输入 OTP → verifyOtp → 获得 token 对登录成功。首页加载并发请求多个 APIGET /api/v2/user/profile,GET /api/v2/wallet/balance,GET /api/v2/config等渲染页面。进入账单页选择“电费” → 请求GET /api/v2/bills/providers?categoryELECTRICITY选择 BSES。获取账单输入 consumer numberPOST /api/v2/bills/fetch响应显示欠费 ₹1245.50 和一个billId。发起支付点击支付 →POST /api/v2/payments/order/create携带billId得到orderId。支付验证弹出 PIN 输入框用户输入 MPINApp 使用服务端公钥加密 PIN调用POST /api/v2/payments/order/pay。请求签名包含所有关键参数。实时反馈正在处理时通过 WebSocket 或轮询GET /api/v2/transactions/order/{orderId}/status。秒级内 WebSocket 推送{event:transaction.status,data:{status:SUCCESS,txnId:TXN202307...}}。App 显示成功动画更新钱包余额可能通过另一个余额更新推送。记录展示App 将新交易插入本地 passbook 缓存用户可在“我的账单”中查看。十一、与行业常规对比和独特推测类似 UPI 应用PhonePe、Google Pay 等通常使用类似 JWT 加签的 REST API区别在于某些采用 Protobuf 进行深层通信。Paytm 作为先驱早期可能采用 SOAP/XML现已全面 RESTful。账单支付协议印度有一个统一账单支付平台BBPSBharat Bill Payment System。Paytm 的账单获取和支付可能通过自身集成 BBPS 的 API 实现其内部协议的字段设计会遵循 BBPS 标准。钱包互操作性Paytm 钱包现已允许与其他 UPI 应用互通意味着其底层支付接口会遵循 NPCI 制定的规范可能包含一些 UPI 特有的字段和校验。十二、安全研究的参考与历史漏洞警示历史上有安全研究人员发现过 Paytm 的一些早期安全问题例如缺少 SSL Pinning导致流量可被截获。API 签名算法较弱可被逆向。某些验证步骤可被绕过。这些发现促使 Paytm 不断加固。如今上述基础防御应已到位。我们的分析也基于这些已修复的认知认为现网协议会具备极高的健壮性。十三、结论与免责声明综上所述Paytm 应用的登录协议以手机号OTP 为核心配合 JWT/OAuth2 令牌、生物识别和动态签名实现强认证账户协议围绕 RESTful API 进行用户资料、KYC、支付方式管理并对敏感操作叠加加密和风控账单协议则构建了“获取账单→创建订单→支付鉴权→状态通知”的完整闭环深度整合了印度账单支付生态并使用 WebSocket/FCM 确保实时性。整个通信体系以HTTPS JSON 请求签名为基石融入了设备指纹、端到端加密、证书锁定等现代安全实践同时充分利用长连接和缓存优化体验。分析推测的端点与流程虽非官方文档但与同类金融应用高度吻合可为理解大型支付 App 的协议设计提供详实参考。重要声明以上内容完全基于公开通用架构推演和合理猜想未进行任何反编译、抓包或其他侵犯版权的活动。文中涉及的具体端点、参数名称均为假设示例可能与实际完全不同。本文仅供技术学习与交流严禁用于非法用途。全文约 11000 字
返回列表