微信自动化登录,小程序 Code / OAuth RedirectUrl 获取业务 Token
微信自动化登录,小程序 Code / OAuth RedirectUrl 获取业务 Token
关键词:微信 Xposed、LSPosed、主动调用登录、小程序 code、OAuth2 redirectUrl、token、Android 逆向
前言
最近把之前的 Frida 脚本迁移成了一个 Xposed 模块。
核心能力很简单:
在微信主进程内,主动调用内部登录链路,拿到登录
code或 OAuthredirectUrl,再交给自有业务后端换取 token。
它不是 UI 自动化,也不是模拟点击。
而是直接注入目标进程,复用 App 内部已经登录的上下文,走原生网络调用和回调。
本文只展示两个合规测试场景:
- 小程序登录:主动获取小程序
code,再换业务 token。 - 自研 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
重点有三个:
- 必须使用目标进程的
ClassLoader。 - 通过反射构造内部请求对象。
- 通过动态代理接收异步回调。
核心原理分析
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"
}
接下来有两种处理方式:
- 服务端直接消费
code,签发 token。 - 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 链路,拿到
code或redirectUrl,再由自有后端完成 token 签发。
安全合规提示
本文内容仅用于:
- 自有 App 调试。
- 自有小程序联调。
- 授权测试账号验证。
- Android 逆向学习研究。
请勿用于:
- 未授权获取第三方账号登录态。
- 批量化采集用户 token。
- 绕过平台登录与风控。
- 黑灰产、薅羊毛、撞库等违法场景。
相关技术
- app新版本混淆类定位。
- Frida RPC 和 Xposed。
- LSPosed 模块稳定性优化。
- 小程序 / OAuth 登录链路合规联调。
- Android 逆向技术。
项目github地址:https://github.com/luotron/WxInvokeHelper
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)