Skip to content

HHT0rro/JavaShroud

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

132 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JavaShroud Logo

JavaShroud

面向 Java 产物的混淆、虚拟化与 Native 加固工具链

Version License JDK Desktop

简体中文 · English

项目定位

JavaShroud 将 Java 字节码变换、方法虚拟化、Native 微内核与桌面工作流整合为一套混淆和加固工具链。除重命名、字符串保护、控制流扰动等常规能力外,它还可将关键方法转换为 VMBC 资源,并交由 Native bytecode VM(NBVM)执行。

当前大版本为 0.11

项目采用接近 Kerckhoffs 原则的设计:保护强度主要来自产物级密钥、结构差异、运行时认证和 Java / Native 执行边界,而不是依赖实现细节长期保密。自包含产物仍会携带执行所需材料,因此目标是提高分析和批量复用成本,而非宣称绝对不可逆。

核心能力

模块 代表能力
字节码混淆 类、包、方法、字段重命名,整数与字符串保护
控制流保护 控制流扰动、平坦化、引用代理、invokedynamic / condy 间接化
方法虚拟化 JVM bytecode lowering 为 VBC4 / VMBC,由 Native VM 执行
资源保护 JSRP 封装、分区加密、HMAC、切片、manifest 与差异化布局
运行时防护 完整性 gate、状态绑定、anti-instrumentation、anti-dump
Native 加固 认证外壳、内层 kernel 封装、平台 loader 与篡改 fail-closed
桌面工作流 Wails + Vue 图形界面、配置编辑与引擎任务管理

默认 pipeline 保持保守;强保护能力需根据兼容性和性能要求按需启用。

VMBC / NBVM 执行链

method-virtualization 将选中的 Java 方法转换为 VBC4 / VMBC 资源。原方法体由轻量 dispatcher stub 替代,运行时经 JniMicrokernelHelper.executeVmResource 进入 JNI 微内核,并由 js_vm_execute_resource 对应的 Native VM 完成认证、解析、执行和敏感状态清理。

flowchart LR
  A["方法选择与兼容性校验"] --> B["VMBC lowering"]
  B --> C["VBC4 / JSRP 加密封装"]
  C --> D["Java dispatcher stub"]
  D --> E["JNI 微内核"]
  E --> F["NBVM 认证与执行"]
  F --> G["返回结果并清理状态"]
  A -.不兼容.-> X["构建期 fail-closed"]
  E -.认证失败.-> Y["运行期 fail-closed"]
Loading

这条链路使用产物级材料、入口 token、opcode dialect、资源路径、layout digest 和 Native profile 共同约束执行。未被选中或不兼容的方法仍属于普通字节码混淆边界。

Native 加固

用户侧统一称为 Native 加固。配置项 jni-microkernel-loader.nativePackingLevel 保留 offstandardmax 三档,其中 max 是当前默认的高强度加固档:

  • 外层 js_kernel_<platform> stub 由 System.load 直接加载,完整 inner kernel 以认证编码 payload 封装在外壳中。
  • JNI_OnLoad 校验 header、section digest、布局与 dispatcher profile、payload binding、分块 tag 和 payload MAC。
  • Java 层只加载外层 stub,不保留 Java 解包 fallback;资源、索引、profile 或外壳 metadata 被篡改时直接 fail-closed。
  • Native kernel 与 VMBC 资源、bootstrap index、resource path 和 manifest mesh 绑定,降低跨产物直接替换与重放的可行性。
平台 当前加固边界
Windows x64 PE64 内存映射,覆盖 section、relocation、import / export、TLS、DllMainJNI_OnLoad 与 ABI table 校验
Linux x64 匿名内存 ELF64 loader,覆盖 PT_LOAD / PT_DYNAMIC、hash、symbol、RELA / PLT、initializer 与入口校验
macOS x64 / arm64 外层 stub 与 Mach-O metadata、rebase / bind、export trie、initializer 校验;未满足匿名执行映射条件时 fail-closed

与 JNIC / Native 混淆的区别

维度 常见 JNIC / Native 混淆 JavaShroud VMBC / NBVM
转换目标 Java 方法转为本地函数 Java 方法转为 VMBC 资源
执行方式 JNI 调用对应本地函数 Native VM 认证、解析并调度虚拟指令
主要分析面 JNI bridge、导出与机器码 dispatcher、资源封装、虚拟 ISA、VM 状态与 Native 边界
差异化来源 本地编译结果 产物级密钥、布局、opcode、token 与 runtime profile

两条路线并不互斥;JavaShroud 将 Native 层作为虚拟执行协议的一部分,而不仅是迁移代码的位置。

兼容性

  • JavaShroud 引擎使用 JDK 21+ 构建和运行。
  • 常规重命名、metadata 清理和多数基础混淆 pass 可处理 Java 8 classfile,且不应主动抬升版本。
  • ConstantDynamic 相关能力要求 Java 11+;VMBC、Native loader 与大多数运行时保护面向 Java 11+ 目标运行时。
  • Native 加固依赖目标平台、JNI 和本机构建链;正式交付前应以实际产物运行结果为准。

快速开始

# 构建核心引擎
.\gradlew.bat :core-engine:jar

# 查看 CLI schema
java -jar build\core-engine\libs\obfuscator-engine.jar -schema

# 使用 TOML 配置处理 JAR
java -jar build\core-engine\libs\obfuscator-engine.jar -config path\to\config.toml

桌面端开发:

corepack yarn --cwd desktop-app\frontend install --immutable
corepack yarn --cwd desktop-app\frontend build

Set-Location desktop-app
go build ./...
go test ./...

Windows 完整发布入口:

.\build-release.bat

发布脚本会构建核心引擎、GraalVM native engine、前端资源和 Wails 桌面程序,输出目录为 build\release\javashroud-windows-amd64\。GitHub Release 由 .github/workflows/release.yml 在推送 v* 标签时构建和发布。

目录结构

core-engine/          Kotlin / Java 引擎、VMBC 与 Native runtime
desktop-app/          Go / Wails 桌面宿主与 Vue 前端
annotations/          JavaShroud 注解模块
scripts/              验证与辅助脚本
assets/               README 与发布资源
build-release.bat     Windows 发布入口

许可证

JavaShroud 基于 GNU GPL v3 发布。第三方组件及 vendored 源码声明见 THIRD_PARTY_NOTICES.mdNOTICE

致谢

About

面向 Java 产物的混淆、方法虚拟化与 Native 加固工具链。A Java obfuscation, virtualization, and native hardening toolchain.

Topics

Resources

License

Security policy

Stars

75 stars

Watchers

1 watching

Forks

Contributors