Repository navigation
Releases: suileyan/xpmibackup_sly
Release list
v1.1.0
新增第 12 个传输通道(谷歌云端硬盘);底栏新增悬浮 dock 样式;上传并发与切片配置收敛;并集中修复首轮真机实测暴露的缺陷。
Google Drive 通道(新增第 12 个 Provider)
- 新增**谷歌云端硬盘(Google Drive 个人盘)**通道,与既有云盘账号形态对齐:多账号、参与备份/恢复/清理全链路
- 授权走 OAuth 2.0 loopback(RFC 8252):本机
127.0.0.1随机端口起一次性回调服务 + 系统浏览器完成登录;不用内嵌 WebView(Google 拒绝 WebView 内的 OAuth),不引官方 SDK、不新增运行时依赖 - scope 用
drive.file:只见并只管理本模块上传的文件(规避 restricted scope 审核流程);代价是恢复列表不含网页端/其他应用上传的文件 - 上传走 resumable(
uploadType=resumable→ Location 会话地址,8MB/片、256KB 对齐、308 续传、断点用Content-Range: bytes */total查询);删除走回收站(trashed=true,30 天后由 Google 自动清理) - 支持账号级代理(
proxy_host/proxy_port),大陆网络环境下可用 - 登录页内置「如何获取 Client ID / Secret」分步指引(含「看到要填包名与签名指纹就是应用类型选错了」的排错提示)
- OAuth 客户端开箱即用:凭据在构建期从
src/gdrive.properties注入(不写进源码、不入 git 历史),CI 从仓库 Secrets 注入发布版;内置后登录页折叠 client 输入区,用户只需点「开始授权」,并保留「使用自己的 OAuth 客户端」覆盖入口;未内置时自动回退为「要求自填 + 分步指引」
底栏样式:悬浮 dock / 贴边
- 设置页新增「底栏样式」切换(
nav_bar_style,默认悬浮):- 悬浮:居中胶囊 dock(全圆角 + 投影 + 85% 半透明表面),API 31+ 反射调用
View#setBackgroundBlurRadius做实时背景模糊,系统不支持时自动退化为纯半透明玻璃感 - 贴边:MD3 全宽贴底(含顶部 1px 分割线)
- 悬浮:居中胶囊 dock(全圆角 + 投影 + 85% 半透明表面),API 31+ 反射调用
- 切换后即时重放 4 个常驻 Tab 页的底部内容预留,无需重建 Activity;大屏(≥840dp)仍自动切换为侧边导航栏
真机实测缺陷修复(Google Drive 首轮验证)
- 修复恢复列表缺项甚至为空(严重):Google Drive 上目录被重复创建。
根因是两层叠加——ProviderRegistry.forAccount()为读到最新凭据每次新构造 Provider,使GoogleDriveProvider的实例级目录缓存完全失效;叠加item_threads=3时多个上传任务并发执行「查不到就建目录」。Drive 允许同目录重名且服务端不拦(对比阿里云盘用check_name_mode=refuse有服务端兜底),于是MIUI/backup被建了 2 份、20260928_232536被建了 3 份,5 个文件散落到不同重名目录,列表只看到其中一个(实测只列出 3 个)。
修法:目录缓存改为静态ConcurrentHashMap(key = 账号 ID + 路径),路径解析串行执行并逐级缓存前缀,目录被回收后失效对应缓存 - 修复浏览器回调页显示连接错误:
LoopbackAuthServer用 try-with-resources 包了sock.getInputStream(),关闭BufferedReader时连带关闭了 socket,导致响应永远写不出去(日志回调响应写出失败: Socket is closed)。授权其实已经成功,但用户看到ERR_CONNECTION_TIMED_OUT会以为失败。改为使用不关闭底层的流包装,socket 交回acceptLoop统一关闭
上传并发与切片配置收敛
- 新增三项配置并统一到「备份配置」页(原「设备配置」页):
- 上传线程数(切片并发):单个文件切片后的并行上传分片数(1–64,默认 8)——原先硬编码为 8,现可调
- 切片大小:分片阈值(MB,0 表示不切片,默认 64)——从 NAS 配置页迁入
- 备份项并发:同时上传的备份项个数(1–16,默认 3)——接管原「上传线程数」的项级并发语义
- 移除备份页「逐项备份」勾选项,功能由「备份项并发 = 1」等价替代;旧配置自动兼容(
serial_upload=on→ 1,否则沿用upload_threads),保存时清理旧键 - 移除 NAS 配置页中的「上传线程数」「切片大小」输入框——它们只回显、从不落盘(
saveProfile()不写config.ini),改完点保存不生效 - 「设备配置」标签页更名为「备份配置」;移除设备名称、设备描述两个输入框(不参与备份链路判定,
device_name配置键保留供宿主上报设备名)
Full Changelog: v1.0.0...v1.1.0
v1.0.0 · 首个正式版
v1.0.0 · 首个正式版
从 v0.9.5 起累计 15 个提交 + 一轮集中修复,覆盖「备份至 PC」全链路打通、手机端峰值占用、进度可视化与四家云盘的实测缺陷。
下载
| 文件 | 说明 |
|---|---|
miback_sly-1.0.0.apk |
模块本体(release 签名) |
mibackpc.exe |
电脑端接收器(Windows x64,与 APK 配套使用;配置与落地目录相对 exe 所在目录) |
升级注意:装完 APK 后需把宿主 com.miui.backup 强制停止再拉起,宿主才会加载新模块代码。模块自身文件会自动迁到 /sdcard/MIUI/backup/sly/,无需手动搬。
备份至 PC(mibackpc)
- USB 通道优先于局域网:电脑端在「设备在线但
adb reverse未建立」时自动建通道,不再依赖手动点控制页「重连」;手机发现127.0.0.1有应答即把「电脑备份」方案切到 USB,仅在电脑名与已配对的一致时切换(点对点隧道只能连到插着的那台电脑,切错会把备份写到别的机器),拔线后自动回落局域网,全程无需重新配对 - 通道切换对宿主即时生效:方案文件的「修改时间 + 长度」变化即让两个进程整体丢弃 Provider 缓存重建
- PC 端磁盘空间预检:PUT 前检查可用空间,不足返回 507 并给出可读原因
- 失败日志不再刷屏:adb 探测只在「结论变化」时记录
- 局域网发现通道失聪、Android 17 本地网络保护、宿主进程私网明文策略等连接问题一并修正
手机端存储占用与传输
- 峰值占用大幅下降:切片前取「在途分片额度」(背压),磁盘分片锁死在
(并发+2) × chunk_size(默认 ≤640MB,逐项模式 ≤192MB);不再整份复制源文件;分片改落模块专属目录AllBackupTemp/miback/ - 孤儿分片自动清理:进程被强杀留下的分片会在下次上传时回收(6 小时阈值,不误伤在途分片;旧实现实测一次取消残留 97 片 ≈ 6.36GB)
- 取消即停:取消备份后 1~2 秒内停止上传(最多再传完当前一片)
- 失败/取消不再删本地源文件:上传返回值参与
auto_delete_local判定
进度与界面
- 进度口径修正:按宿主自己的分母折算上报,备份项进度不再长时间贴住 30% 再直接跳 100%
- 实时上传速率:备份页总进度条右侧新增每秒刷新的速率角标
- 配置界面按小米 HyperOS 设计语言重构;深色模式渲染与交互补全;网页登录页完成按钮/标题层级修复
- 备份页新增两个开关:自动删除本地已上传文件、逐项串行备份
云盘通道
- 百度网盘:修复目录创建参数(官方规范
path+isdir=1+rtype=0)并创建后回查,避免「createFolder 说已存在、listDir 说不存在」导致整项备份失败;补齐-8/-10错误码语义 - 光鸭云盘:修复恢复列表为空——根目录空 parentId 查询返回无
data的错误体被当成空列表;现退到"0"重试,仍失败显式抛错并带响应摘要 - 阿里云盘:修复恢复列表为空(下载 403 哑失败 + 列表错误体被静默当空)、分片上传 403、坏账号残留与签名自愈
- 联通沃盘:修复登录页白屏——主文档禁缓存 + 白屏自愈(CDN 缓存旧
index.html,其引用的 JS 已下线) - 123 云盘自 v0.9.5 起暂停支持;115 网盘自 v0.8.0 起已撤销支持
稳定性与安全
- 修复
Secp256k1使用BigInteger.TWO(API 33 才存在):Android 11/12 上抛NoSuchFieldError(属Error,catch (Exception)拦不住),直接崩进程 - 配置文件统一收纳到
/MIUI/backup/sly/,首次启动自动迁移(rename 优先、跨进程幂等) - 凭据解密失败不再静默;TLS/文件锁等降级路径全部留痕
- 模块日志分「主日志 +
_err.log」,敏感字段脱敏
完整变更与历史版本见 CHANGELOG.md。
v0.9.5 — Root 模块备份全链路 + mibackpc.exe 随 Release 发布
v0.9.5 更新日志(gh 认证后 gh release edit --notes-file 覆写用)
发布日期:2026-09-05 | versionCode:905 | 签名:正式签名 APK
✨ Root 模块备份(核心,全链路可用)
- 快照独立目录 RootModules/:不再存放在引擎工作区 Transfer/(会被备份/恢复流程清理,真机两次实测快照丢失),引擎不感知、只有模块读写
- 原生恢复后自动提示解包:hook 引擎暂存清理点,清理前自动抢救备份 zip 内的模块快照(按字节大小去重),回到云备份助手即弹「检测到模块快照,是否立即恢复」
- 恢复成功自动清理快照:解包完成即删,不留 129MB 垃圾
- 保留策略封顶:业务快照保留最新 2 份 + 恢复前回滚快照 1 份,存储占用有上限(约 390MB,此前无上限)
- 恢复前自动快照当前 /data/adb 状态(回滚点),恢复失败可回退
- 修复模块图标偶发丢失:消除引擎 Glide 异步加载覆盖 hook 图标的时间竞争(备份/恢复两页均覆盖)
📦 电脑端
- mibackpc.exe 随 Release 自动打包发布:CI 新增 Go 交叉编译 job(windows/amd64),下载即用,无需本地配置 Go 环境
⏸️ 123 云盘暂停支持(v0.9.5 起)
- API 宿主迁移至 api.123278.com 后接口行为不稳定(建目录路由 404、JSON 请求挂起等问题已逐层修复,但上传链路仍待充分验证)
- UI 全部入口隐藏(添加页、备份目标、账号列表),历史备份目标自动清除回退,已登录账号数据保留
- 实现代码保留,服务端链路验证通过后恢复
🔧 其他
- 修复 log_enabled 配置被覆盖导致每日流程日志缺失的问题
- README 同步 123 暂停说明
📦 安装
- 下载 miback_sly-0.9.5.apk 覆盖安装(保留配置)
- LSPosed 作用域 com.miui.backup + com.android.settings,重启手机后生效
- 电脑端接收器:下载 mibackpc.exe 运行,手机端 WebDAV 方案指向电脑即可
v0.9.0
v0.9.0 — Android 9~17 全版本适配
构建链升级
- compileSdk / targetSdk / buildTools 升至 37(Android 17),minSdk 保持 28(Android 9)
- AGP 9.2.0 原生支持 API 37,构建链无需升级
Android 17 行为适配
- 本地网络保护:声明 ACCESS_LOCAL_NETWORK 权限;SMB 连接失败且目标为局域网时给出专项提示(ERR_SMB_LOCALNET),引导检查「小米备份」的本地网络权限
- static final 反射限制:全量审计确认现有代码仅写入实例字段,不受影响
- 配置变更 / 大屏自适应:显式 recreate + adjustPan 已覆盖,无需代码变更
UI 适配
- edge-to-edge:底部导航栏 insets 适配,手势条/三键导航不再遮挡底部 Tab 栏(Android 15+ 强制)
Hook 跨版本兼容(核心)
- 新增 HookCompat 兼容工具(多候选类名/方法名 + 参数特征匹配 + 诊断日志)
- 14 处版本脆弱点改造:混淆方法(NotificationUtils、NASTransferAdapter)与类名(ProgressPageFragmentBase$1、NASBackupDataCenter、DistFileClientService 等)漂移时自动降级,不再因单个版本结构差异失效
- DFS AIDL transact code 漂移可观测(未知 code 节流日志)
下载
miback_sly-0.9.0.apk(签名 APK)
真机回归清单见 docs/ANDROID-VERSION-MATRIX.md(本地);当前主测试设备为 Android 16。
v0.8.1 更新弹窗下载链接改指向 123 网盘
v0.8.1 更新内容
修复
- 更新弹窗「下载 APK」按钮改指向 123 网盘分享链接:此前该按钮跳转 GitHub Release 直链,国内网络常无法下载;现改为跳转 123 网盘分享页,点击后可直接下载 APK(分享密码已内置在链接中,无需手动输入)。
- 支持通过
config.ini的download_url覆盖下载地址(留空使用默认 123 分享链接)。 - 弹窗内「前往下载」按钮仍保留,指向 GitHub Release 页。
- 支持通过
说明
- 本版本无功能改动,仅调整更新弹窗的下载通道。
- 下载 APK 后如提示版本低于当前版本,属正常现象(各版本签名一致,可覆盖安装)。
下载
- 更新弹窗内点击「下载 APK」,或访问 GitHub Release 下载附件。
v0.8.0
v0.8.0 更新日志
相比 v0.7.5,本次主要对各云盘链路的实际可用性做了全面修复(均在真机验证),并撤销了对 115 网盘的支持。
各云盘链路修复
139(移动云盘)
- 修复列表分页死循环:
nextPageCursor返回字符串"null"时被视为"无下一页"(此前每次目录解析触发 100 次 list 请求风暴,导致备份卡死、恢复列表为空) - 下载地址不再信任列表条目的
downloadUrl(值为"null"占位),一律走getDownloadUrl接口 - 修复
getDownloadUrl响应中cdnUrl:null的optString链式陷阱 - 目录 fileId 缓存 static 化(跨实例共享),消除分片间 30 秒空档
- 建目录并发去重,杜绝重复备份目录
百度网盘
- 建目录参数对齐网页版(
a=commit,移除多余的isdir——实测触发 errno=2) errno=10(已存在)幂等处理,重复建目录/合并不再报错- precreate 移除不支持的
content-md5参数 - 修复
filemetas下载地址字段(web 端为info,非list) - 删除操作
opera=delete移入 URL query end(0 字节)文件直接跳过(百度不支持空文件)- 下载提速:dlink 改用网盘客户端 UA(网页 UA 被限速至 ~30KB/s)+ 放宽读超时
联通沃盘
- 上传域/类型规则缓存 static 化(消除每文件重复初始化)
end(0 字节)文件直接跳过(服务端不支持空文件)- 分片上传并发 8 + OkHttp 同 host 并发上限放开
123 云盘
- 修复
download_info接口:废弃的a/api路径 → 新版b/api,body 由 form 改 JSON(旧路径返回code=-1 msg=fail)
夸克云盘
- 修复 OSS 分片上传 403
SignatureDoesNotMatch:PUT URL 的uploadId不再 URL 编码(与授权 auth_meta 保持一致)
光鸭云盘
- 上传后轮询等待服务端转正(此前立即确认导致大文件分片"上传成功但目录中不存在",恢复时报"备份文件损坏")
- 目录枚举取
fileList与list并集(分片文件在list键中) - 修复文件误判为目录(光鸭条目
dirType文件/目录同值,改按resType判定)——恢复列表正确显示分片大文件 end(0 字节)文件直接跳过
天翼云盘(189)
- 修复恢复列表为空:路径解析根 ID 统一为个人空间根(
-11),此前建目录与枚举用不同根 ID InvalidSessionKey(会话 IP 绑定失效)自动刷新会话重试,不再需要手动重新登录
通用
- 备份目录枚举改走
backup_path下的listEntries(此前枚举云盘根目录,导致恢复列表空) - 上传/下载分片并行化(突破部分云盘单连接限速)
- 恢复页描述符遍历节流(10 秒窗口),消除多入口并发风暴
- 临时目录创建误报修复
撤销 115 网盘支持
115 网盘对高频 API 请求的风控过于频繁(账号级 HTTP 405 拦截持续数分钟,下载 URL 同样受限),实测无法稳定支撑备份/恢复流程,实际可用性差。
v0.8.0 起对外移除 115 支持:
- 云盘添加页、备份目标选择、账号列表均隐藏 115 入口
- 历史已登录的 115 账号数据保留(本地未删除)
Pan115Provider实现代码保留(含此前完成的 OSS POST 直传、downurl RSA+XOR 解密),若 115 风控策略缓解可恢复
其他
- Gradle 发行版改用腾讯镜像源(官方源国内下载不稳定)
- 新增多链路诊断日志(分页/下载速度/确认任务等),便于问题定位
v0.7.5
v0.7.5 更新日志
发布日期:2026-08-11 | versionCode:705 | 签名:正式签名 APK(可直接安装)
✨ 恢复功能修复(从云盘恢复的关键修复)
1. 恢复列表为空
- 根因:MIUI 备份
DistFileClientService字段混淆(mTempPath实为f),模块按明文名mTempPath查找字段失败 → 静默跳过 → descript.xml 永不预下载 → 恢复列表直接为空 - 修复:字段候选名回退查找
{"mTempPath","f"}(找不到时明确告警);descript.xml 预下载目录兜底——恢复页面现在能正常列出云盘上的备份
2. 断点续传损坏数据
- 根因:恢复下载接口收到
startPos(本地已有长度)但模块恒整文件从头覆盖,分片/续传恢复会损坏数据 - 修复:
downloadViaFd支持 startPos——下载整文件后跳过前 N 字节、从对应偏移写回(App 端 pfd 不截断、本地保留前半段);startPos 超过文件大小拒绝覆盖 - 顺带补齐下载进度回调(Y0 开始 / D0 进度 / l0 完成)
🔧 其他修复
- 天翼 SSON 400 诊断:
getAccessTokenBySsKey换发 token 失败(HTTP 400)时打印响应体(截断 300 字符)——便于定位是风控还是参数问题(此前只抛状态码无信息) - Settings 日志噪音:
SmartStorageController/SmartStorageBackupHelper在当前 MIUI 版本不存在时降级为 debug 日志(此前每次进设置页刷 3 条 ERROR,不影响功能)
📦 安装
- 下载 miback_sly-0.7.5.apk 覆盖安装(保留配置)
- LSPosed 作用域 com.miui.backup + com.android.settings,重启手机后生效
- 验证恢复:系统设置 → 云备份助手 → 智能存储备份 → 恢复列表应显示云端备份 → 点恢复
v0.7.1
v0.7.1 更新日志
发布日期:2026-08-10 | versionCode:701 | 签名:正式签名 APK(可直接安装)
🔧 修复(天翼云盘 189 上传链路)
1. code=SUCCESS 误判导致上传失败
- 189 上传域接口(initMultiUpload 等)成功时
code返回字符串"SUCCESS"(而非"0"),被上一版的「非 0 即失败」判断误判为接口错误,上传刚起步即中断 - 修复:成功值白名单同时接受
"0"与"SUCCESS"(忽略大小写),其余非空值才判失败
2. 服务端临时故障(511 / code=-1)导致上传全部失败
- 189 上传域 S3 网关偶发
HTTP 511 Read timed out,接口层返回code=-1——之前这些临时故障直接中断上传、无重试 - 修复:新增上传域临时故障重试层——
HTTP 511/HTTP 5xx/code=-1自动指数退避重试(500ms×2ⁿ,封顶 4s,最多重试 2 次)- 覆盖全部上传接口:initMultiUpload(秒传检测)、checkTransSecond、getMultiUploadUrls、commitMultiUploadFile、分片 PUT(失败重传整个分片,幂等安全)
- 错误码校验与请求执行纳入同一重试单元(此前 code=-1 在请求返回后校验、完全无重试)
📦 安装
- 下载 miback_sly-0.7.1.apk 覆盖安装(保留配置)
- LSPosed 作用域 com.miui.backup + com.android.settings,重启手机后生效
- 系统设置 → 云备份助手 → 选择天翼云盘账号重新备份验证
v0.7.0
v0.7.0 更新日志
发布日期:2026-08-10 | versionCode:700 | 签名:正式签名 APK(可直接安装)
✨ 新增功能
-
联通沃盘(wo)Provider
凭据为网页登录后的
access_token(36 位 UUID),API 走 dispatcher 通道路由:- 登录:WebView 捕获前端 API 请求头 Accesstoken(dispatcher 请求必带);验证失败重扫 localStorage 兜底(防捕获登录前中间态 token)
- 建目录:CreateDirectory 携带默认家庭空间 ID(FamilyUserCurrentEncode.defaultHomeId,个人云同样要求)
- 上传:upload2C 8MiB 分片直传(secret 加密请求体)
- 过期处理:RSP_CODE=1001 → 引导重新登录;9999 时无 refresh_token 用现有 access_token 重试一次
-
115 网盘(115)Provider
凭据为完整 Cookie(核心 UID/CID/SEID/KID),直连 webapi.115.com:
- 登录:WebView 捕获 Cookie 按名去重合并;check/sso 验证(user_id>0 有效)
- 建目录 / 复用:files/add 建目录(成功响应 errno 为空串,约定 state:true 即成功);已存在 20004 幂等,files/getid 反查复用
- 上传:sampleinitupload 取 OSS 凭证(bucket 为 host 子域名)→ getuploadinfo/gettoken → OSS PUT 分片直传(x-oss-callback 注册)
- 下载:downurl 加密直链 RSA+XOR 解密后流式下载
- 过期处理:HTTP 401 / errno 40100 / user_id==0 → 引导重新登录
至此传输通道增至 11 种:SMB / WebDAV / 自定义脚本 / 139 / 光鸭 / 夸克 / 123 / 天翼189 / 百度 / 联通沃盘 / 115
-
NAS 配置页 UI 重构 + 正式启用自定义 JS 脚本
- 顶部浏览器式选项卡 | NAS配置 | 自定义配置 |,右侧方案下拉按选项卡类型过滤(NAS=smb/webdav,自定义=script)
- 每个配置项标签下新增 12sp 灰色说明行(服务器地址/端口/共享目录/用户名/密码/WebDAV URL/上传线程/切片大小)
- 脚本选项卡:脚本编辑框 + 「加载示例脚本」模板 + %名称% 占位符配置项(脚本中出现占位符自动生成配置项输入框,运行期自动替换,改配置不用改脚本)
- 「如何自定义脚本」帮助页(脚本结构/占位符/宿主函数/安全边界/切片规则/示例)
- 配置名称随选项卡联动(自定义页显示「自定义配置名称 / 例: 我的脚本方案」)
-
体验优化
- NAS 配置未保存时命名自动为「新配置」,下拉显示占位引导多配置管理;默认名重名自动追加序号保存(新配置 2/3…)
- footer 双作者链接:
Powered by zgcwkj · suileyan(点 suileyan 跳转 GitHub 仓库) - SMB 连接失败分类提示:共享文件夹不存在 / 无访问权限 / 服务器拒绝 / 网络错误,测试失败 toast 附具体原因(多共享场景不再迷茫)
🔧 修复
- 115 上传链五段修复(真机日志 + PC 实测定位):
- errno 空字符串被误判失败(115 成功约定 state:true,errno 为空/0)→ 空/0 且 state 非 false 视为成功
- files/getid 响应字段实测为
id(非 category_id)→ 已存在目录可复用,不再重建失败 - sampleinitupload 无 bucket 字段 → 从 host 子域名解析
- getuploadinfo endpoint 自带 http:// 前缀 → stripProtocol 剥离(修复 fhnfile.http 畸形 host)
- OSS 上传 URL 改 https(明文 http 被 Android 网络安全策略拦截)
- 联通沃盘上传链:CreateDirectory 补 familyId(9999 根因);dispatcher 9999 无 refresh_token 时用 access_token 重试;interceptWo 等长 token 轮换不生效
- 启动黑屏(PBKDF2 600000 迁移阻塞主线程 2 秒)→ 密钥预热后台化 + 账号加载异步化,BackupFragment 2055ms → 18ms
🛡️ 安全加固(全量代码审查 P0 集)
- 123/Quark 补凭据回滚(验证失败恢复旧凭据而非删除账号,对齐 189/百度/沃盘/115)
- WebView 请求/页面日志剥离 query string(防 access_token 落盘);关闭第三方 Cookie
- Yun139Login host 白名单校验(纵深防御 SSRF);openUrl 仅放行 http/https
- 账号 id 不再嵌入手机号(139_+时间戳);uid 日志只记长度
- PBKDF2 迭代 20000 → 600000 + 格式 v3 自动迁移(离线破解成本提升 30 倍)
- 手机号 PII 明文移出 cloud_accounts.json,改加密存储
⚠️ 已知限制
- 百度删除类写操作可能触发 errno=132 安全验证风控(账号级,API 无法绕过),仅影响旧备份自动清理
- 百度 BDUSS、115 Cookie、联通沃盘 token 均无刷新机制,失效需重新网页登录
- 天翼 generateRsaKey 接口与登录 IP 绑定,跨网络环境调试需在登录设备上验证
- 联通沃盘 9999 系统异常时用现有 token 重试,若 token 已轮换可能仍需重新登录
📦 安装
- 下载 miback_sly-0.7.0.apk 安装(覆盖安装保留配置)
- 在 LSPosed 中启用模块,勾选作用域 com.miui.backup + com.android.settings
- 重启手机后进入 系统设置 → 云备份助手 → NAS 配置页使用自定义 JS 选项卡 / 云盘 Tab 添加沃盘、115 账号
v0.6.0
v0.6.0 更新日志
发布日期:2026-08-10 | versionCode:600 | 签名:正式签名 APK(可直接安装)
✨ 新增功能
1. 天翼云盘(189)Provider
参照 wes-lin/cloud189-sdk 完整复刻:
- 登录链:WebView 捕获
SSONCookie →getSessionForPC换sessionKey→getAccessTokenBySsKey补accessToken - 上传链:
initMultiUpload(秒传检测)→checkTransSecond→getMultiUploadUrls→ 并发 5 分片直传 →commitMultiUploadFile;partSize三段式对齐 SDK - 三类签名逐字对齐 SDK:api 域
Accesstoken(小写 t)MD5 签名头、AppKey 签名头、upload 域 AES-128-ECB + RSA + HMAC-SHA1 - 会话自愈:
InvalidAccessToken/InvalidSessionKey(HTTP 400)自动清空对应 token 重试;refreshToken 自动轮换
2. 百度网盘(baidu)Provider
xpan API 直连(app_id=250528,可访问全盘):
- 登录:WebView 捕获 Cookie(核心
BDUSS,跨pan/passport双域合并去重) - 上传:
precreate秒传检测(block_list空数组 = 命中)→superfile2并发 3 分片(partseq 0 起,响应 md5 与本地比对)→createtype=2 合并;合并失败整文件重传一次 - 下载 / 删除:
filemetas取dlink直链流式下载;filemanager删除(filelist 含 fs_id) - 过期处理:errno -6 / 403+31045 → 引导重新登录
至此传输通道增至 9 种:SMB / WebDAV / 自定义脚本 / 139 / 光鸭 / 夸克 / 123 / 天翼189 / 百度
🔧 修复
- 天翼校验失败:
getSessionForPC的res_code为字符串错误码(如"UserInvalidOpenToken")时被optInt误判为成功 → 改为字符串判断 + 字段名双兼容 - 天翼上传失败(1):
generateRsaKey在会话有效时返回 XML(<keyPair><pubKey>…)而非 JSON → 双格式兼容解析(SDK 自身.json()对该接口同样失效) - 天翼上传失败(2):
encodeURIComponent移植中String.format("%02X", char)抛IllegalFormatConversionException(中文文件名必现)→ 显式(int)转换 - 百度上传失败:旧
rapidupload秒传接口已被百度限制(errno=2)→ 移除秒传分支,统一precreate承担秒传检测;filemanager删除补fs_id
🛡️ 安全加固
- 幂等复用账号时验证失败恢复旧凭据而非删除账号(防误删有效登录态)
- 上传签名 uuid 改用 SecureRandom(不再用可预测的
java.util.Random) bdstoken失败日志不再打印响应体(JSON 形 token 不在脱敏正则覆盖范围)- 天翼账号日志中登录名(手机号)只记长度不记明文
res_code/code统一兼容字符串错误码,杜绝误判
⚠️ 已知限制
- 百度删除类写操作可能触发 errno=132 安全验证风控(账号级,API 无法绕过),仅影响旧备份自动清理,不影响备份/恢复主流程
- 百度
BDUSS无刷新机制,失效需重新网页登录 - 天翼
generateRsaKey接口与登录 IP 绑定,跨网络环境调试需在登录设备上验证
📦 安装
- 下载
miback_sly-0.6.0.apk安装 - 在 LSPosed 中启用模块,勾选作用域
com.miui.backup+com.android.settings - 重启手机后进入 系统设置 → 云备份助手 → 云盘 Tab 添加天翼 / 百度账号