在 MuMu 模拟器中使用 objection 获取米游社的 DS salt 实战

1436 字
7 分钟
在 MuMu 模拟器中使用 objection 获取米游社的 DS salt 实战

背景#

QzKevin
/
astrbot_plugin_miyoqian
Waiting for api.github.com...
00K
0K
0K
Waiting...

最近心血来潮自己搓了个Astrbot米游社签到插件,根据前人的经验,米游社的接口请求需要携带 x-rpc-ds(DS)签名头。DS 的计算方式(MD5(salt + 时间戳 + 请求体) 一类)早已被 lulu666lulu 等大佬公开,算法本身不是问题;那么要维护这么一个插件最重要的就是这个唯一会变的 salt——它随客户端版本更新而更换,且明文存在于 App 进程的内存中。

所以思路很简单:

  1. 用 frida / objection 注入米游社进程
  2. 在内存里搜关键字 salt=
  3. 把命中地址附近的 64 字节 dump 出来
  4. 直接读出 salt

环境准备#

项目说明
电脑Windows,装有 Python 3 (推荐3.8及以上)与 pip
objectionpip install objection(会顺带安装 frida 依赖)
模拟器MuMu 模拟器(x86_64 架构,自带 root),开启 adb 调试
App米游社(包名 com.mihoyo.hyperion),先在模拟器中装好并登录
其它adb、WinHEX(可选,用于查看内存 dump 文件)

⚠️ 重点:MuMu 模拟器是 x86_64 架构,frida-server 必须下载 android-x86_64 版本,不要下成 arm64!

多开与设备识别#

MuMu 支持多开,每个实例对应一个 adb 设备。打开多开管理器启动需要的实例:

MuMu 多开实例
MuMu 多开实例

用 adb 查看当前设备列表:

Terminal window
adb devices

多开时会看到多个设备,例如:

List of devices attached
emulator-5554 device
emulator-5558 device

本文以 emulator-5558 为例。下面所有命令都通过 -s emulator-5558 指定设备,避免多实例互相干扰。

补充:更多 MuMu adb 调试相关信息见以下链接

站外引用 · 引用站外地址,不保证站点的可用性和安全性MuMu模拟器如何连接 adb?_MuMu模拟器_安卓模拟器点击MuMu模拟器菜单-设备诊断,打开问题诊断界面后,下滑界面即可看到 ADB 端口号

安装并启动 frida-server#

4.1 下载对应架构的 frida-server#

frida releases 页面 下载 与你电脑端 frida 版本一致 的 server:

  • 文件名:frida-server-17.17.0-android-x86_64.xz
  • 解压后得到可执行文件 frida-server-17.17.0-android-x86_64

电脑端版本可用 frida --version 查看,两者必须一致,否则会连接失败。

4.2 推送到模拟器#

Terminal window
adb -s emulator-5558 push frida-server-17.17.0-android-x86_64 /data/local/tmp/frida-server

4.3 启动 frida-server#

Terminal window
adb -s emulator-5558 shell

进入 shell 后执行(MuMu 默认已 root,若提示权限不足先执行 su):

Terminal window
su
cd /data/local/tmp
chmod 755 frida-server
./frida-server

这个终端要保持开着,frida-server 不能退出。

4.4 端口转发(另开一个终端)#

Terminal window
adb -s emulator-5558 forward tcp:27042 tcp:27042
adb -s emulator-5558 forward tcp:27043 tcp:27043

小坑:code.md 里写的 adb -s 5558 forward ... 少了 emulator- 前缀,设备序列号是 emulator-5558,漏了会报 error: device '5558' not found

4.5 验证是否成功#

Terminal window
frida-ps -U

能输出进程列表即成功(多开场景可加 -D 指定设备:frida-ps -D emulator-5558)。

Objection 注入#

先在模拟器中打开米游社并登录,保证进程存在。确认进程:

Terminal window
frida-ps -U

确认米游社进程
确认米游社进程

能看到对应进程即可。然后执行 objection:

Terminal window
objection -n com.mihoyo.hyperion start
  • -n:按进程名(即包名)附加到正在运行的 App
  • start:打开 objection 交互式 REPL(老版本叫 explore,已废弃)

注入成功后提示符会变成 ...,表示已进入 objection 的 REPL。

搜内存#

在 REPL 中先触发一次带 DS 的请求:切到米游社首页,确保 App 发过签名请求、salt 已进入内存。

然后搜索关键字:

memory search "salt=" --string --offsets-only

输出示例:

# Searching for: 73 61 6c 74 3d
# Pattern matched at 3 addresses
# 0x13cf7750
# 0x7c46b1880fe3
# 0x7c471c392c30

内存搜索命中地址
内存搜索命中地址

参数说明:

  • --string:把引号里的字符串 salt= 转成十六进制(73 61 6c 74 3d)再搜,等价于直接搜 ASCII 文本
  • --offsets-only:只列出命中的内存地址,不附带内容

命中多个地址是正常的(salt 被多次加载/引用),一般取第一个即可。

dump 内存#

依次导出得到的地址,dump 其后的 64 字节(足够容纳 salt= + 32 位盐):

memory dump from_base 0x7060361818 64 ./dump_memory

输出示例:

# Dumping 64.0 B from 0x7060361818 to ./dump_memory
# Memory dumped to file: ./dump_memory

导出内存 dump
导出内存 dump

dump 文件会生成在电脑上(objection 运行目录),内容是二进制。直接用 WinHEX 打开,在右侧 ASCII 区就能看到 salt= 开头的字符串:

WinHEX 查看 dump
WinHEX 查看 dump

拿到结果,形如:

salt=SVHcDPuPJYhcm57aSLDe7IwI5gvjgAib

= 后面的 32 位字符串就是当前版本米游社的 DS salt

如果没有 WinHEX,直接在 objection 的 shell 里 cat dump_memory 也能看到,只是可能带点乱码。

验证#

用拿到的 salt 按公开的 DS 算法拼接签名(salt + 时间戳 + 请求体 → MD5),请求一个需要签名的米游社接口,返回正常数据即说明 salt 正确;也可以和抓包工具里同一次请求的 x-rpc-ds 比对确认。

常见问题#

问题原因 / 解决办法
frida-ps -U 报版本不匹配或连不上frida-server 与电脑端 frida 版本不一致,pip install frida==<server版本> 对齐,或换对应版本的 server
error: device '5558' not found序列号写错,应为 emulator-5558;先 adb devices 确认
注入的是另一个模拟器实例多开场景给 objection 加 -S emulator-5558 指定设备
搜不到 salt=先在 App 里触发一次带 DS 的请求(刷新动态 / 进入「我的」)再搜
命中多个地址,dump 出来内容不对多个地址都 dump 一遍,挑包含 salt= 文本的那个
注入后 App 闪退部分版本有 root / frida 检测,可尝试旧版本 App、给 frida-server 改名后重启,或改用 spawn 方式注入
salt 失效salt 随 App 版本更新变化,每次版本更新后按本文流程重新提取即可

写在最后#

  • 内存地址是运行时地址(ASLR),每次启动进程都会变,所以每次提取都要重新搜一遍。
  • 整个过程基于 objection 的 memory search / memory dump 两个命令,原理就是:salt 以 salt=<值> 的键值对明文躺在内存里,找到关键字就能挖出来
  • 本方法仅用于学习交流,请勿用于非法用途。

参考资料#

站外引用 · 引用站外地址,不保证站点的可用性和安全性使用 objection 工具获取 HOYOLAB 的 DS salt今天用 objection 拿了一下 Hoyolab 的 DS 加密 salt,简要记录一下。

站外引用 · 引用站外地址,不保证站点的可用性和安全性米游社接口分析记录 2米游社接口分析记录 2

站外引用 · 引用站外地址,不保证站点的可用性和安全性GitHub - UIGF-org/mihoyo-api-collect: 收集米哈游旗下的游戏与应用的API。收集米哈游旗下的游戏与应用的API。. Contribute to UIGF-org/mihoyo-api-collect development by creating an account on GitHub.

站外引用 · 引用站外地址,不保证站点的可用性和安全性实用FRIDA进阶:脱壳、自动化、高频问题-腾讯云开发者社区-腾讯云Frida工具在Android安全分析中的核心应用:脱壳技术详解(一代整体型壳、二代函数抽取型壳、三代VMP/Dex2C壳),内存搜索DEX文件实战,自动化操作技巧(多设备连接、互联互通、RPC远程调用)。提供反调试应对方案、非标准端口连接方法及常见问题解决方案,助力安全研究人员高效完成应用评测任务。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
在 MuMu 模拟器中使用 objection 获取米游社的 DS salt 实战
https://blog.smatrix.top/posts/objection-ds-salt/
作者
Kayin.
发布于
2026-08-22
许可协议
CC BY-NC-SA 4.0

评论区