微信自动化登录,小程序 Code / OAuth RedirectUrl 获取业务 Token

关键词:微信 Xposed、LSPosed、主动调用登录、小程序 code、OAuth2 redirectUrl、token、Android 逆向

前言

最近把之前的 Frida 脚本迁移成了一个 Xposed 模块。

核心能力很简单:

在微信主进程内,主动调用内部登录链路,拿到登录 code 或 OAuth redirectUrl,再交给自有业务后端换取 token。

它不是 UI 自动化,也不是模拟点击。

而是直接注入目标进程,复用 App 内部已经登录的上下文,走原生网络调用和回调。

本文只展示两个合规测试场景:

  1. 小程序登录:主动获取小程序 code,再换业务 token。
  2. 自研 App 登录:通过 OAuth redirectUrl 重定向,拿到最终 token。

环境准备

测试环境如下:

项目 说明
Android 设备 Root 环境
Hook 框架 LSPosed / EdXposed
目标 App 微信 8.0.x,本文测试版本为 8.0.71
模块 自研 Xposed 模块 WxInvokeXposed
调试工具 adb、Apifox / Postman / curl、logcat
调用方式 HTTP API / Broadcast

模块启用后,作用域只选择:

com.tencent.mm

启动成功后,日志中可以看到类似输出:

[WxInvoke] Module Loaded
[WxInvoke] Application onCreate
[WxInvoke][HTTP] listening on 0.0.0.0:18080

如果 PC 和手机不在同一网段,可以用 adb 转发:

adb forward tcp:18080 tcp:18080

api调用演示

在这里插入图片描述
在这里插入图片描述


整体架构

整体链路可以理解成这样:

PC / 自研 App / 服务端
        |
        | POST JSON
        v
Xposed 模块 HTTP API
        |
        | 注入某信主进程
        v
主动调用内部登录 / OAuth 接口
        |
        | Callback 回调
        v
code / redirectUrl
        |
        v
自有业务后端换取 token

重点有三个:

  1. 必须使用目标进程的 ClassLoader
  2. 通过反射构造内部请求对象。
  3. 通过动态代理接收异步回调。

核心原理分析

1. 小程序登录 code 获取

小程序登录本质上是:

appId -> login code -> 后端换取 session / token

2. 通过小程序 code 获取 token

在这里插入图片描述

3:通过 OAuth redirectUrl 获取 token

oauthUrl -> 授权请求 -> redirect_uri?code=xxx&state=xxx

自研 App 登录时,可以先生成 OAuth URL。

示例:

{
  "oauthUrl": "https://open.w***.qq.com/connect/oauth2/authorize?appid=wx********&redirect_uri=https%3A%2F%2Fapi.example.com%2Fwx%2Fcallback&response_type=code&scope=snsapi_userinfo&state=takeExpress#wechat_redirect"
}

调用模块:

curl -X POST http://127.0.0.1:18080/getOauthCode \
  -H "Content-Type: application/json" \
  -d '{
    "oauthUrl": "https://open.w***.qq.com/connect/oauth2/authorize?appid=wx********&redirect_uri=https%3A%2F%2Fapi.example.com%2Fwx%2Fcallback&response_type=code&scope=snsapi_userinfo&state=takeExpress#wechat_redirect",
    "scene": 4,
    "autoOauth": 1,
    "timeoutMs": 15000
  }'

返回结果:

{
  "ok": true,
  "redirectUrl": "https://api.example.com/wx/callback?code=071********&state=takeExpress",
  "code": "071********",
  "state": "takeExpress"
}

接下来有两种处理方式:

  1. 服务端直接消费 code,签发 token。
  2. WebView / HTTP 客户端继续跟随 302,直到最终 URL 携带 token。

演示图如下:

在这里插入图片描述

这是自研 App 的登录链路。模块拿到 OAuth redirectUrl 后,继续跟随业务侧重定向,最终在自有域名页面中拿到 token。
这类方式只适合自有业务调试,不要对第三方业务滥用。

常见坑点

1. code 不是 token

code 只是一次性临时凭证。

它通常具备:

  • 短时效。
  • 只能使用一次。
  • 需要后端配合换取 token。
  • 可能与 appId、账号状态、授权状态绑定。

不要把 code 当成长期登录态。


2. OAuth URL 必须正确编码

尤其是 redirect_uri

错误示例:

redirect_uri=https://api.example.com/wx/callback?from=test

正确做法:

redirect_uri=https%3A%2F%2Fapi.example.com%2Fwx%2Fcallback%3Ffrom%3Dtest

否则内部授权链路可能解析失败。


总结

这套方案的核心不是“模拟登录”。

而是:

在已登录的某信主进程里,通过 Xposed 主动调用内部登录 / OAuth 链路,拿到 coderedirectUrl,再由自有后端完成 token 签发。


安全合规提示

本文内容仅用于:

  • 自有 App 调试。
  • 自有小程序联调。
  • 授权测试账号验证。
  • Android 逆向学习研究。

请勿用于:

  • 未授权获取第三方账号登录态。
  • 批量化采集用户 token。
  • 绕过平台登录与风控。
  • 黑灰产、薅羊毛、撞库等违法场景。

相关技术

  • app新版本混淆类定位。
  • Frida RPC 和 Xposed。
  • LSPosed 模块稳定性优化。
  • 小程序 / OAuth 登录链路合规联调。
  • Android 逆向技术。

项目github地址:https://github.com/luotron/WxInvokeHelper

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐