Skip to content

Releases: suileyan/xpmibackup_sly

v1.1.0

Choose a tag to compare

@github-actions github-actions released this 28 Sep 16:00

新增第 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 分割线)
  • 切换后即时重放 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 · 首个正式版

Choose a tag to compare

@github-actions github-actions released this 22 Sep 23:19

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 发布

Choose a tag to compare

@github-actions github-actions released this 05 Sep 10:28

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

Choose a tag to compare

@github-actions github-actions released this 17 Aug 11:16

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 网盘

Choose a tag to compare

@github-actions github-actions released this 13 Aug 05:45

v0.8.1 更新内容

修复

  • 更新弹窗「下载 APK」按钮改指向 123 网盘分享链接:此前该按钮跳转 GitHub Release 直链,国内网络常无法下载;现改为跳转 123 网盘分享页,点击后可直接下载 APK(分享密码已内置在链接中,无需手动输入)。
    • 支持通过 config.ini 的 download_url 覆盖下载地址(留空使用默认 123 分享链接)。
    • 弹窗内「前往下载」按钮仍保留,指向 GitHub Release 页。

说明

  • 本版本无功能改动,仅调整更新弹窗的下载通道。
  • 下载 APK 后如提示版本低于当前版本,属正常现象(各版本签名一致,可覆盖安装)。

下载

  • 更新弹窗内点击「下载 APK」,或访问 GitHub Release 下载附件。

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 13 Aug 05:30

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

Choose a tag to compare

@github-actions github-actions released this 10 Aug 16:42

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

Choose a tag to compare

@github-actions github-actions released this 10 Aug 14:49

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

Choose a tag to compare

@github-actions github-actions released this 10 Aug 09:43

v0.7.0 更新日志

发布日期:2026-08-10 | versionCode:700 | 签名:正式签名 APK(可直接安装)

✨ 新增功能

  1. 联通沃盘(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 重试一次
  2. 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

  3. NAS 配置页 UI 重构 + 正式启用自定义 JS 脚本

    • 顶部浏览器式选项卡 | NAS配置 | 自定义配置 |,右侧方案下拉按选项卡类型过滤(NAS=smb/webdav,自定义=script)
    • 每个配置项标签下新增 12sp 灰色说明行(服务器地址/端口/共享目录/用户名/密码/WebDAV URL/上传线程/切片大小)
    • 脚本选项卡:脚本编辑框 + 「加载示例脚本」模板 + %名称% 占位符配置项(脚本中出现占位符自动生成配置项输入框,运行期自动替换,改配置不用改脚本)
    • 「如何自定义脚本」帮助页(脚本结构/占位符/宿主函数/安全边界/切片规则/示例)
    • 配置名称随选项卡联动(自定义页显示「自定义配置名称 / 例: 我的脚本方案」)
  4. 体验优化

    • 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

Choose a tag to compare

@github-actions github-actions released this 10 Aug 01:57

v0.6.0 更新日志

发布日期:2026-08-10 | versionCode:600 | 签名:正式签名 APK(可直接安装)

✨ 新增功能

1. 天翼云盘(189)Provider

参照 wes-lin/cloud189-sdk 完整复刻:

  • 登录链:WebView 捕获 SSON Cookie → 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 与本地比对)→ create type=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 绑定,跨网络环境调试需在登录设备上验证

📦 安装

  1. 下载 miback_sly-0.6.0.apk 安装
  2. 在 LSPosed 中启用模块,勾选作用域 com.miui.backup + com.android.settings
  3. 重启手机后进入 系统设置 → 云备份助手 → 云盘 Tab 添加天翼 / 百度账号