Skip to content

fix: 保留签名恢复副本并修正工具预检与报告结果 - #106

Merged
kairowan merged 1 commit into
mainfrom
fix/mcp-extra-audit-20261112
Nov 12, 2026
Merged

kairowan merged 1 commit into
mainfrom
fix/mcp-extra-audit-20261112

Conversation

@kairowan

Copy link
Copy Markdown
Owner

来源

修复 2026-11-12/MCP补充确认/补充报告.md 中的 3 项问题。

修复内容

P1 回滚失败后的恢复副本被 MCP 删除

  • 恢复目录改为在调用 apksigner 之前创建于输出目录,而不是 SHELLSMITH_STAGE_ROOT 任务暂存目录
  • 即使输出目录随后被改为只读,已创建的恢复目录仍可写入
  • CLI recovery.keep() 保留的恢复副本不在 MCP 任务临时目录内,MCP 退出/取消清理不会删除它
  • 直接 CLI 与 MCP 对照探针确认:回滚失败后 report.json 备份在两条路径下都仍然存在

P2 自定义 apksigner 被证书预检忽略

  • shield check-apk 新增 --apksigner <JAR>,同时用于签名验证和证书指纹读取
  • MCP shellsmith_check_apk 暴露可选 apksigner
  • protect_apk 证书预检优先使用 sign.apksigner,其次使用顶层 apksigner
  • 真实隔离 CLI 探针确认:默认工具不可用时,传入自定义 JAR 可以正确读取证书并启动预检

P2 普通签名返回不存在的报告路径

  • JobPlan 新增期望报告路径;任务成功时只有文件实际存在才保留结果中的 report
  • sign_apk、protect_apk、protect_aab 统一使用该过滤
  • 普通签名结果不再包含伪造的 .protection.json;已有报告仍会返回
  • 真实签名探针确认结果是 {output},没有 report 字段

验证

  • cargo fmt --all --check
  • 全量 clippy -D warnings
  • cargo test -p shellsmith-mcp:19 passed
  • cargo test -p shield-core:263 passed(新增恢复目录测试)
  • cargo test -p shield-cli:22 passed
  • python3 -m unittest discover -s scripts/tests:48 passed
  • 真实 CLI 探针:
    • 恢复失败时直接 CLI 与 MCP 的 report.json 备份均存在
    • 自定义 apksigner:无自定义时证书为 null,传入后读取到正确证书,protect_apk 预检通过
    • 普通签名结果不再包含不存在的 report

未实机验证

  • 未做 APK 安装启动、Windows 实机、iOS Archive 或 16KB 运行矩阵
  • 恢复探针使用 Java 替身模拟提交/回滚失败;目录、口令、备份、回滚和 MCP 清理走真实代码

- 签名恢复目录在 apksigner 运行前创建于输出目录,不再放入 MCP 任务暂存根目录
- 回滚失败时 CLI keep 的恢复副本不会被 MCP 清理
- check-apk 支持 --apksigner;MCP 证书预检复用实际签名器路径
- 任务结果仅在保护报告实际存在时返回 report 字段
- 补充自定义签名器、缺失报告和恢复目录的回归测试
@kairowan
kairowan merged commit 8900e76 into main Nov 12, 2026
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant