TITAN-Softwork-Solutions/Vesuki

GitHub: TITAN-Softwork-Solutions/Vesuki

Vesuki 是一个 Rust x86_64 控制流混淆工具包,通过 proc-macro 和构建时代码生成提升二进制程序的静态逆向分析成本。

Stars: 7 | Forks: 0

# Vesuki Vesuki 是一个 Rust **x86_64** 控制流强化与混淆工具包,专为**授权的反篡改和防御性软件保护**而构建。它提供了一个 proc-macro 属性,可将带注解的函数重写为调度器式的执行形式,并注入**每次构建随机生成的“噪声块”**(熵混合、不透明分支、反汇编诱饵),以提高静态分析和基于签名的逆向工程的成本。 ## 包含内容 本仓库是一个小型的 workspace,包含三个部分: * **Vesuki 运行时 (`vesuki`)** * 核心 runtime 函数、熵源、状态演进以及生成的逐构建块包装器。 * 用于注入逐调用点噪声的 `vesuki_call!()` 宏。 * **Vesuki proc-macro (`vesuki-macros`)** * 用于函数和方法的 `#[VESUKI]` 属性。 * 将函数体重写为混淆的调度器形态,并插入 Vesuki 噪声调用。 * **示例/测试工具 (`tests`)** * 演示函数和方法上属性宏的最小化示例程序。 ## 核心功能 ![IDA](https://raw.githubusercontent.com/TITAN-Softwork-Solutions/Vesuki/main/Diagram/IDA_RELEASE_DISASM_1.png) ![BN2](https://raw.githubusercontent.com/TITAN-Softwork-Solutions/Vesuki/main/Diagram/BN_RELEASE_DISASM_GRAPH_2.png) * 通过 `#[VESUKI]` 实现基于属性的函数转换 * 通过 `vesuki_call!()` 进行逐调用点噪声注入 * 每次构建随机生成代码(build script 会将生成的模块输出到 `OUT_DIR`) * 多种“强度”驱动器: * `vesuki_light()`、`vesuki_medium()`、`vesuki_heavy()` * 使用 CPU 设施进行熵种子填充(可用时使用 RDSEED,回退时使用序列化的 TSC) * 控制流噪声原语: * 不透明谓词和门控执行 * 基于状态的块选择 * 内联汇编 nops 和反汇编诱饵 * 用于间接执行差异的随机化 thunk 库 * 为生成的包装器进行自定义段放置,以降低布局可预测性 ## 工作原理 ### 编译时 (Proc Macro) `#[VESUKI]` 会对目标函数进行结构性重写: * 根据**签名 + 函数体 token**计算稳定的 hash * 将 `let` 绑定提升到稳定的“设置”区域 * 通过由每次构建的常数作为种子的**调度器循环**执行其余语句 * 将返回值(如果存在)捕获到内部的 `Option` 插槽中 这种转换旨在为典型的“叶子”函数和紧凑例程保持行为一致,同时使得最终的控制流变得难以直接阅读。 ### 构建时 (生成的 Runtime) `build.rs` 生成一个包含以下内容的逐构建 Rust 模块: * 特定于构建的常数和种子 * light/medium/heavy 路径的随机化执行顺序 * 围绕“块”原语的包装函数,具有随机化的皮肤/段 * 用于引入额外间接和差异的 thunk 库 生成的模块在编译时通过以下方式包含: ``` include!(concat!(env!("OUT_DIR"), "/vesuki_gen.rs")); ``` ### 运行时 (噪声注入) runtime 提供: * 用于逐调用点注入(由 `file:line:col` 加盐)的 `vesuki_call!()` * 用于链接块的 `vesuki_inline::()` 和强度驱动器 * 混合熵并演进控制流选择的状态推进例程 ## 环境要求 * **架构:** 仅限 `x86_64`(runtime 使用内联汇编和 x86_64 架构 intrinsic) * **Rust 工具链:** 稳定版 Rust(proc-macro + build script + 内联汇编) ## 快速开始 ### 1) 构建 workspace ``` cargo build --workspace ``` ### 2) 运行示例 ``` cargo run -p vesuki-tests --release ``` ## 用法 ### 为函数添加注解 ``` use vesuki_macros::VESUKI; #[VESUKI] fn fib(mut n: u64) -> u64 { let (mut a, mut b) = (0_u64, 1_u64); while n > 0 { let t = a.wrapping_add(b); a = b; b = t; n -= 1; } a } ``` ### 在调用点注入噪声 ``` use vesuki::vesuki_call; #[cfg(target_arch="x86_64")] { vesuki_call!(); vesuki::vesuki_light(); } ``` ## 实践指南 Vesuki 在应用于以下情况时最为有效: * 小巧、高价值的例程(检查、门控、token 验证、授权许可、策略决策) * 函数体相对紧凑的叶子函数或方法 * 可以接受额外指令和分支噪声的代码路径 为避免意外行为: * 尽可能优先将顺序紧凑的序列包装成单个块/循环语句。 * 将 Vesuki 视为**反分析阻力**,而不是语义优化器或安全边界。 ## 威胁模型适用性 Vesuki 有助于: * 提高静态逆向工程的成本(特别是对于基于签名或模式驱动的分析) * 增加每次构建的差异性,以减少“一个绕过适用所有构建”的情况 * 在敏感控制点周围增加执行噪声
标签:DNS 反向解析, Rust, 二进制保护, 代码混淆, 可视化界面, 控制流平坦化, 编译器宏, 网络流量审计, 通知系统, 防篡改, 静态分析对抗