diff --git a/.github/release-notes/versions/1.10.0.md b/.github/release-notes/versions/1.10.0.md index c08e1aa..e481815 100644 --- a/.github/release-notes/versions/1.10.0.md +++ b/.github/release-notes/versions/1.10.0.md @@ -1,36 +1,25 @@ -### 安全与兼容修复 +### 修复 -- 兼容 TheRouter 编译期注册:生成类存在但无运行时索引时不再硬报错;保留索引回退检查,未知注册模式继续明确拒绝并给出排查指引。 -- 新增 TheRouter 注册兼容自动回归,覆盖编译期注册、索引回退和未知模式三类样本。 +- 兼容“JPEG/WebP 内容伪装为 `.png`”的历史资源:加固时批量识别 `res/drawable*`、`res/mipmap*` 下的非 PNG 图片并按实际格式无损改名,修复 aapt2 重打包时报 `failed to read PNG signature` 的问题。GIF/BMP/未知格式、空文件、九宫格和同名目标会明确报错,`res/raw` 不改动。(#64) +- 修复覆盖安装后 ARouter 路由缓存失效导致的 Fragment 为空:在 `attachBaseContext()` 提前准备路由缓存,版本名/版本号变化或缓存缺失(含空集合)时主动注册全部路由;缓存与当前路由表一致时跳过写入,避免影响正常 ARouter App。(#63) +- 修复 BYOS 独立 R8 将 JNI 固定入口 `z` 改名导致的 `JNI_ERR`;固定 JNI 方法名并在打包前校验,标准、BYOS、Play 三套资源均通过真机 JNI 注册检查。 +- 修复真机 E2E 在 macOS 上读取二进制文件头时的 `grep` locale 兼容问题。 -### iOS +### 新增与兼容 -- 明确 freeRASP 事件接入与业务阻断边界:`SecurityThreatHandler` 负责收集事件,业务可在敏感操作前查询 `shouldRestrictSensitiveOperations()` 或监听通知执行拒绝策略;新增可选 `block_on_critical`,命中关键威胁时终止进程,默认关闭。 +- BYOS `device_approval` 最低输入版本从 `minSdkVersion 26` 降至 **24(Android 7.0)**;BYOS 变体启用 core library desugaring,API 24/25 可正常运行,Play 模式仍要求 API 29。 +- 新增 JPEG/WebP 伪装 PNG 的批量兼容测试,以及 ARouter 升级覆盖安装、空缓存、缓存一致时跳过写入的回归测试。 +- 保留并完善 ARouter/TheRouter 路由索引 assets 保护能力,支持 `.rtap` 加密索引和运行时解密。 +- iOS 保留可选 `block_on_critical`:命中关键 freeRASP 威胁时可终止进程,默认关闭;业务可在敏感操作前查询风险状态。 +- 发布流程保持手动触发;新增 `CI 通过` 汇总门禁、TheRouter 兼容检查、证据基线和依赖漏洞扫描。 -### Android +### 工程与依赖 -- 新增 `--protect-route-assets`:把 ARouter/TheRouter 路由索引写为认证加密的 `.rtap`,不再写出同名明文 `.txt`;壳在 DEX 解密后内存解密。该选项默认关闭,需要配套壳运行时;GUI 加固页已提供对应开关。 - -### 工程、CI 与发布 - -- Release 改为手动触发,合并 PR 不再自动发版;发布前增加 main 来源、版本号一致性和工作区检查。 -- 新增 `next` 集成分支验证、`CI 通过` 汇总门禁、TheRouter 兼容检查和依赖漏洞扫描。 -- 接入 Dependabot(Cargo、npm、Gradle、GitHub Actions)和 `cargo-deny` 公告检查;首轮只告警,不阻塞发布。 -- 发布说明改为提前维护本文件,发版时由 Release 工作流自动读取。 -- 新增 `docs/evidence/` 证据基线和 `scripts/evidence/` 采集/恢复/差分/运行时采样脚本;发布前运行 `check-evidence-ready.sh`,未验证项必须显式保留。 - -### 文档与边界 - -- 补充 BYOS 威胁模型与单设备 IKM 泄漏边界,区分已覆盖威胁、明确不排期的架构边界和部署运维要求。 -- 保持“提高分析成本,不承诺无法逆向”的对外口径;未完成真机、Google Play 或第三方服务验证的项目继续标记为待验证。 +- 将 `zip` 升级到 9.3.0,适配新的 ZIP 读取/写入 API;标准 ZIP 注释继续保留。 +- 升级存在安全公告的 `zstd`、`zstd-safe`、`zstd-sys`、`rustls`、`rustls-webpki`、`tokio`、`webpki-roots` 等依赖。 +- 依赖更新:clap、serde_json、cc、Radix Separator、lucide-react、typescript-eslint、autoprefixer。 ### 升级说明 -- 本版本不改变 DEXB v6/v7、PVM2 镜像或 BYOS 协议版本;已发布产物无需仅因本版本重新加固。 -- TheRouter 兼容修复需要重新执行加固流程后生效。 -- 发布前仍需完成 Android 壳构建、完整 E2E、三平台打包、iOS 归档和发布前检查。 - -### 验证范围与未验证项 - -- 本文件是 1.10.0 草稿;每合入一个 PR 后补充对应条目和 PR 编号。 -- 真机矩阵、Google Play 内测轨道、AAB Play App Signing、iOS 真机运行和第三方服务联通仍需在对应环境验证,不能用本地构建结果替代。 +- 图片兼容、ARouter 覆盖安装和 BYOS API 24 兼容需要重新执行加固流程后生效。 +- 已发布产物无需仅因本版本重新加固;DEXB v6/v7、PVM2 镜像和 BYOS 协议版本未改变。 diff --git a/Cargo.lock b/Cargo.lock index f6d9690..87f7902 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2202,7 +2202,7 @@ dependencies = [ [[package]] name = "mocika-shield" -version = "1.10.0-rc.1" +version = "1.10.0" dependencies = [ "dunce", "reqwest 0.12.28", @@ -2230,7 +2230,7 @@ dependencies = [ [[package]] name = "mocikashield" -version = "1.10.0-rc.1" +version = "1.10.0" dependencies = [ "cc", "chacha20poly1305", @@ -3649,7 +3649,7 @@ dependencies = [ [[package]] name = "shield-cli" -version = "1.10.0-rc.1" +version = "1.10.0" dependencies = [ "anyhow", "clap", @@ -3667,7 +3667,7 @@ dependencies = [ [[package]] name = "shield-core" -version = "1.10.0-rc.1" +version = "1.10.0" dependencies = [ "anyhow", "base64 0.22.1", diff --git a/apps/shield-cli/Cargo.toml b/apps/shield-cli/Cargo.toml index 69e1f06..fdc9b64 100644 --- a/apps/shield-cli/Cargo.toml +++ b/apps/shield-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "shield-cli" -version = "1.10.0-rc.1" +version = "1.10.0" edition = "2021" authors = ["MocikaDev"] license = "MIT OR Apache-2.0" diff --git a/apps/shield-gui/package-lock.json b/apps/shield-gui/package-lock.json index 3b9c7b1..2653e26 100644 --- a/apps/shield-gui/package-lock.json +++ b/apps/shield-gui/package-lock.json @@ -1,12 +1,12 @@ { "name": "mocika-shield-gui", - "version": "1.10.0-rc.1", + "version": "1.10.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mocika-shield-gui", - "version": "1.10.0-rc.1", + "version": "1.10.0", "license": "MIT OR Apache-2.0", "dependencies": { "@radix-ui/react-dialog": "^1.1.19", diff --git a/apps/shield-gui/package.json b/apps/shield-gui/package.json index 363f3b1..cd22b38 100644 --- a/apps/shield-gui/package.json +++ b/apps/shield-gui/package.json @@ -1,6 +1,6 @@ { "name": "mocika-shield-gui", - "version": "1.10.0-rc.1", + "version": "1.10.0", "license": "MIT OR Apache-2.0", "private": true, "type": "module", diff --git a/apps/shield-gui/src-tauri/Cargo.toml b/apps/shield-gui/src-tauri/Cargo.toml index 904e0e7..8c59652 100644 --- a/apps/shield-gui/src-tauri/Cargo.toml +++ b/apps/shield-gui/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mocika-shield" -version = "1.10.0-rc.1" +version = "1.10.0" edition = "2021" license = "MIT OR Apache-2.0" publish = false diff --git a/apps/shield-gui/src-tauri/tauri.conf.json b/apps/shield-gui/src-tauri/tauri.conf.json index 6633b53..ae7c5e5 100644 --- a/apps/shield-gui/src-tauri/tauri.conf.json +++ b/apps/shield-gui/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "Shellsmith", - "version": "1.10.0-rc.1", + "version": "1.10.0", "identifier": "dev.mocika.shield-gui", "build": { "beforeDevCommand": "npm run dev -- --host 127.0.0.1", diff --git a/apps/shield-gui/src/hooks/use-about-page.ts b/apps/shield-gui/src/hooks/use-about-page.ts index b6427b0..da16b46 100644 --- a/apps/shield-gui/src/hooks/use-about-page.ts +++ b/apps/shield-gui/src/hooks/use-about-page.ts @@ -9,7 +9,7 @@ type AppInfo = { }; const defaultAppInfo: AppInfo = { - version: "1.10.0-rc.1", + version: "1.10.0", git_hash: "dev", build_date: "unknown", }; diff --git a/crates/shield-core/Cargo.toml b/crates/shield-core/Cargo.toml index 9dfff73..12d53cc 100644 --- a/crates/shield-core/Cargo.toml +++ b/crates/shield-core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "shield-core" -version = "1.10.0-rc.1" +version = "1.10.0" edition = "2021" authors = ["MocikaDev"] license = "MIT OR Apache-2.0" diff --git a/shield-stub/compat/api19-rust/Cargo.lock b/shield-stub/compat/api19-rust/Cargo.lock index a937d33..e67eb0b 100644 --- a/shield-stub/compat/api19-rust/Cargo.lock +++ b/shield-stub/compat/api19-rust/Cargo.lock @@ -242,7 +242,7 @@ checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "mocikashield-api19" -version = "1.10.0-rc.1" +version = "1.10.0" dependencies = [ "cc", "chacha20poly1305", diff --git a/shield-stub/compat/api19-rust/Cargo.toml b/shield-stub/compat/api19-rust/Cargo.toml index a52f4a8..7fee9fa 100644 --- a/shield-stub/compat/api19-rust/Cargo.toml +++ b/shield-stub/compat/api19-rust/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mocikashield-api19" -version = "1.10.0-rc.1" +version = "1.10.0" edition = "2021" license = "MIT OR Apache-2.0" build = "../../src/main/rust/build.rs" diff --git a/shield-stub/src/main/rust/Cargo.toml b/shield-stub/src/main/rust/Cargo.toml index c4abc35..3ef185a 100644 --- a/shield-stub/src/main/rust/Cargo.toml +++ b/shield-stub/src/main/rust/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mocikashield" -version = "1.10.0-rc.1" +version = "1.10.0" edition = "2021" license = "MIT OR Apache-2.0"