From b9a305980710a8a8e9c6e291c4578f7b729e5987 Mon Sep 17 00:00:00 2001 From: haonan Date: Mon, 19 Oct 2026 11:37:57 +0800 Subject: [PATCH 1/4] =?UTF-8?q?fix:=20=E6=94=B6=E6=95=9B=E8=BF=90=E8=A1=8C?= =?UTF-8?q?=E6=97=B6=E8=AF=8A=E6=96=AD=E5=B9=B6=E8=A1=A5=E9=BD=90=20REA=20?= =?UTF-8?q?=E5=88=86=E5=B1=82=E9=AA=8C=E6=94=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 1 + docs/design/rea-resilience.md | 109 +++++++++++++ docs/process/test-checklist.md | 4 +- shield-stub/src/main/rust/build.rs | 1 + .../protector/packer/ApkRecoveryCheck.java | 13 +- tests/native/pvm2_runtime_check.cpp | 23 +++ tests/scripts/check-pvm2-runtime.py | 12 +- tests/scripts/check-rea-resilience.py | 152 ++++++++++++++++++ .../native/src/main/cpp/common/log.h | 5 +- .../native/src/main/cpp/vm/pvm2_interp.cpp | 7 + tools/xop-pvm2-packer.jar | Bin 8310391 -> 8310390 bytes 11 files changed, 316 insertions(+), 11 deletions(-) create mode 100644 docs/design/rea-resilience.md create mode 100644 tests/scripts/check-rea-resilience.py diff --git a/docs/README.md b/docs/README.md index 407aaaf..9d474a8 100644 --- a/docs/README.md +++ b/docs/README.md @@ -41,6 +41,7 @@ Shellsmith 是 Android 与 iOS 双平台应用加固工具。Android 流程加 | 了解 Native 库名去品牌化与按任务别名方案 | [design/native-library-alias.md](design/native-library-alias.md) | | 了解 Stub DEX 最小化、能力变体与二阶段加载实验 | [design/stub-dex-minimization.md](design/stub-dex-minimization.md) | | 了解运行时安全、缓存认证与 Root 策略规划 | [design/runtime-security.md](design/runtime-security.md) | +| 验证 REA 分析抵抗与 APK 离线恢复边界 | [design/rea-resilience.md](design/rea-resilience.md) | | 了解 API 31 以上内存 DEX 正式接入边界 | [design/memory-dex-production.md](design/memory-dex-production.md) | | 了解 DEX 结构与方法代码分离研究 | [design/dex-code-separation.md](design/dex-code-separation.md) | | 了解工具链轻量化、CI 与 Gradle 集成规划 | [design/toolchain-modernization.md](design/toolchain-modernization.md) | diff --git a/docs/design/rea-resilience.md b/docs/design/rea-resilience.md new file mode 100644 index 0000000..07dad4c --- /dev/null +++ b/docs/design/rea-resilience.md @@ -0,0 +1,109 @@ +# REA 分析抵抗:实施与验证 + +2026-10-19 修订。本文替代旧方案中未经通用兼容验证的全资源加密、业务 JNI 改名和随机魔数方案。 + +## 威胁模型 + +目标项目为 [morluto/rea](https://github.com/morluto/rea),本轮固定 `rea-agents@6.7.0`。它编排 JADX、Native 分析引擎、资源工具和 adb,并已具备 [Frida 会话与脚本能力](https://github.com/morluto/rea/blob/rea-agents-6.7.0/docs/frida-instrumentation.md)。旧文档“不用 Frida、只能静态分析”的判断已失效。 + +保持通用离线加固、手机安装即用。软件自动管理本地项目材料,但手机执行所需的引导材料仍随 APK 交付。因此: + +- 证书摘要是公开身份信息;更换密码算法、随机文件名或增加加密层数不能产生包外秘密。 +- DEXB v6 的 APK 公开材料足以恢复载荷密钥。默认模式不承诺 APK 机密性。 +- 解释器与应用同时交付,虚拟化只能提高分析成本。镜像解密、规范化字节码、等价方法重建、恢复原始源码是不同成果。 +- 客户端完整性检查可以发现未经适配的修改,但不能在代码可任意修改时构成独立信任根。Android 系统验签与应用内部验签不是同一边界。 + +不针对工具名称拉黑、不向 AI 植入提示、不制造畸形 DEX,也不把分析器崩溃、工具缺失或超时计为防护通过。 + +## 已实施 + +### 收敛 Native 内部诊断 + +在所有调用共用的日志入口处理发布版 `PLOGE`:保留固定故障码 `P1`,移除方法编号、虚拟操作码、程序计数器、池与解析字段。解释器自己的 RuntimeException 和 SecurityException 分别使用 `P1` / `P2` 通用消息。 + +开发构建保留详细诊断。业务抛出的异常对象、异常类型、捕获顺序及 finally 行为按原语义传播。加固桌面端的逐方法失败报告保持可用。 + +同步将 `common/log.h` 纳入 Rust 构建的变更依赖,避免增量构建分发旧日志实现。Native 回归分别编译开发和发布实现,发布实现仍启用测试断言,并检查内部消息不进入二进制。 + +这项变更减少静态字符串与设备错误日志给分析者提供的线索,不改变密钥保密边界,也不代表阻止 Frida 注入或 Native 反编译。 + +### 修复离线恢复验收 + +`ApkRecoveryCheck` 原来只在完整 APK 路径接受镜像 v7/v8,而当前生产为 v9;自检走另一入口,未覆盖该问题。现在两个入口共用版本与结构检查,支持 v7~v9,未知版本必须明确失败。 + +检查覆盖报告中的全部已验证跳板与镜像,保留三种 ISA、随机映射、非法映射和未知版本反例。它使用仓库已有的公开格式知识,是白盒恢复检查,不能冒称 REA 自身已自动完成同样恢复。 + +### 建立实际 REA 回归 + +新增 `tests/scripts/check-rea-resilience.py`,读取授权 APK 与逐方法报告,校验输入/输出哈希后: + +1. 使用 REA 搜索加固包内的业务类,要求引擎完整返回。 +2. 仅用 APK 内材料执行白盒恢复,核对全部受保护方法的跳板及镜像。 +3. 从加固 APK 与恢复 DEX 生成仅供静态分析的未签名包,不借用原包代码,不安装。 +4. 使用 REA 对指定抽样方法分别读取原始方法体、恢复后的跳板,核对签名与报告中的保护范围。 +5. 统计各 ABI 的已知内部诊断;可要求发布产物没有这些诊断和性能采样标记。 + +记录工具版本、JADX 哈希、APK 哈希、逐次原始 Evidence 和错误日志。工具失败、部分输出及未知版本返回非零,不能成为“抗还原通过”。`same_decompiled_text=false` 只表示文本不同;语义重建与动态注入默认明确标记未验证。 + +报告目录权限为仅当前用户可访问,包含业务标识和恢复代码,默认放忽略的 `target/` 下,不自动上传。 + +## 本轮验收结果 + +自有 Java/D8 样本,min API 26;对照为 1.8.5 正式产物。结果不代表所有客户 APK 或任意 Native SO。 + +| 项目 | 1.8.5 | 本轮修改后 | +|---|---|---| +| 所选/已验证 PVM2 方法 | 52 / 46 | 52 / 46 | +| REA 直接搜索业务类 | 0 命中,搜索完整 | 0 命中,搜索完整 | +| 白盒恢复镜像及核对跳板 | 46 / 46 | 46 / 46 | +| 四 ABI 壳库的本轮诊断特征命中 | 每 ABI 12 处 | 每 ABI 0 处 | +| REA 读取恢复 DEX 的三个抽样方法 | VM 调用跳板 | VM 调用跳板 | + +两个构建的 46 个规范化指令摘要多重集一致,未观察到 VM 语义多样化增强。三个抽样方法覆盖字符串、嵌套异常和业务调用;不能据此宣称全部方法无法重建。 + +Native 开发/发布模式均通过 ASan/UBSan、JNI 执行、认证失败、解析失败、异常传播、缓存清理及并发回归。标准四 ABI 和独立 API 19 资源构建通过;本轮设备执行仅在 HONOR Android 15/API 35、arm64、4 KB 页大小上完成:5 个场景各 525 项检查,共 2,625 项,测试包已移除。未将其他平台的编译成功当作设备验证。 + +完整语义还原、真实 Frida 注入、Native 反编译成本和正式性能分布仍未在本轮验证;本轮没有“防住 REA”或保护代际提升的结论。 + +## 复现 + +需要 JDK 17、兼容的 Node 22.19 以上版本、本地 zstd、已构建的配套打包器及壳。研究工具安装到隔离目录,不运行 `rea setup`,不修改个人代理配置: + +```bash +npm install --prefix target/rea-resilience/tooling --ignore-scripts --omit=optional \ + --no-audit --no-fund --registry=https://registry.npmjs.org rea-agents@6.7.0 +``` + +按 [REA 的 Android 指南](https://github.com/morluto/rea/blob/rea-agents-6.7.0/docs/android-analysis.md) 下载 `jadx-headless-mcp-0.7.1-all.jar`。脚本强制验证 SHA-256 为 `6e5eacf500b64292bfb73c49797c1958f6ee44646e43e868039ae7feb573ff75`。 + +```bash +make build-stub +make build-cli +python3 tests/scripts/check-pvm2-art.py --min-api 26 --output target/rea-art +python3 tests/scripts/check-rea-resilience.py \ + --rea target/rea-resilience/tooling/node_modules/rea-agents/scripts/rea.mjs \ + --jadx-jar target/rea-resilience/jadx-headless-mcp-0.7.1-all.jar \ + --input-apk target/rea-art/input.apk \ + --protected-apk target/rea-art/protected-signed.apk \ + --report target/rea-art/protected-signed.apk.protection.json \ + --output target/rea-check \ + --class-query CompatibilityActivity \ + --method 'dev.mocika.shield.pvm2regression.CompatibilityActivity.RulesView#text' \ + --method 'dev.mocika.shield.pvm2regression.CompatibilityActivity.RulesView#nested' \ + --method 'dev.mocika.shield.pvm2regression.CompatibilityActivity.RulesView#calls' \ + --require-private-diagnostics +``` + +`--output` 必须不存在,以防覆盖历史证据。检查其他授权项目时显式指定对应输入、产物、报告与无重载的抽样方法;不能把本样本覆盖率套用到其他 APK。 + +## 后续优化的准入条件 + +| 方向 | 复用现有能力与验收要求 | +|---|---| +| PVM2 方法与 Native 覆盖 | 按每个产物报告分母、成功数和跳过原因;二进制 SO 加密不能计为源码 Native VMP。扩展语义必须有原始执行与保护后执行对照。 | +| VM 语义多样化 | 用同一恢复器对多个构建比较规范化结果、恢复步骤与人工成本。现有条件反转试验仍能被复用规范化,不作为增强默认启用。 | +| 动态明文窗口 | 复用已有按需解密、必保方法退出清理、LRU 和实际加载库完整性检查。真实 Frida 测试需单独记录目标、版本、权限与观察结果;普通启动通过不能替代。 | +| assets 与业务 SO | 复用已有精确覆盖与跳过原因报告。模型、数据库、媒体、动态路径和 JNI 导出涉及 SDK/加载契约,不默认改写所有文件。 | +| 包外秘密 | 只作为用户自管服务或离线设备激活的可选模式;需要明确改变首次使用流程。当前默认安装即用模式不能承诺这一性质。 | + +验收中保留“仍可静态恢复”的反例;不能因原脚本暂时失效、字节差异变大或特征串减少,就提高保护代际或宣称已防住 REA。 diff --git a/docs/process/test-checklist.md b/docs/process/test-checklist.md index c954531..48afcde 100644 --- a/docs/process/test-checklist.md +++ b/docs/process/test-checklist.md @@ -29,7 +29,9 @@ ANDROID_SDK_ROOT=/本机/Android/sdk \ python3 tests/scripts/check-pvm2-art.py --serial 目标设备序列号 ``` -该脚本自建无资源 APK 和测试证书,核验 26 个转换方法及 10 个保留方法,覆盖继承/接口分派、D8 桥接、私有方法反射、引用身份、整数边界、捕获顺序、重抛与 `finally`。每次启动以独立标记确认 482 项断言;执行未加固基线、加固首次启动、再次启动、覆盖安装及基线恢复。省略 `--serial` 仅构建并检查产物;指定设备时只安装测试包,不卸载应用或清除设备日志。默认保留合法空资源表,`--without-resource-table` 补测完全无资源表的 APK。结果写入 `target/pvm2-art-checks/result.json`,模拟器通过不能代替厂商真机验收。 +该脚本自建测试 APK 和证书,核验 46 个转换方法;min API 23 时总计 53 个方法,min API 26 时为 52 个。覆盖继承/接口分派、D8 桥接、私有方法反射、引用身份、整数边界、捕获顺序、重抛与 `finally`。每次启动以独立标记确认 525 项断言;执行未加固基线、加固首次启动、再次启动、覆盖安装及基线恢复。省略 `--serial` 仅构建并检查产物;指定设备时只安装测试包,不卸载应用或清除设备日志。默认保留合法空资源表,`--without-resource-table` 补测完全无资源表的 APK。结果写入 `target/pvm2-art-checks/result.json`,模拟器通过不能代替厂商真机验收。 + +修改发布版 Native 日志、PVM2 格式或抗分析策略后,还需执行 [REA 分层回归](../design/rea-resilience.md)。发布产物使用 `--require-private-diagnostics` 检查四 ABI,完整保留“包内材料仍可恢复”的检查结果;不得将工具错误计为防护有效。`make test-pvm2-runtime` 同时验证开发/发布模式下的 Native 语义和诊断收敛,生产 `NDEBUG` 不关闭测试断言。 AAB 候选版必须验证:`bundletool validate` 通过、APKS 包含预期 base/ABI/功能或 Asset Pack split、安装后进程保持运行,并在日志中观察到 PVM2 功能代码、PAS2 资源和业务 `.so` 探针。当前本机证据覆盖 API 35/Android 15 与 API 36/Android 16 的 arm64 install-time 组合;Google Play 内测和 Play App Signing 仍是独立门禁。 diff --git a/shield-stub/src/main/rust/build.rs b/shield-stub/src/main/rust/build.rs index 8668005..d43fb31 100644 --- a/shield-stub/src/main/rust/build.rs +++ b/shield-stub/src/main/rust/build.rs @@ -87,6 +87,7 @@ fn main() { rerun(&cpp.join(source)); } rerun(&cpp.join("common/runtime_state.h")); + rerun(&cpp.join("common/log.h")); rerun(&cpp.join("common/secure_memory.h")); rerun(&cpp.join("codeitem/multi_dex_code.h")); rerun(&cpp.join("crypto/aes.h")); diff --git a/tests/java/com/yqsh/protector/packer/ApkRecoveryCheck.java b/tests/java/com/yqsh/protector/packer/ApkRecoveryCheck.java index b8d29ff..0b89066 100644 --- a/tests/java/com/yqsh/protector/packer/ApkRecoveryCheck.java +++ b/tests/java/com/yqsh/protector/packer/ApkRecoveryCheck.java @@ -50,6 +50,9 @@ private static byte[] decrypt(byte[] key, byte[] nonce, byte[] data, boolean aes /** 白盒成本检查:复用已公开的指令长度/寄存器布局,反解每包的置换表。 */ private static byte[] canonicalCode(byte[] image) throws Exception { ByteBuffer b = buffer(image); + if (image.length < 19 || b.getInt() != 0x324d5650) throw new IllegalArgumentException("VM 镜像无效"); + int version = u16(b); + if (version < 7 || version > 9) throw new IllegalArgumentException("恢复检查不支持该 VM 版本;不能视为防护通过"); int registers = u16((ByteBuffer) b.position(6)); b.position(10); int handlers = u16(b), size = u16(b); b.position(16); int strings = u16(b); b.get(); @@ -71,7 +74,7 @@ private static byte[] canonicalCode(byte[] image) throws Exception { if (slot >= registers || reverse[slot] != -1) throw new IllegalArgumentException("寄存器映射无效"); reverse[slot] = (byte) i; } - if (buffer(image).getShort(4) >= 8) take(b, Byte.toUnsignedInt(b.get())); + if (version >= 8) take(b, Byte.toUnsignedInt(b.get())); take(b, handlers * 10); byte[] code = take(b, size); if (b.hasRemaining()) throw new IllegalArgumentException("VM 镜像尾部残留"); @@ -124,6 +127,9 @@ private static void selfTest() throws Exception { byte[] image = Pvm2Compiler.tryCompile(null, code, "I", true, Pvm2Morph.fromIsa(isa, new java.security.SecureRandom()), true).image; if (!Arrays.equals(canonicalCode(image), expected)) throw new AssertionError("随机映射未还原为预期指令"); + byte[] unsupported = image.clone(); unsupported[4] = 10; + try { canonicalCode(unsupported); throw new AssertionError("未拒绝未知镜像版本"); } + catch (IllegalArgumentException expectedFailure) { } // 此无常量池样本的前两个操作码映射位于 26、27 字节。 image[27] = image[26]; try { canonicalCode(image); throw new AssertionError("未拒绝重复映射"); } @@ -262,12 +268,11 @@ && buffer(dex).getInt(i + 4) == dex.length - i - 8 int method = code.getInt(), original = code.getInt(), size = code.getInt(), flags = code.getInt(); if (size < 28 || flags != 2) throw new IllegalArgumentException("VM 记录无效"); byte[] image = decrypt(key, take(code, 12), take(code, size - 12), true); - if (image.length != original || image.length < 19 || !Arrays.equals(Arrays.copyOf(image, 4), new byte[]{'P','V','M','2'}) - || (buffer(image).getShort(4) != 7 && buffer(image).getShort(4) != 8)) throw new IllegalStateException("VM 镜像无效"); + if (image.length != original) throw new IllegalStateException("VM 镜像长度不一致"); + byte[] canonical = canonicalCode(image); String name = "image-" + dexIndex + "-" + method + ".bin"; if (recovered.put(dexIndex + ":" + method, (int) image[18]) != null) throw new IllegalStateException("重复 VM 记录"); Files.write(root.resolve(name), image); - byte[] canonical = canonicalCode(image); Files.write(root.resolve(name + ".canonical"), canonical); images.put(new JSONObject().put("file", name).put("sha256", hash(image)).put("policy", image[18]) .put("canonical_code_sha256", hash(canonical))); diff --git a/tests/native/pvm2_runtime_check.cpp b/tests/native/pvm2_runtime_check.cpp index e8e68ab..94ab9ae 100644 --- a/tests/native/pvm2_runtime_check.cpp +++ b/tests/native/pvm2_runtime_check.cpp @@ -5,6 +5,13 @@ #define PROTECTOR_ENCRYPT #include "vm/pvm2_interp.cpp" #include "codeitem/multi_dex_code.h" +#ifdef NDEBUG +static constexpr bool release_diagnostics = true; +// 生产实现使用 NDEBUG,测试断言始终执行。 +#undef NDEBUG +#else +static constexpr bool release_diagnostics = false; +#endif #include #include #include @@ -197,6 +204,22 @@ int main(int argc, char** argv) { assert(JNI_CreateJavaVM(&jvm, reinterpret_cast(&env), &args) == JNI_OK); jobject result = interpret(env, 2, 0, nullptr); assert(result && !env->ExceptionCheck()); + auto check_error = [&](const char* type, const char* message) { + assert(env->ExceptionCheck()); + jthrowable error = env->ExceptionOccurred(); env->ExceptionClear(); + jclass cls = env->FindClass(type); + assert(env->IsInstanceOf(error, cls)); + auto text = static_cast(env->CallObjectMethod(error, + env->GetMethodID(cls, "getMessage", "()Ljava/lang/String;"))); + const char* chars = env->GetStringUTFChars(text, nullptr); + assert(!strcmp(chars, message)); + env->ReleaseStringUTFChars(text, chars); + env->DeleteLocalRef(text); env->DeleteLocalRef(cls); env->DeleteLocalRef(error); + }; + assert(!interpret(env, -1, 0, nullptr)); + check_error("java/lang/RuntimeException", release_diagnostics ? "Protection runtime error (P1)" : "VMP bad dex"); + throw_security(env, "VMP refused by RASP"); + check_error("java/lang/SecurityException", release_diagnostics ? "Protection policy rejected (P2)" : "VMP refused by RASP"); #if defined(MOCIKA_PVM2_PROFILE) assert(g_pvm2_profile == nullptr); const auto& profiled = g_pvm2_profile_sums.at(uint64_t(2) << 32); diff --git a/tests/scripts/check-pvm2-runtime.py b/tests/scripts/check-pvm2-runtime.py index d64da79..de717c7 100644 --- a/tests/scripts/check-pvm2-runtime.py +++ b/tests/scripts/check-pvm2-runtime.py @@ -41,8 +41,14 @@ str(ROOT / 'shield-stub/src/main/rust/src/xop_pvm2_bridge.cpp')] cmd += [str(CPP / s) for s in ['common/runtime_state.cpp', 'codeitem/multi_dex_code.cpp', 'crypto/aes.cpp', 'vm/pvm2_format.cpp']] cmd += ['-L' + str(java / 'lib/server'), '-Wl,-rpath,' + str(java / 'lib/server'), '-ljvm', '-o', str(exe)] - subprocess.run(cmd, check=True) env = dict(os.environ, ASAN_OPTIONS='detect_leaks=0', UBSAN_OPTIONS='halt_on_error=1') # JVM 自有分配及进程级 JNI 类缓存不用于解释器泄漏判定;对象生命周期由断言检查。 - subprocess.run([str(exe), 'block-before-init'], check=True, env=env) - subprocess.run([str(exe), str(temp)], check=True, env=env) + for release in (False, True): + subprocess.run(cmd + (['-DNDEBUG'] if release else []), check=True) + if release: + binary = exe.read_bytes() + for marker in (b'PVM2 bad ', b'PVM2 unknown op', b'unsupported code.bin version', + b'VMP bad dex', b'VMP argument count mismatch', b'VMP refused by RASP'): + assert marker not in binary, '发布版仍携带内部诊断:' + marker.decode() + subprocess.run([str(exe), 'block-before-init'], check=True, env=env) + subprocess.run([str(exe), str(temp)], check=True, env=env) diff --git a/tests/scripts/check-rea-resilience.py b/tests/scripts/check-rea-resilience.py new file mode 100644 index 0000000..cfec1f6 --- /dev/null +++ b/tests/scripts/check-rea-resilience.py @@ -0,0 +1,152 @@ +#!/usr/bin/env python3 +"""用固定版本 REA 与仓库白盒恢复检查分别验证授权 APK;不安装工具、不连接设备。""" +import argparse +import hashlib +import json +import os +from pathlib import Path +import re +import shutil +import subprocess +import zipfile + +ROOT = Path(__file__).resolve().parents[2] +JADX_SHA256 = '6e5eacf500b64292bfb73c49797c1958f6ee44646e43e868039ae7feb573ff75' +DIAGNOSTICS = (b'PVM2 bad ', b'PVM2 unknown op', b'unsupported code.bin version', + b'VMP bad dex', b'VMP argument count mismatch', b'VMP refused by RASP', + b'MOCIKA_PVM2_PROFILE') + + +def digest(path): + value = hashlib.sha256() + with path.open('rb') as stream: + for block in iter(lambda: stream.read(1024 * 1024), b''): + value.update(block) + return value.hexdigest() + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--rea', type=Path, required=True, help='rea-agents 6.7.0 的 scripts/rea.mjs') + parser.add_argument('--jadx-jar', type=Path, required=True) + parser.add_argument('--input-apk', type=Path, required=True) + parser.add_argument('--protected-apk', type=Path, required=True) + parser.add_argument('--report', type=Path, required=True, help='与加固 APK 哈希匹配的逐方法报告') + parser.add_argument('--output', type=Path, required=True, help='尚不存在的本地证据目录,包含业务标识') + parser.add_argument('--class-query', required=True) + parser.add_argument('--method', action='append', required=True, help='REA 类名#方法名;只接受无重载的抽样方法,可重复') + parser.add_argument('--require-private-diagnostics', action='store_true') + args = parser.parse_args() + for name in ('rea', 'jadx_jar', 'input_apk', 'protected_apk', 'report'): + path = getattr(args, name).resolve(strict=True) + if not path.is_file(): + raise ValueError('输入必须是文件:' + name) + setattr(args, name, path) + if digest(args.jadx_jar) != JADX_SHA256: + raise ValueError('JADX 与 REA 固定元数据不匹配') + rea = ['node', str(args.rea)] + version = subprocess.check_output(rea + ['--version'], text=True, timeout=30).strip() + if version != '6.7.0': + raise ValueError('本回归固定 REA 6.7.0;升级后需重新核验结果契约') + report = json.loads(args.report.read_text(encoding='utf-8')) + if (report['output_sha256'] != digest(args.protected_apk) + or report['build']['input_sha256'] != digest(args.input_apk)): + raise ValueError('报告与输入/输出 APK 不匹配') + work = args.output.resolve() + work.mkdir(mode=0o700, parents=True, exist_ok=False) + summary = {'rea_version': version, 'jadx_sha256': JADX_SHA256, + 'input_sha256': digest(args.input_apk), 'output_sha256': digest(args.protected_apk), + 'status': 'incomplete', 'semantic_reconstruction': 'not_evaluated', + 'dynamic_instrumentation': 'not_evaluated'} + env = dict(os.environ, REA_JADX_MCP_JAR=str(args.jadx_jar)) + + def inspect(label, apk, command, *selection): + with (work / (label + '.json')).open('w') as out, (work / (label + '.log')).open('w') as err: + subprocess.run(rea + [command, str(apk), *selection, '--json'], + stdout=out, stderr=err, env=env, check=True, timeout=180) + evidence = json.loads((work / (label + '.json')).read_text(encoding='utf-8')) + if (evidence['subject']['digest']['sha256'] != digest(apk) + or evidence['normalized_result']['engine']['artifact_sha256'] != JADX_SHA256): + raise ValueError('REA 证据未绑定本次产物或指定引擎') + return evidence['normalized_result'] + + try: + direct = inspect('direct-classes', args.protected_apk, 'search-android-classes', args.class_query) + if direct['coverage'] != 'complete': + raise ValueError('REA 类搜索未完成,不能判定保护效果') + summary['direct_class_matches'] = len(direct['matches']) + # 白盒恢复与 REA 分开计时/记证据,不把仓库私有知识冒充 REA 自动还原能力。 + classes = work / 'checker' + classes.mkdir() + jar = ROOT / 'tools/xop-pvm2-packer.jar' + sources = ROOT / 'tests/java/com/yqsh/protector/packer' + with (work / 'recovery.log').open('w') as log: + subprocess.run(['javac', '--release', '17', '-cp', str(jar), '-d', str(classes), + *[str(sources / (name + '.java')) for name in + ('Pvm2ProtectionCheck', 'Pvm2RuntimeImages', 'ApkRecoveryCheck')]], + stdout=log, stderr=log, check=True, timeout=120) + zstd = shutil.which('zstd') + if not zstd: + raise ValueError('缺少本地 zstd,不能把工具缺失视为抗还原通过') + subprocess.run(['java', '-ea', '-cp', str(classes) + os.pathsep + str(jar), + 'com.yqsh.protector.packer.ApkRecoveryCheck', str(args.protected_apk), + str(work / 'recovered'), zstd, str(args.report)], + stdout=log, stderr=log, check=True, timeout=180) + recovery = json.loads((work / 'recovered/recovery.json').read_text(encoding='utf-8')) + verified = sum(row['artifact_verified'] for row in report['methods']) + if verified == 0 or verified != recovery['verified_trampolines']: + raise ValueError('逐方法报告与恢复跳板数量不一致') + summary.update(selected_methods=len(report['methods']), verified_methods=verified, + recovered_images=len(recovery['recovered_images']), + verified_trampolines=recovery['verified_trampolines'], + apk_only_payload_recovery='recovered', recovery_ms=recovery['elapsed_ms']) + # 只从加固 APK 和恢复出的 DEX 重建静态分析输入,不借用原包代码,不安装此未签名包。 + recovered_apk = work / 'recovered-for-analysis.apk' + with zipfile.ZipFile(args.protected_apk) as original, zipfile.ZipFile(recovered_apk, 'w') as rebuilt: + for item in original.infolist(): + if re.fullmatch(r'classes\d*\.dex', item.filename) or item.filename.startswith('META-INF/'): + continue + rebuilt.writestr(item, original.read(item)) + for name in recovery['entries']: + if re.fullmatch(r'classes\d*\.dex', name): + rebuilt.write(work / 'recovered' / name, name) + samples = [] + protected_methods = {row['descriptor'].split(';->', 1)[0][1:].replace('/', '.').replace('$', '.') + + '#' + row['descriptor'].split(';->', 1)[1] + for row in report['methods'] if row['artifact_verified']} + for index, selection in enumerate(args.method): + owner, method = selection.rsplit('#', 1) + before = inspect('method-%d-before' % index, args.input_apk, 'inspect-android-method', owner, method) + after = inspect('method-%d-recovered' % index, recovered_apk, 'inspect-android-method', owner, method) + for evidence in (before, after): + if evidence['body_status'] != 'available' or evidence['source']['status'] != 'complete': + raise ValueError('REA 方法体读取不完整,不能判定语义是否隐藏') + if (selection + before['method']['dex_descriptor'] not in protected_methods + or before['method']['dex_descriptor'] != after['method']['dex_descriptor']): + raise ValueError('抽样方法没有对应到同签名的已验证保护方法') + samples.append({'class': owner, 'method': method, + 'same_decompiled_text': before['source']['text'] == after['source']['text'], + 'before_representation': before['representation'], 'after_representation': after['representation']}) + summary['method_samples'] = samples + with zipfile.ZipFile(args.protected_apk) as apk: + summary['native_diagnostic_matches'] = {} + for name in apk.namelist(): + if name.startswith('lib/') and name.endswith('.so'): + binary = apk.read(name) + summary['native_diagnostic_matches'][name] = sum(binary.count(marker) for marker in DIAGNOSTICS) + if args.require_private_diagnostics: + if not summary['native_diagnostic_matches']: + raise ValueError('未检查到 Native 库,不能判定发布诊断检查通过') + if any(summary['native_diagnostic_matches'].values()): + raise ValueError('产物仍携带内部诊断或性能采样文本') + summary['status'] = 'complete' + print('REA 回归完成;白盒已恢复 %d 个镜像,不能宣称 APK 载荷保密。' % summary['recovered_images']) + except Exception: + summary['status'] = 'error' + raise + finally: + (work / 'summary.json').write_text(json.dumps(summary, ensure_ascii=False, indent=2) + '\n', encoding='utf-8') + + +if __name__ == '__main__': + main() diff --git a/third_party/xopprotector/native/src/main/cpp/common/log.h b/third_party/xopprotector/native/src/main/cpp/common/log.h index 480c0f7..53fe72b 100644 --- a/third_party/xopprotector/native/src/main/cpp/common/log.h +++ b/third_party/xopprotector/native/src/main/cpp/common/log.h @@ -5,12 +5,11 @@ #define PROTECTOR_LOG_TAG "protector" #ifdef NDEBUG -// Release build: strip all diagnostic logs — they leak protection internals. +// 发布版保留故障信号,但不携带方法编号、指令或解析结构。 #define PLOGD(...) ((void)0) #define PLOGI(...) ((void)0) #define PLOGW(...) ((void)0) -// Keep PLOGE for crash forensics (only fires right before a crash). -#define PLOGE(...) __android_log_print(ANDROID_LOG_ERROR, PROTECTOR_LOG_TAG, __VA_ARGS__) +#define PLOGE(...) __android_log_print(ANDROID_LOG_ERROR, "runtime", "%s", "Protection runtime error (P1)") #else #define PLOGD(...) __android_log_print(ANDROID_LOG_DEBUG, PROTECTOR_LOG_TAG, __VA_ARGS__) #define PLOGI(...) __android_log_print(ANDROID_LOG_INFO, PROTECTOR_LOG_TAG, __VA_ARGS__) diff --git a/third_party/xopprotector/native/src/main/cpp/vm/pvm2_interp.cpp b/third_party/xopprotector/native/src/main/cpp/vm/pvm2_interp.cpp index 34fe47d..667926f 100644 --- a/third_party/xopprotector/native/src/main/cpp/vm/pvm2_interp.cpp +++ b/third_party/xopprotector/native/src/main/cpp/vm/pvm2_interp.cpp @@ -948,6 +948,10 @@ static void throw_arith(JNIEnv* env, const char* msg) { } static void throw_runtime(JNIEnv* env, const char* msg) { +#ifdef NDEBUG + // 只收敛解释器内部错误;业务抛出的异常仍按原对象传播。 + msg = "Protection runtime error (P1)"; +#endif throw_cached(env, jni_cache().runtime_ex, msg); } @@ -960,6 +964,9 @@ static void throw_cce(JNIEnv* env, const char* msg) { } static void throw_security(JNIEnv* env, const char* msg) { +#ifdef NDEBUG + msg = "Protection policy rejected (P2)"; +#endif throw_cached(env, jni_cache().security_ex, msg); } diff --git a/tools/xop-pvm2-packer.jar b/tools/xop-pvm2-packer.jar index fc1dfb63046ac271d27cecb1c60bb71fc2c610bd..7ffa7c05ed9a72ac7f97996f112587c9166346cc 100644 GIT binary patch delta 104140 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 delta 105270 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 KS>LNyum1wjkifA3 From 29defe795c262c6cd3a00bae7b8f724b2427f04b Mon Sep 17 00:00:00 2001 From: haonan Date: Mon, 19 Oct 2026 13:55:08 +0800 Subject: [PATCH 2/4] =?UTF-8?q?perf:=20=E7=BC=93=E5=AD=98=20DEX=20?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E7=B4=A2=E5=BC=95=E5=B9=B6=E8=A1=A5=E9=BD=90?= =?UTF-8?q?=E7=9C=9F=E5=AE=9E=20APK=20=E9=AA=8C=E6=94=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/design/rea-resilience.md | 26 +++++++++++++++++++ .../protector/packer/ApkRecoveryCheck.java | 25 +++++++++++------- 2 files changed, 42 insertions(+), 9 deletions(-) diff --git a/docs/design/rea-resilience.md b/docs/design/rea-resilience.md index 07dad4c..9509e7d 100644 --- a/docs/design/rea-resilience.md +++ b/docs/design/rea-resilience.md @@ -65,6 +65,32 @@ Native 开发/发布模式均通过 ASan/UBSan、JNI 执行、认证失败、解 完整语义还原、真实 Frida 注入、Native 反编译成本和正式性能分布仍未在本轮验证;本轮没有“防住 REA”或保护代际提升的结论。 +### 授权真实 APK 的追加验证 + +同日使用用户提供的真实 APK,在上述分支构建上加固并使用原匹配证书签名。业务标识、APK、逐方法报告及恢复输出仅保存在本机忽略目录,不随仓库分发。 + +| 项目 | 本产物结果 | +|---|---| +| 输入范围 | 8 份 DEX;`lib/` 中 39 个 SO,assets 归档另含 7 个 SO | +| 所选/已验证 PVM2 方法 | 54,249/11,613;总方法覆盖 21.41%,指令字节覆盖 30.52% | +| 指定必保测试范围 | 19/19;不代表关键业务完整清单 | +| 真机方法对照 | 原始与加固的独立测试包各 620 组输入、62,620 次调用通过 | +| 仅凭 APK 的白盒恢复 | 11,613 个镜像与跳板全部核对;27 个加密 SO 恢复为原包字节 | +| REA 直接搜索及恢复后抽样 | 直接搜索仅命中资源类;恢复后读取的三个抽样方法为 VM 跳板 | +| 条件方法语义重建 | 两个方法已从规范化指令重建,在边界、布尔组合及追加随机输入上与 Android 执行一致 | +| 三次独立构建 | 镜像字节各不相同,11,613 个方法的规范化指令摘要逐一相同 | +| 本 APK 的 Native VMP | 没有源码转换证据,不把 SO/归档加密计为函数虚拟化 | + +完整恢复入口原先对每条方法记录重新读取并扫描 DEX,在真实应用的上万条记录上形成重复工作;现在按 DEX 建立一次方法索引,再按完整签名核验原有跳板和镜像条件。报告中的未恢复 DEX、越界路径、缺失方法及错误索引仍被拒绝。打包器自检、完整实包核对及错误报告反例均通过。 + +三次白盒恢复执行约 4.3~5.2 秒,只是已有恢复程序的执行时间,不含研发、完整语义分析或攻击成本。真实 APK 的结果仍不支持“仅凭 APK 无法还原”:同一恢复器能够跨构建复用,两个条件方法已经形成重建反例。REA 自身的原始 Evidence 与白盒恢复证据分开保存,不把后者冒称 REA 原生全自动能力。 + +设备仍仅为上述 HONOR Android 15。为保护正式应用及其数据,使用同证书的独立测试包名,保留原始 DEX、SO 与业务签名检查;未做正式包升级安装、登录、录音和完整转写测试。REA 的 pwntools ELF 入口在本机 macOS 返回平台不支持,不计为 Native 防护通过;真实 Frida 注入仍未验证。 + +真实 APK 的交替六轮性能采样已完成,每包 30 个样本,另有每块三次预热,无异常启动。测量缓存建立后的进程冷启动到首屏:原始对照中位数 1,270 ms、P95 1,286 ms,加固包中位数 1,835 ms、P95 1,886 ms;启动中位数增加 44.49%。启动一秒后的主进程 PSS 中位数增加约 11.91 MiB(5.05%)。样本电池温度 35~38°C,热状态 0~1。未预设性能 SLA,不把这些数值表述为性能达标,也不外推到完整业务可交互时间或峰值内存。 + +独立测试包的载荷认证标签被修改一位、修复 DEX 校验和并重新使用匹配证书签名后,系统 APK 验签通过,运行时在加载业务前因载荷认证失败退出。它仅证明这一负例被拒绝,不证明客户端校验不可绕过。该异常仍暴露解密算法和加载栈,因此前述七类 PVM 诊断特征清理不能解释为全部运行时信息已隐藏。 + ## 复现 需要 JDK 17、兼容的 Node 22.19 以上版本、本地 zstd、已构建的配套打包器及壳。研究工具安装到隔离目录,不运行 `rea setup`,不修改个人代理配置: diff --git a/tests/java/com/yqsh/protector/packer/ApkRecoveryCheck.java b/tests/java/com/yqsh/protector/packer/ApkRecoveryCheck.java index 0b89066..33317b4 100644 --- a/tests/java/com/yqsh/protector/packer/ApkRecoveryCheck.java +++ b/tests/java/com/yqsh/protector/packer/ApkRecoveryCheck.java @@ -285,20 +285,27 @@ && buffer(dex).getInt(i + 4) == dex.length - i - 8 JSONObject report = new JSONObject(Files.readString(Path.of(args[3]))); if (!hash(Files.readAllBytes(apk)).equals(report.getString("output_sha256"))) throw new IllegalStateException("报告与 APK 不匹配"); JSONObject selection = report.getJSONObject("build").getJSONObject("selection"); + Map> dexMethods = new HashMap<>(); for (Object entry : report.getJSONArray("methods")) { JSONObject row = (JSONObject) entry; if (!row.getBoolean("artifact_verified")) continue; String name = row.getString("input_dex"); - DexBackedDexFile file = new DexBackedDexFile(Opcodes.getDefault(), Files.readAllBytes(root.resolve(name))); - boolean found = false; - for (var cls : file.getClasses()) for (var method : cls.getMethods()) { - if (!Pvm2Report.descriptor(method).equals(row.getString("descriptor"))) continue; - int index = row.getInt("final_method_index"), dexIndex = row.getInt("final_dex_index"); - if (!TrueVmpTrampoline.matches(method, dexIndex, index, selection.getString("bridge"), selection.getString("bridge_method")) - || !recovered.containsKey(dexIndex + ":" + index)) throw new IllegalStateException("跳板与镜像不一致"); - found = true; trampolines++; + if (!name.matches("classes[0-9]*\\.dex") || !hashes.has(name)) throw new IllegalArgumentException("报告引用了未恢复的 DEX"); + if (!dexMethods.containsKey(name)) { + // 每个 DEX 只清点一次;真实应用的上万条报告不能反复扫描整份 DEX。 + DexBackedDexFile file = new DexBackedDexFile(Opcodes.getDefault(), Files.readAllBytes(root.resolve(name))); + Map methods = new HashMap<>(); + for (var cls : file.getClasses()) for (var method : cls.getMethods()) { + if (methods.put(Pvm2Report.descriptor(method), method) != null) throw new IllegalStateException("DEX 方法签名重复"); + } + dexMethods.put(name, methods); } - if (!found) throw new IllegalStateException("恢复 DEX 中缺少方法"); + var method = dexMethods.get(name).get(row.getString("descriptor")); + if (method == null) throw new IllegalStateException("恢复 DEX 中缺少方法"); + int index = row.getInt("final_method_index"), dexIndex = row.getInt("final_dex_index"); + if (!TrueVmpTrampoline.matches(method, dexIndex, index, selection.getString("bridge"), selection.getString("bridge_method")) + || !recovered.containsKey(dexIndex + ":" + index)) throw new IllegalStateException("跳板与镜像不一致"); + trampolines++; } } JSONObject nativeFiles = recoverNative(apk, root, cert, ikm); From c70d7a6b42d48dc6921617b369da1c82bad6adb8 Mon Sep 17 00:00:00 2001 From: haonan Date: Mon, 19 Oct 2026 15:48:25 +0800 Subject: [PATCH 3/4] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E7=A6=BB?= =?UTF-8?q?=E7=BA=BF=E5=90=AF=E5=8A=A8=E5=B9=B6=E8=A1=A5=E9=BD=90=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E8=AF=8A=E6=96=AD=E4=B8=8E=E5=87=86=E5=85=A5=E5=88=86?= =?UTF-8?q?=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.toml | 15 ++ apps/shield-cli/src/args.rs | 2 +- apps/shield-gui/src/lib/i18n.ts | 4 +- crates/shield-core/src/protection_policy.rs | 17 +-- crates/shield-core/src/protection_report.rs | 10 +- docs/design/rea-resilience.md | 42 ++++++ docs/process/release-acceptance-fusion.md | 2 +- docs/usage.md | 14 +- shield-stub/src/main/rust/src/bin_loader.rs | 137 +++++++++++++----- shield-stub/src/main/rust/src/lib.rs | 85 +++++++---- .../protector/packer/Pvm2ProtectionCheck.java | 10 ++ .../com/yqsh/protector/packer/Pvm2Report.java | 26 ++++ tools/xop-pvm2-packer.jar | Bin 8310390 -> 8311357 bytes 13 files changed, 278 insertions(+), 86 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index e425047..f911526 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,3 +22,18 @@ lto = true # 链接时优化 strip = "symbols" # 移除符号表(比 strip = true 更明确、更激进) panic = "abort" # 减少 unwind 代码体积 codegen-units = 1 # 更激进的跨单元优化 + +# 手机上每次启动都要认证载荷并初始化解释器,运行时优先优化执行速度。 +# 桌面程序仍沿用体积优先设置;不改变算法、认证或解释器准入规则。 +[profile.release.package.mocikashield] +opt-level = 2 + +# 载荷每次启动都需要完整认证;共享密码库也优先优化吞吐,不改变密码协议。 +[profile.release.package.chacha20poly1305] +opt-level = 3 + +[profile.release.package.chacha20] +opt-level = 3 + +[profile.release.package.poly1305] +opt-level = 3 diff --git a/apps/shield-cli/src/args.rs b/apps/shield-cli/src/args.rs index 7dffb02..f879318 100644 --- a/apps/shield-cli/src/args.rs +++ b/apps/shield-cli/src/args.rs @@ -364,7 +364,7 @@ pub(crate) struct ProtectArgs { /// 保护级别:compat、balanced 或 strict。 #[arg(long, value_enum)] pub profile: Option, - /// AI 静态分析抵抗等级;实际映射为 DEXB v6 的 1/2/3 层压缩。 + /// 额外保护策略等级;新包统一单层压缩,效果以逐方法覆盖和产物验证为准。 #[arg(long, value_enum)] pub ai_resistance: Option, /// Xop transform-only Packer JAR;仅嵌入 PVM2,不引入第二个 Application/JNI 壳。 diff --git a/apps/shield-gui/src/lib/i18n.ts b/apps/shield-gui/src/lib/i18n.ts index b0d171c..ce93827 100644 --- a/apps/shield-gui/src/lib/i18n.ts +++ b/apps/shield-gui/src/lib/i18n.ts @@ -160,7 +160,7 @@ const dict = { protectionBalanced: "平衡保护(推荐)", protectionStrict: "严格代码保护(需 PVM2)", aiResistance: "AI 分析抵抗", - aiResistanceHint: "该选项映射为 DEXB 多层认证压缩;PVM2 默认使用内置 Packer,仍需填写自有业务类前缀。Hollow/SO 融合仍未开放。", + aiResistanceHint: "保留旧配置选项;balanced 与 high 当前采用相同保护决策,不再叠加压缩。效果以逐方法覆盖和产物验证为准。PVM2 使用内置打包器,仍需填写自有业务类前缀。", aiResistanceOff: "关闭", aiResistanceBalanced: "平衡", aiResistanceHigh: "高强度", @@ -614,7 +614,7 @@ const dict = { protectionBalanced: "Balanced protection (recommended)", protectionStrict: "Strict code protection (PVM2 required)", aiResistance: "AI analysis resistance", - aiResistanceHint: "This controls authenticated DEXB compression layers. PVM2 uses the bundled Packer by default and still requires owned business-class prefixes; fused Hollow/SO remain unavailable.", + aiResistanceHint: "These options remain for configuration compatibility. Balanced and high currently use the same protection decisions without extra compression layers. Assess protection using method coverage and artifact verification. PVM2 uses the bundled packer and requires owned business-class prefixes.", aiResistanceOff: "Off", aiResistanceBalanced: "Balanced", aiResistanceHigh: "High", diff --git a/crates/shield-core/src/protection_policy.rs b/crates/shield-core/src/protection_policy.rs index e2560e3..556adda 100644 --- a/crates/shield-core/src/protection_policy.rs +++ b/crates/shield-core/src/protection_policy.rs @@ -55,13 +55,10 @@ impl AiResistance { } } - /// DEXB v6 的实际压缩层数,范围固定为 1..=3。 + /// 新包只压缩一次;重复压缩不提供秘密,不随 AI 保护级别叠加启动成本。 + /// 运行时继续兼容已有的 1~3 层载荷。 pub fn compression_layers(self) -> u8 { - match self { - Self::Off => 1, - Self::Balanced => 2, - Self::High => 3, - } + 1 } } @@ -199,9 +196,11 @@ mod tests { } #[test] - fn ai_resistance_selects_bounded_compression_layers() { + fn 压缩不随保护级别重复且严格保护能力保持开启() { assert_eq!(AiResistance::Off.compression_layers(), 1); - assert_eq!(AiResistance::Balanced.compression_layers(), 2); - assert_eq!(AiResistance::High.compression_layers(), 3); + assert_eq!(AiResistance::Balanced.compression_layers(), 1); + assert_eq!(AiResistance::High.compression_layers(), 1); + let policy = ProtectionPolicy::for_profile(ProtectionProfile::Strict, AiResistance::High); + assert!(policy.pvm2 && policy.string_jit && policy.native_safe && policy.memory_preferred); } } diff --git a/crates/shield-core/src/protection_report.rs b/crates/shield-core/src/protection_report.rs index b5766a2..e304651 100644 --- a/crates/shield-core/src/protection_report.rs +++ b/crates/shield-core/src/protection_report.rs @@ -20,6 +20,9 @@ pub(crate) struct MethodRecord { plaintext_policy: Option, final_dex_index: Option, final_method_index: Option, + /// 本地准入事实只用于排查,不参与转换成功或覆盖率判定。 + #[serde(default, skip_serializing_if = "Option::is_none")] + admission: Option, } #[derive(Debug, Serialize, Deserialize)] @@ -792,7 +795,8 @@ mod tests { detail.methods.push(serde_json::from_value(serde_json::json!({ "module": "base", "descriptor": format!("Lprivate/Secret;->method{i}()V"), "required": false, "input_instruction_bytes": 0, "input_dex": "classes.dex", "transform_status": "skipped", - "reason": reason, "artifact_verified": false, "plaintext_policy": null + "reason": reason, "artifact_verified": false, "plaintext_policy": null, + "admission": {"policy_exclusion": reason, "opcodes": {"invoke-virtual": 1}, "private_fact": "private"} })).unwrap()); } for image in [7, 8, 9, 10] { @@ -828,6 +832,10 @@ mod tests { assert_eq!(stored["build"]["status"], "failed"); assert_eq!(stored["build"]["failure_code"], "PVM2_ZERO_METHODS"); assert_eq!(stored["methods"].as_array().unwrap().len(), cases.len()); + assert_eq!( + stored["methods"][0]["admission"]["opcodes"]["invoke-virtual"], + 1 + ); assert!(!output.path().join("final.aab").exists()); assert!(!report_path(&output.path().join("final.aab")).exists()); #[cfg(unix)] diff --git a/docs/design/rea-resilience.md b/docs/design/rea-resilience.md index 9509e7d..755a1b4 100644 --- a/docs/design/rea-resilience.md +++ b/docs/design/rea-resilience.md @@ -122,6 +122,48 @@ python3 tests/scripts/check-rea-resilience.py \ `--output` 必须不存在,以防覆盖历史证据。检查其他授权项目时显式指定对应输入、产物、报告与无重载的抽样方法;不能把本样本覆盖率套用到其他 APK。 +## 启动、诊断与准入分析 + +### 启动与诊断优化 + +新产物的 DEXB 压缩固定为一层,与 AI 保护级别解耦;`high` 的方法保护、字符串和其他策略不因此降低。解压首层直接读取原切片,省去一次完整压缩块复制。标准 Android Native 运行时单独使用速度优先的 `opt-level=2`,共享 ChaCha20/Poly1305 依赖使用 `opt-level=3`;桌面应用本身及 API 19 独立构建继续沿用原设置。没有新增包格式、服务依赖或首次激活步骤,也没有跳过签名、AEAD 和缓存根摘要验证;旧的 1~3 层载荷仍可读取。 + +载荷入口先尝试标准小端 DEX 035~040 的 `data_off + data_size`,避免每次在整块密文中逐字节搜索。此字段只作为定位提示,仍检查 MSHD 长度边界并执行后续认证;其他格式或提示无效时保留扫描,且扫描会跳过长度不合法的同名标记。格式依据为 [Android DEX 头部定义](https://source.android.com/docs/core/runtime/dex-format);041 容器头不使用该快路径。测试覆盖全部支持版本、损坏提示、密文内同名标记和截断输入。 + +真实 APK 的修改前诊断构建确认走缓存路径,四次缓存启动的载荷读取中位数为 39.5 ms、PVM2 初始化中位数为 334.5 ms。这是阶段定位证据,不是对所有 APK 的瓶颈判断。标准 arm64 壳库由 753,240 增至 1,085,096 字节,速度收益必须与该体积成本一起评价。 + +Native 加载边界发布版只输出固定代码,Rust 调试构建保留原始细节: + +| 代码 | 本地排查范围 | +|---|---| +| L10 | 首次或内存路径的载荷认证、解压及运行时初始化 | +| L11 | 缓存命中后的 PVM2 初始化 | +| L12 / L13 | Java 字节数组 / 直接缓冲区输出 | +| L14 | Native DEX 注入失败,交给原有 Java 反射路径 | +| A10 | 受保护资源块读取 | +| N51 / N52 | SO 密钥表 / SO 还原 | +| S01 | 环境或执行策略拒绝 | + +已挂起的 Java 异常保持原样;业务方法解释器的异常传播未改写。此收敛针对加载器内部诊断,不承诺移除系统栈、应用日志或所有 Java 文件系统错误。 + +### 本轮优化产物的追加验收 + +新包与原始对照各完成 30 个有效进程冷启动样本,六轮交替、每块三次预热、停止后间隔 12 秒,未出现异常启动。缓存建立后,原始对照中位数 / P95 为 1258 / 1276 ms,新包为 1678.5 / 1724 ms;额外开销 420.5 ms,尚未达到本样本缓存启动额外开销不超过 300 ms 的工程目标。启动一秒后的主进程 PSS 中位数增加 13.11 MiB;不能外推为完整可交互时间、峰值内存或跨设备 SLA。 + +每包另有六次清缓存首启观察,原始对照中位数 1297 ms、新包 2045.5 ms;不混入上述缓存启动统计。此前同批 90 样本对照中的旧加固、中间优化版中位数为 1,827 / 1,706.5 ms,减少 120.5 ms;该中间版不含后加的载荷定位修复,与最终新包的跨批差值不能用于单项优化归因。前一批另有一次被桌面提前拉起的 WARM 预热,已排除并保留现场记录。 + +最终独立测试包的 620 组输入、62,620 次调用通过;所选 54,249 个方法中仍有 11,613 个获得产物核验,指定测试范围 19/19。翻转载荷认证标签、重算 DEX 校验和并以匹配证书重签后,缓存路径以 L11、首次加载以 L10 拒绝启动,日志未出现原有算法和内部解析错误文本。两个独立测试包已清理,正式应用未被覆盖。 + +标准四 ABI、独立 API 19 构建及相应通用回归通过;设备范围仍只有上述 HONOR Android 15。REA 与白盒回归仍恢复全部 11,613 个镜像/跳板和 27 个 SO,本轮不构成 Native VMP 或抗静态还原通过。 + +### 方法准入事实 + +成功与失败逐方法报告继续使用原有覆盖率分母。被排除或编译失败的普通方法增加可选 `admission` 对象:原准入原因、桥接/合成标志、类名规则是否命中、是否直接继承已知协程基类、寄存器数、异常区数和逐指令计数。已成功转换、初始化器及无代码方法不增加该对象。旧报告仍可读取;新增事实只保存在本地逐方法报告,不进入可分享失败摘要,不改变保护准入。 + +本次样本 31,052 个普通方法具有该记录。19,796 个桥接分类方法中,5,365 个有桥接标志、10,661 个有合成方法标志、13,577 个命中生成类名规则、5,431 个位于直接继承协程基类的类中;这些数量有重叠。不能将整个分类视作无业务意义的转发代码,也不能仅凭该事实判定语义安全。 + +10,620 个数据/资源范围非叶子方法中,5,615 个包含对象字段读取、3,733 个包含静态调用、3,336 个包含虚调用,411 个含异常区。下一步应先为状态读写、调用和异常路径建立对应框架对照,再讨论放行;协程暂停/恢复、同步和特殊对象方法应分别验证。77 个寄存器限制方法也保留实测寄存器和指令信息,不能以截断寄存器或忽略临时寄存器需求的方式放开。 + ## 后续优化的准入条件 | 方向 | 复用现有能力与验收要求 | diff --git a/docs/process/release-acceptance-fusion.md b/docs/process/release-acceptance-fusion.md index d64e033..5898f88 100644 --- a/docs/process/release-acceptance-fusion.md +++ b/docs/process/release-acceptance-fusion.md @@ -25,7 +25,7 @@ ## 安全和 AI 成本评测 - DEXB v6 头部不直接保存 IKM。 -- `ai-resistance=off|balanced|high` 分别写入 DEXB v6 的 1/2/3 层压缩标志,运行时逐层认证解压;旧 v6 `flags=0` 必须保持单层兼容。 +- `ai-resistance=off|balanced|high` 的新产物统一写入单层压缩标志,不通过重复压缩区分保护级别;运行时仍须通过旧 v6 的 1/2/3 层读取回归,`flags=0` 保持单层兼容。压缩调整不得跳过载荷认证。 - 新包默认不使用旧 DEXB v5。 - 关键字符串不集中以明文出现在 DEX 中。 - PVM2/Hollow 的跳过和回退原因可诊断。 diff --git a/docs/usage.md b/docs/usage.md index 6780c56..0fe2207 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -189,7 +189,7 @@ shield protect-ios \ shield protect -i input.apk -o protected.apk ``` -保护级别和载荷压缩选项可以独立选择;后者当前沿用 `ai-resistance` 参数名: +保护级别与 `ai-resistance` 参数可以分别指定;新包压缩层数固定为一层: ```bash shield protect -i input.apk -o protected.apk \ @@ -200,7 +200,7 @@ shield protect -i input.apk -o protected.apk \ - `compat`:优先兼容 API 19–36,关闭高风险高级变换。 - `balanced`:默认策略。未提供 Xop 参数时显示 `xop-contract-only`;显式启用嵌入式 PVM2 时显示 `xop-pvm2-embedded`。 - `strict`:要求真实嵌入式 Xop PVM2。GUI 默认使用安装包内置的 Packer,只需提供至少一个自有业务类前缀;CLI 仍需显式传入 Packer 路径。严格模式同时启用资源路径缩短、同类型资源 ID 重排、PAS2 分块认证加密和符合安全策略的业务 ELF 函数区域选择性加密。资源 ID 若出现在 Native/opaque 数据或 packed-switch 中会自动固定;PAS2 会改写可识别的 `AssetManager.open/openFd/getAssets`,以 DEX/ELF 中的路径或目录常量覆盖常见动态拼接,并通过应用私有 overlay 支持常见 Native `AAssetManager` 读取。缺少必要条件会在变换前失败关闭。该状态为 `xop-pvm2-embedded`,不代表 Hollow、LLVM Native VMP 或完整 Xop RASP 已融合。 -- `ai-resistance` 支持 `off`、`balanced`、`high`,映射为 DEXB v6 认证载荷中的 1/2/3 层 Zstandard 压缩。层数不改变包内密钥可离线恢复的边界,也不能作为已验证的抗 AI 语义恢复能力。可选的 PVM2 方法虚拟化让成功转换的方法由 Native 解释器执行,需要单独核验覆盖范围。两者都不能替代服务端授权和密钥保护。 +- `ai-resistance` 继续接受 `off`、`balanced`、`high`,保持已有配置兼容;当前 `balanced` 与 `high` 采用相同保护决策,不再通过重复压缩区分层级,也不把 `high` 标签作为抗 AI 语义恢复能力的证明。实际能力取决于保护策略、运行时及逐方法覆盖。PVM2 让成功转换的方法由 Native 解释器执行,但不改变包内密钥可离线恢复的边界。 将 Xop PVM2 嵌入 Shellsmith 单 Stub(不引入第二个 Application/JNI 壳): @@ -447,7 +447,7 @@ unzip -l protected.apk | grep -E 'lib/|classes.*\.dex' 条目存在只能验证结构,不能代替签名验证与设备安装、启动测试。 ```bash -# 对比体积(off/balanced/high 的压缩层数会影响最终大小和首次加载成本) +# 对比体积(压缩、方法保护和附加运行时均会影响最终大小) ls -lh input.apk protected.apk ``` @@ -498,7 +498,7 @@ GUI 只维护一份全局证书状态。证书页保存、删除或切换默认 ### 加固后为什么体积反而变小? -DEX 文件经 Zstd 压缩后体积通常会明显减小;`high` 会再增加压缩层,实际体积和启动耗时应以目标 APK/设备实测为准。 +DEX 文件经 Zstd 压缩后体积通常会明显减小。新产物统一使用单层压缩,`high` 的其他保护策略保持有效;运行时仍兼容已有的多层载荷。实际体积和启动耗时应以目标 APK/设备实测为准。 --- @@ -512,8 +512,8 @@ DEX 文件经 Zstd 压缩后体积通常会明显减小;`high` 会再增加压 | classes2.dex | 12 MB | 3.7 MB | 30% | | classes3.dex | 6.7 MB | 1.9 MB | 29% | -- 首次启动额外耗时:取决于 AI 抵抗等级(单层/双层/三层解压、JNI 解密和缓存策略),必须用目标设备实测 -- Runtime 内存占用:约 1–2 MB +- 首次启动额外耗时:取决于载荷大小、解密解压、方法保护与缓存策略,必须用目标设备实测 +- 运行时内存开销:随载荷与解释器方法数量变化,需对照测量 PSS 和峰值内存 ## 更多界面预览 @@ -543,6 +543,8 @@ shield protect --input input.apk --output protected.apk \ 启用 PVM2 的成功输出旁会生成 `protected.apk.protection.json` 或 `protected.aab.protection.json`。统计分别展示转换成功率、选中方法覆盖率、原始指令字节覆盖率和必保方法覆盖率;未声明必保方法时该指标为 `null`,不记为 100%。这些百分比仅针对选择范围,不代表整个应用。报告包含逐方法原因、最终索引与产物摘要,不包含密钥或明文镜像,也不进入安装包。 +未转换的普通方法还会记录 `admission`:原兼容排除原因、桥接/合成标志、生成类名规则、直接协程父类、寄存器数、异常区数和指令计数。成功报告与 `pvm2-failure-*.json` 都保留这些本地事实,用于区分对象状态、调用、异常、协程及寄存器限制;它们不代表方法已获支持,也不进入可分享诊断摘要。初始化器和无代码方法仍直接查看原有原因分类。 + 选择范围在兼容性过滤**之前**统计。UI、导航和 Android 组件中的普通方法不再因包含字段、方法调用、数组元素或同步块而被叶子方法白名单整批排除;它们与普通业务类共用编译器,逐指令校验后再决定是否转换。跳板保留原声明、访问标志、参数与接收者,虚方法分派仍由 ART 完成。父类调用保留声明类的直接父类信息,接口默认实现单独按原接口调用,不能由接收者的动态类型推断。 这一路径支持经回归验证的字段读写、对象创建、静态/虚拟/接口/直接/父类调用、数组元素、空值调用、异常捕获与 finally、同步块。空值本身不再作为静态拒绝条件,运行时在原调用位置抛出并派发 `NullPointerException`。方法仍受支持指令、32 个寄存器(含编译临时寄存器)、4096 个 DEX 代码单元、编译后代码 65535 字节、分支偏移和异常表映射等边界约束;不是任意方法都能转换。标准 UTF-8 字符串保留内嵌空字符、补充平面字符及驻留身份;孤立 UTF-16 代理项明确拒绝,不能静默替换。 diff --git a/shield-stub/src/main/rust/src/bin_loader.rs b/shield-stub/src/main/rust/src/bin_loader.rs index f47440b..9da2719 100644 --- a/shield-stub/src/main/rust/src/bin_loader.rs +++ b/shield-stub/src/main/rust/src/bin_loader.rs @@ -22,10 +22,31 @@ pub fn extract_from_dex_tail(dex_bytes: &[u8]) -> Result<&[u8]> { return extract_at(dex_bytes, trailer_start); } + // 打包只更新 file_size 与校验和,标准 DEX 的 data_off + data_size 仍指向原末尾。 + // 头部仅作为定位提示;必须验证完整边界,后续仍对整个载荷认证。 + // ponytail: 仅加速 035~040 的标准小端头;容器 DEX 和旧布局继续扫描,不猜测新格式。 + if dex_bytes.len() >= 112 + && matches!( + &dex_bytes[..8], + b"dex\n035\0" | b"dex\n037\0" | b"dex\n038\0" | b"dex\n039\0" | b"dex\n040\0" + ) + && dex_bytes[36..40] == 112u32.to_le_bytes() + && dex_bytes[40..44] == 0x12345678u32.to_le_bytes() + { + let size = u32::from_le_bytes(dex_bytes[104..108].try_into().unwrap()) as usize; + let offset = u32::from_le_bytes(dex_bytes[108..112].try_into().unwrap()) as usize; + if let Some(end) = offset.checked_add(size).filter(|end| *end >= 112) { + if validate_trailer(dex_bytes, end).is_ok() { + return extract_at(dex_bytes, end); + } + } + } + let found = dex_bytes .windows(4) - .rposition(|w| w == MSHD_MAGIC) - .and_then(|pos| validate_trailer(dex_bytes, pos).ok().map(|_| pos)); + .enumerate() + .rfind(|(pos, window)| *window == MSHD_MAGIC && validate_trailer(dex_bytes, *pos).is_ok()) + .map(|(pos, _)| pos); let mshd_pos = found.ok_or_else(|| "classes.dex 末尾未找到有效 MSHD trailer".to_string())?; extract_at(dex_bytes, mshd_pos) @@ -455,8 +476,8 @@ fn parse_entries( } fn decompress_entry(data: &[u8], compression_layers: u8, original_size: usize) -> Result> { - let mut decompressed = data.to_vec(); - for _ in 0..compression_layers { + let mut decompressed = zstd::decode_all(data).map_err(|e| format!("Zstd 解压失败: {e}"))?; + for _ in 1..compression_layers { decompressed = zstd::decode_all(&decompressed[..]).map_err(|e| format!("Zstd 解压失败: {e}"))?; } @@ -629,6 +650,9 @@ mod tests { native_so_key, crypto::derive_native_so_key(ikm, signature.as_bytes()) ); + *bin.last_mut().unwrap() ^= 1; + assert!(parse_and_decompress_payload(&bin, signature.as_bytes()).is_err()); + assert!(parse_xop_pvm2_payload(&bin, signature.as_bytes()).is_err()); } #[test] @@ -706,39 +730,44 @@ mod tests { #[test] fn v6_multi_layer_compression_roundtrip() { - let ikm = b"random-ikm-32-bytes-for-testing!"; - let build_id = [17u8; 16]; - let wrap_nonce = [18u8; DEXB_NONCE_LEN]; - let payload_nonce = [19u8; DEXB_NONCE_LEN]; - let signature = "AABBCCDDEEFF00112233445566778899AABBCCDDEEFF00112233445566778899"; - let dex_data = b"dex-v6-three-layer-content"; - let plaintext = build_plaintext_dex_with_layers("classes.dex", dex_data, 3); - let ciphertext = - build_encrypted_payload(&plaintext, ikm, payload_nonce, signature.as_bytes()); - let envelope_key = crypto::derive_envelope_key(signature.as_bytes(), &build_id); - let wrapped_ikm = { - let cipher = ChaCha20Poly1305::new((&envelope_key).into()); - cipher - .encrypt(Nonce::from_slice(&wrap_nonce), ikm.as_ref()) - .unwrap() - }; - - let mut bin = Vec::new(); - bin.extend_from_slice(b"DEXB"); - bin.extend_from_slice(&6u32.to_le_bytes()); - bin.extend_from_slice(&1u32.to_le_bytes()); - bin.extend_from_slice(&3u32.to_le_bytes()); - bin.push(signature.len() as u8); - bin.extend_from_slice(signature.as_bytes()); - bin.extend_from_slice(&build_id); - bin.extend_from_slice(&wrap_nonce); - bin.extend_from_slice(&(wrapped_ikm.len() as u16).to_le_bytes()); - bin.extend_from_slice(&wrapped_ikm); - bin.extend_from_slice(&payload_nonce); - bin.extend_from_slice(&ciphertext); + for layers in 1..=3 { + let ikm = b"random-ikm-32-bytes-for-testing!"; + let build_id = [17u8; 16]; + let wrap_nonce = [18u8; DEXB_NONCE_LEN]; + let payload_nonce = [19u8; DEXB_NONCE_LEN]; + let signature = "AABBCCDDEEFF00112233445566778899AABBCCDDEEFF00112233445566778899"; + let dex_data = b"dex-v6-three-layer-content"; + let plaintext = build_plaintext_dex_with_layers("classes.dex", dex_data, layers); + let ciphertext = + build_encrypted_payload(&plaintext, ikm, payload_nonce, signature.as_bytes()); + let envelope_key = crypto::derive_envelope_key(signature.as_bytes(), &build_id); + let wrapped_ikm = { + let cipher = ChaCha20Poly1305::new((&envelope_key).into()); + cipher + .encrypt(Nonce::from_slice(&wrap_nonce), ikm.as_ref()) + .unwrap() + }; - let (_, dex_files) = parse_and_decompress_all(&bin, signature.as_bytes()).unwrap(); - assert_eq!(dex_files, vec![dex_data.to_vec()]); + let mut bin = Vec::new(); + bin.extend_from_slice(b"DEXB"); + bin.extend_from_slice(&6u32.to_le_bytes()); + bin.extend_from_slice(&1u32.to_le_bytes()); + bin.extend_from_slice(&(layers as u32).to_le_bytes()); + bin.push(signature.len() as u8); + bin.extend_from_slice(signature.as_bytes()); + bin.extend_from_slice(&build_id); + bin.extend_from_slice(&wrap_nonce); + bin.extend_from_slice(&(wrapped_ikm.len() as u16).to_le_bytes()); + bin.extend_from_slice(&wrapped_ikm); + bin.extend_from_slice(&payload_nonce); + bin.extend_from_slice(&ciphertext); + + let (_, dex_files) = parse_and_decompress_all(&bin, signature.as_bytes()).unwrap(); + assert_eq!(dex_files, vec![dex_data.to_vec()]); + *bin.last_mut().unwrap() ^= 1; + assert!(parse_and_decompress_payload(&bin, signature.as_bytes()).is_err()); + assert!(parse_xop_pvm2_payload(&bin, signature.as_bytes()).is_err()); + } } #[test] @@ -754,6 +783,42 @@ mod tests { assert_eq!(extracted, payload); } + #[test] + fn 标准头定位不受载荷内标记干扰且旧布局跳过无效标记() { + let payload = b"DEXB-data-MSHD\x08\x00\x00\x00decoy!!!"; + let mut dex = vec![0u8; 128]; + dex[36..40].copy_from_slice(&112u32.to_le_bytes()); + dex[40..44].copy_from_slice(&0x12345678u32.to_le_bytes()); + dex[104..108].copy_from_slice(&16u32.to_le_bytes()); + dex[108..112].copy_from_slice(&112u32.to_le_bytes()); + dex.extend_from_slice(b"MSHD"); + dex.extend_from_slice(&(payload.len() as u32).to_le_bytes()); + dex.extend_from_slice(payload); + for magic in [ + b"dex\n035\0", + b"dex\n037\0", + b"dex\n038\0", + b"dex\n039\0", + b"dex\n040\0", + ] { + dex[..8].copy_from_slice(magic); + // 后面的诱饵也满足长度,必须优先使用已验证的 DEX 数据边界。 + assert_eq!(extract_from_dex_tail(&dex).unwrap(), payload); + } + // 让诱饵长度无效;旧布局不能仅检查最后一个同名标记就失败。 + let decoy_length = 136 + payload.windows(4).position(|w| w == MSHD_MAGIC).unwrap() + 4; + dex[decoy_length..decoy_length + 4].fill(0xff); + let expected = dex[136..].to_vec(); + for field in [36, 40, 104, 108] { + let mut broken = dex.clone(); + broken[field..field + 4].fill(0xff); + assert_eq!(extract_from_dex_tail(&broken).unwrap(), expected); + } + for end in 0..dex.len() { + assert!(extract_from_dex_tail(&dex[..end]).is_err()); + } + } + #[test] fn extract_from_dex_tail_no_magic_returns_error() { let dex = b"DEX_CONTENT_WITHOUT_MAGIC_AT_ALL____"; diff --git a/shield-stub/src/main/rust/src/lib.rs b/shield-stub/src/main/rust/src/lib.rs index 9b7638d..030e544 100644 --- a/shield-stub/src/main/rust/src/lib.rs +++ b/shield-stub/src/main/rust/src/lib.rs @@ -13,6 +13,37 @@ use jni::sys::{jboolean, jint, jobject, jobjectArray, JNI_FALSE, JNI_TRUE}; use jni::JNIEnv; use jni::NativeMethod; +/// 只收敛加载器内部错误;已挂起的 Java 异常(包括业务异常和 OOM)保持原样。 +fn throw_loader_error(env: &mut JNIEnv, class: &str, code: &str, detail: impl std::fmt::Display) { + if matches!(env.exception_check(), Ok(false)) { + let _ = env.throw_new(class, loader_error_message(code, detail)); + } +} + +fn loader_error_message(code: &str, detail: impl std::fmt::Display) -> String { + if cfg!(debug_assertions) { + format!("{code}: {detail}") + } else { + code.to_owned() + } +} + +#[cfg(test)] +mod loader_error_tests { + #[test] + fn 加载错误仅在调试构建保留细节() { + let text = super::loader_error_message("L10", "算法、偏移与本机路径"); + assert_eq!( + text, + if cfg!(debug_assertions) { + "L10: 算法、偏移与本机路径" + } else { + "L10" + } + ); + } +} + /// 动态注册 native 方法,使 Rust 函数名不出现在 .dynsym,切断符号可读性。 /// /// # Safety @@ -117,7 +148,7 @@ extern "C" fn f8(mut env: JNIEnv, _class: JClass, blob: JByteArray) -> jobjectAr match result { Ok(array) => array, Err(error) => { - let _ = env.throw_new("java/io/IOException", error); + throw_loader_error(&mut env, "java/io/IOException", "N51", error); std::ptr::null_mut() } } @@ -140,7 +171,7 @@ extern "C" fn f9(mut env: JNIEnv, _class: JClass, name: JString, encrypted: JByt match result { Ok(array) => array, Err(error) => { - let _ = env.throw_new("java/io/IOException", error); + throw_loader_error(&mut env, "java/io/IOException", "N52", error); std::ptr::null_mut() } } @@ -173,7 +204,7 @@ extern "C" fn f7(mut env: JNIEnv, _class: JClass, chunk: JByteArray) -> jobject match result { Ok(array) => array, Err(error) => { - let _ = env.throw_new("java/io/IOException", error); + throw_loader_error(&mut env, "java/io/IOException", "A10", error); std::ptr::null_mut() } } @@ -218,7 +249,7 @@ extern "C" fn f1( match f1_impl(&mut env, class_loader, dex_paths, opt_dir_path) { Ok(()) => JNI_TRUE, Err(e) => { - android_log_warn(&mut env, &format!("注入失败,降级到 Java 反射:{}", e)); + android_log_warn(&mut env, &loader_error_message("L14", e)); JNI_FALSE } } @@ -432,14 +463,13 @@ extern "C" fn f2( ) -> jobjectArray { // 反调试检测:先于所有解密动作,检测到调试器或 Frida 注入则立即拒绝。 if anti_debug::check() { - android_log_warn(&mut env, "dbg"); - let _ = env.throw_new("java/lang/RuntimeException", "dbg"); + throw_loader_error(&mut env, "java/lang/RuntimeException", "S01", "dbg"); return std::ptr::null_mut(); } let decoded = match decrypt_dex_files(&mut env, &ctx, &dex_data) { Ok(files) => files, Err(e) => { - let _ = env.throw_new("java/lang/RuntimeException", e); + throw_loader_error(&mut env, "java/lang/RuntimeException", "L10", e); return std::ptr::null_mut(); } }; @@ -447,10 +477,7 @@ extern "C" fn f2( let byte_array_class = match env.find_class("[B") { Ok(cls) => cls, Err(e) => { - let _ = env.throw_new( - "java/lang/RuntimeException", - format!("查找 byte[] 类失败: {}", e), - ); + throw_loader_error(&mut env, "java/lang/RuntimeException", "L12", e); return std::ptr::null_mut(); } }; @@ -458,14 +485,19 @@ extern "C" fn f2( let dex_count = match i32::try_from(decoded.dex_files.len()) { Ok(n) => n, Err(_) => { - let _ = env.throw_new("java/lang/RuntimeException", "DEX 数量超过 i32 上限"); + throw_loader_error( + &mut env, + "java/lang/RuntimeException", + "L12", + "DEX 数量超过 i32 上限", + ); return std::ptr::null_mut(); } }; let result_array = match env.new_object_array(dex_count, &byte_array_class, JObject::null()) { Ok(arr) => arr, Err(e) => { - let _ = env.throw_new("java/lang/RuntimeException", format!("创建数组失败: {}", e)); + throw_loader_error(&mut env, "java/lang/RuntimeException", "L12", e); return std::ptr::null_mut(); } }; @@ -474,18 +506,12 @@ extern "C" fn f2( let byte_array = match env.byte_array_from_slice(dex_data) { Ok(arr) => arr, Err(e) => { - let _ = env.throw_new( - "java/lang/RuntimeException", - format!("创建 byte[] 失败: {}", e), - ); + throw_loader_error(&mut env, "java/lang/RuntimeException", "L12", e); return std::ptr::null_mut(); } }; if let Err(e) = env.set_object_array_element(&result_array, i as i32, byte_array) { - let _ = env.throw_new( - "java/lang/RuntimeException", - format!("设置数组元素失败: {}", e), - ); + throw_loader_error(&mut env, "java/lang/RuntimeException", "L12", e); return std::ptr::null_mut(); } } @@ -524,7 +550,7 @@ extern "C" fn f6(mut env: JNIEnv, _class: JClass, ctx: JObject, dex_data: JByteA match result { Ok(()) => JNI_TRUE, Err(error) => { - let _ = env.throw_new("java/lang/RuntimeException", error); + throw_loader_error(&mut env, "java/lang/RuntimeException", "L11", error); JNI_FALSE } } @@ -538,21 +564,20 @@ extern "C" fn f4( dex_data: JByteArray, ) -> jobjectArray { if anti_debug::check() { - android_log_warn(&mut env, "dbg"); - let _ = env.throw_new("java/lang/RuntimeException", "dbg"); + throw_loader_error(&mut env, "java/lang/RuntimeException", "S01", "dbg"); return std::ptr::null_mut(); } let decoded = match decrypt_dex_files(&mut env, &ctx, &dex_data) { Ok(files) => files, Err(e) => { - let _ = env.throw_new("java/lang/RuntimeException", e); + throw_loader_error(&mut env, "java/lang/RuntimeException", "L10", e); return std::ptr::null_mut(); } }; let buffer_class = match env.find_class("java/nio/ByteBuffer") { Ok(class) => class, Err(e) => { - let _ = env.throw_new("java/lang/RuntimeException", format!("b1: {e}")); + throw_loader_error(&mut env, "java/lang/RuntimeException", "L13", e); return std::ptr::null_mut(); } }; @@ -563,7 +588,7 @@ extern "C" fn f4( ) { Ok(array) => array, Err(e) => { - let _ = env.throw_new("java/lang/RuntimeException", format!("b2: {e}")); + throw_loader_error(&mut env, "java/lang/RuntimeException", "L13", e); return std::ptr::null_mut(); } }; @@ -579,7 +604,7 @@ extern "C" fn f4( { Ok(object) => object, Err(e) => { - let _ = env.throw_new("java/lang/RuntimeException", format!("b3: {e}")); + throw_loader_error(&mut env, "java/lang/RuntimeException", "L13", e); return std::ptr::null_mut(); } }; @@ -587,13 +612,13 @@ extern "C" fn f4( let address = match env.get_direct_buffer_address(&buffer) { Ok(address) => address, Err(e) => { - let _ = env.throw_new("java/lang/RuntimeException", format!("b4: {e}")); + throw_loader_error(&mut env, "java/lang/RuntimeException", "L13", e); return std::ptr::null_mut(); } }; unsafe { std::ptr::copy_nonoverlapping(dex.as_ptr(), address, dex.len()) }; if let Err(e) = env.set_object_array_element(&result, index as i32, &buffer) { - let _ = env.throw_new("java/lang/RuntimeException", format!("b5: {e}")); + throw_loader_error(&mut env, "java/lang/RuntimeException", "L13", e); return std::ptr::null_mut(); } } diff --git a/tests/java/com/yqsh/protector/packer/Pvm2ProtectionCheck.java b/tests/java/com/yqsh/protector/packer/Pvm2ProtectionCheck.java index e34f9d6..6a8d813 100644 --- a/tests/java/com/yqsh/protector/packer/Pvm2ProtectionCheck.java +++ b/tests/java/com/yqsh/protector/packer/Pvm2ProtectionCheck.java @@ -50,6 +50,8 @@ public static void main(String[] args) throws Exception { assert row.isNull("plaintext_policy"); skipped++; if (row.getString("descriptor").startsWith("Lfixture/MainActivity;")) { assert row.getString("reason").equals("ui_runtime_glue:virtual_contract"); excluded++; + assert row.getJSONObject("admission").getString("policy_exclusion").equals(row.getString("reason")); + assert row.getJSONObject("admission").getJSONObject("opcodes").getInt("return") == 1; } else assert row.getString("reason").equals("no_code"); } } @@ -391,6 +393,14 @@ private static void checkMethodCompatibility(Path root) throws Exception { new ImmutableInstruction11n(Opcode.CONST_4, 0, 0), new ImmutableInstruction11x(Opcode.RETURN, 0)), List.of(new ImmutableTryBlock(0, 1, List.of(new ImmutableExceptionHandler(null, 2)))), List.of())); assert AutoVmpPolicy.exclusionReason(plain, caught) == null; + var facts = Pvm2Report.admissionFacts(plain, caught, "仅用于事实检查"); + assert facts.getInt("try_blocks") == 1 && facts.getInt("register_count") == 1; + assert facts.getJSONObject("opcodes").getInt("return") == 2; + assert !facts.getBoolean("direct_coroutine_base") && !facts.getBoolean("generated_name_rule"); + var coroutine = calculationOwner("Lfixture/Rules$1;", "Lkotlin/coroutines/jvm/internal/SuspendLambda;", List.of(), List.of()); + facts = Pvm2Report.admissionFacts(coroutine, calculation(type, "invokeSuspend", 0x1041), "compiler_generated_bridge"); + assert facts.getBoolean("direct_coroutine_base") && facts.getBoolean("generated_name_rule"); + assert facts.getBoolean("method_bridge_flag") && facts.getBoolean("method_synthetic_flag"); for (String generated : List.of("Lfixture/Rules$$ExternalSyntheticLambda0;", "Lfixture/Rules$1;")) assert AutoVmpPolicy.exclusionReason(calculationOwner(generated, "Ljava/lang/Object;", List.of(), List.of()), calculation(generated, "calculate", 9)).equals("compiler_generated_bridge"); diff --git a/third_party/xopprotector/packer/src/main/java/com/yqsh/protector/packer/Pvm2Report.java b/third_party/xopprotector/packer/src/main/java/com/yqsh/protector/packer/Pvm2Report.java index 2e5bbf9..afa4976 100644 --- a/third_party/xopprotector/packer/src/main/java/com/yqsh/protector/packer/Pvm2Report.java +++ b/third_party/xopprotector/packer/src/main/java/com/yqsh/protector/packer/Pvm2Report.java @@ -3,6 +3,7 @@ import com.android.tools.smali.dexlib2.Opcodes; import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile; import com.android.tools.smali.dexlib2.iface.Method; +import com.android.tools.smali.dexlib2.iface.ClassDef; import com.android.tools.smali.dexlib2.iface.reference.MethodReference; import org.json.JSONArray; import org.json.JSONObject; @@ -75,12 +76,36 @@ void inventory(List files, Predicate selectedType) throws Exceptio .put("input_dex", file.getName()).put("transform_status", "skipped") .put("reason", reason).put("artifact_verified", false) .put("plaintext_policy", JSONObject.NULL); + if (impl != null && !method.getName().startsWith("<")) + row.put("admission", admissionFacts(cls, method, exclusion)); if (methods.putIfAbsent(id, row) != null) throw new IllegalArgumentException("模块中存在重复方法:" + id); } } for (String id : required) if (!methods.containsKey(id)) throw new IllegalArgumentException("关键方法未匹配输入 DEX:" + id); } + /** 记录准入事实,不将命名启发式解释为业务分类或语义已获支持。 */ + static JSONObject admissionFacts(ClassDef owner, Method method, String exclusion) { + var code = method.getImplementation(); + Map opcodes = new TreeMap<>(); + for (var instruction : code.getInstructions()) + opcodes.merge(instruction.getOpcode().name, 1, Integer::sum); + String parent = owner.getSuperclass(); + boolean coroutine = Set.of("Lkotlin/coroutines/jvm/internal/SuspendLambda;", + "Lkotlin/coroutines/jvm/internal/RestrictedSuspendLambda;", + "Lkotlin/coroutines/jvm/internal/ContinuationImpl;", + "Lkotlin/coroutines/jvm/internal/RestrictedContinuationImpl;").contains(parent == null ? "" : parent); + // ponytail: 仅记录直接父类;不从方法名推断协程,也不宣称已解析完整继承链。 + return new JSONObject().put("policy_exclusion", exclusion == null ? JSONObject.NULL : exclusion) + .put("method_bridge_flag", (method.getAccessFlags() & 0x40) != 0) + .put("method_synthetic_flag", (method.getAccessFlags() & 0x1000) != 0) + .put("class_synthetic_flag", (owner.getAccessFlags() & 0x1000) != 0) + .put("generated_name_rule", AutoVmpPolicy.isCompilerGeneratedBridge(owner.getType())) + .put("direct_coroutine_base", coroutine) + .put("register_count", code.getRegisterCount()).put("try_blocks", code.getTryBlocks().size()) + .put("opcodes", new JSONObject(opcodes)); + } + void begin(File dex) { currentModule = modules.getOrDefault(dex.getName(), "base"); } boolean requiresType(String type) { @@ -104,6 +129,7 @@ void compiled(String key, byte[] image) throws Exception { verifyPolicy(image, row.getBoolean("required")); row.put("transform_status", "transformed").put("reason", JSONObject.NULL) .put("plaintext_policy", row.getBoolean("required") ? "clear_after_use" : "bounded_cache"); + row.remove("admission"); images.put(id(key), sha256(image)); } diff --git a/tools/xop-pvm2-packer.jar b/tools/xop-pvm2-packer.jar index 7ffa7c05ed9a72ac7f97996f112587c9166346cc..d6588649e88f049fbc14434524713bf2c4edc70f 100644 GIT binary patch delta 114328 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 G=Kl}P`t#-h delta 113219 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 Date: Mon, 19 Oct 2026 16:04:39 +0800 Subject: [PATCH 4/4] =?UTF-8?q?chore:=20=E5=8F=91=E5=B8=83=201.8.6=20?= =?UTF-8?q?=E7=A6=BB=E7=BA=BF=E5=8A=A0=E5=9B=BA=E7=BB=B4=E6=8A=A4=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/release-notes/versions/1.8.6.md | 13 +++++++++++++ Cargo.lock | 8 ++++---- apps/shield-cli/Cargo.toml | 2 +- apps/shield-gui/package-lock.json | 4 ++-- apps/shield-gui/package.json | 2 +- apps/shield-gui/src-tauri/Cargo.toml | 2 +- apps/shield-gui/src-tauri/tauri.conf.json | 2 +- apps/shield-gui/src/hooks/use-about-page.ts | 2 +- crates/shield-core/Cargo.toml | 2 +- shield-stub/compat/api19-rust/Cargo.lock | 2 +- shield-stub/compat/api19-rust/Cargo.toml | 2 +- shield-stub/src/main/rust/Cargo.toml | 2 +- 12 files changed, 28 insertions(+), 15 deletions(-) create mode 100644 .github/release-notes/versions/1.8.6.md diff --git a/.github/release-notes/versions/1.8.6.md b/.github/release-notes/versions/1.8.6.md new file mode 100644 index 0000000..5b3d053 --- /dev/null +++ b/.github/release-notes/versions/1.8.6.md @@ -0,0 +1,13 @@ +### 离线加载与兼容修复 + +- 新产物统一单层压缩,减少加载复制并优化 Android 运行时编译设置;仍兼容旧的 1~3 层载荷,不改变签名与认证校验。 +- 使用标准 DEX 数据边界定位载荷,保留其他布局的兼容扫描,并修复密文中同名标记导致入口误选的问题。 +- 发布版加载器使用固定错误代码,减少内部算法和解析信息暴露;保留已挂起的 Java 异常。首次与缓存加载的认证失败均已验证拒绝启动。 +- 本地逐方法报告增加指令、寄存器、异常区、桥接及协程准入事实;成功与零转换失败报告均可排查,未放宽保护准入或提高覆盖率统计。 +- 修复还原验收中的重复 DEX 扫描,补齐真实 APK 的分层验证。测试范围通过不代表全部业务已覆盖;本次不新增 Native VMP,也不宣称阻止仅凭 APK 的静态还原。 + +### 升级说明 + +- 使用配套打包器与运行时重新加固后生效;PVM2 需要 JDK 17 或更高版本。逐方法报告包含业务标识,分享前请脱敏。 +- 保持通用离线加固、手机安装即用;不增加服务器或激活依赖。`balanced` 与 `high` 当前采用相同保护决策,保留选项用于旧配置兼容。 +- 单台 Android 15 真机完成真实 APK 的 620 组输入、62,620 次调用及本轮每包 30 次有效冷启动采样。性能随项目和设备变化;本样本缓存启动额外开销仍为 420.5 ms,不能表述为全部性能目标已达成。 diff --git a/Cargo.lock b/Cargo.lock index 2b87896..895abd9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2201,7 +2201,7 @@ dependencies = [ [[package]] name = "mocika-shield" -version = "1.8.5" +version = "1.8.6" dependencies = [ "dunce", "reqwest 0.12.28", @@ -2229,7 +2229,7 @@ dependencies = [ [[package]] name = "mocikashield" -version = "1.8.5" +version = "1.8.6" dependencies = [ "cc", "chacha20poly1305", @@ -3635,7 +3635,7 @@ dependencies = [ [[package]] name = "shield-cli" -version = "1.8.5" +version = "1.8.6" dependencies = [ "anyhow", "clap", @@ -3653,7 +3653,7 @@ dependencies = [ [[package]] name = "shield-core" -version = "1.8.5" +version = "1.8.6" dependencies = [ "anyhow", "chacha20poly1305", diff --git a/apps/shield-cli/Cargo.toml b/apps/shield-cli/Cargo.toml index 395267d..fc5452e 100644 --- a/apps/shield-cli/Cargo.toml +++ b/apps/shield-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "shield-cli" -version = "1.8.5" +version = "1.8.6" 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 41514ea..72e9963 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.8.5", + "version": "1.8.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mocika-shield-gui", - "version": "1.8.5", + "version": "1.8.6", "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 0cb70a8..878367d 100644 --- a/apps/shield-gui/package.json +++ b/apps/shield-gui/package.json @@ -1,6 +1,6 @@ { "name": "mocika-shield-gui", - "version": "1.8.5", + "version": "1.8.6", "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 2d9eba3..5a32a6a 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.8.5" +version = "1.8.6" 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 b6b93ee..aa44c5d 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.8.5", + "version": "1.8.6", "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 58c4502..50a4fdd 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.8.5", + version: "1.8.6", git_hash: "dev", build_date: "unknown", }; diff --git a/crates/shield-core/Cargo.toml b/crates/shield-core/Cargo.toml index a37d1df..4db9727 100644 --- a/crates/shield-core/Cargo.toml +++ b/crates/shield-core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "shield-core" -version = "1.8.5" +version = "1.8.6" 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 d23f88d..993f279 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.8.5" +version = "1.8.6" dependencies = [ "cc", "chacha20poly1305", diff --git a/shield-stub/compat/api19-rust/Cargo.toml b/shield-stub/compat/api19-rust/Cargo.toml index adf04c9..604396b 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.8.5" +version = "1.8.6" 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 e6bf3c2..5724658 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.8.5" +version = "1.8.6" edition = "2021" license = "MIT OR Apache-2.0"