2 个版本

0.1.1 2020年12月27日
0.1.0 2020年12月21日

#4 in #protected


用于 vmprotect

MIT 许可证

350KB
93 行代码(不包括注释)

包含 (Windows DLL, 120KB) lib/VMProtectSDK64.dll, (Windows DLL, 100KB) lib/VMProtectSDK32.dll, (ELF lib, 27KB) lib/libVMProtectSDK32.so, (ELF lib, 33KB) lib/libVMProtectSDK64.so, (静态库, 8KB) lib/VMProtectSDK32.lib, (静态库, 8KB) lib/VMProtectSDK64.lib

vmprotect crates.io

WIP VMProtect SDK for rust

基本的 VMProtect 功能

protected 属性

您需要将 此脚本 添加到 vmprotect 项目以使用此属性

语法

#[protected(TYPE[, lock])]
fn some_fn() { ... }
  • TYPE: 保护类型
  • [, lock]: 需要许可证才能使此功能工作。

示例

#[protected(virtualize)]
fn stringify<T: Display>(value: T) -> String {
    format!("{}", value)
}

protected! 宏用于代码

语法

use vmprotect::protected;

protected!(TYPE[, lock] "NAME"; { /*CODE*/ })
  • NAME: 在 VMProtect GUI 中显示的名称
  • TYPE: 保护类型(根据 VMProtect 文档中的 mutate/virtualize/ultra)
  • [, lock]: 仅对 virtualize/ultra,需要许可证激活才能使此功能工作
  • CODE: 您的代码在这里

受保护的代码块与其他 Rust 块类似,例如

use vmprotect::protected;

// Before protection
let a = {2+3};
// After protection
let a = protected!(virtualize "Addiction"; { 2 + 3 });

示例

fn main() {
    println!("{} + {} = {}", a, b, protected!(ultra "Adding"; {
        a + b
    }));
}

protected! 宏用于文本

语法

use vmprotect::protected;

protected!(TYPE "TEXT")
  • TYPE: 文本类型,可能的值:cstr(用于普通 C 字符串)/cwstr(用于 uint16_t C 字符串(例如在 Windows 中使用))
  • TEXT: 您的文本,应支持您选择的文本类型

此宏返回字符串,可以转换为普通字符串。此字符串在丢弃时释放,实现位于 vmprotect::strings::{encrypted_a::EncryptedStringA, encrypted_w::EncryptedStringW}

use vmprotect::protected;

// Before protection
let a = "Hello, world!";
// After protection
let a = protected!(cstr "Hello, world!");
// Also for wide-strings:
let a = protected!(cwstr "Привет, мир!");

示例

use vmprotect::protected;

fn main() {
    println!("Hello, {:?}!", protected!(A; "%Username%").into() as String);
}

许可证

待办事项部分,目前请参阅文档

硬件 ID

示例

println!("Your hwid is \"{}\"", vmprotect::licensing::get_hwid().to_str().unwrap());

已知问题

MacOS:文件头中新段的空间不足

可以通过将 -C link-arg=-Wl,-headerpad,0x500 添加到 rustc 参数来解决

对于 cargo

export RUSTFLAGS="-C link-arg=-Wl,-headerpad,0x500"

(基于 http://vmpsoft.com/forum/viewtopic.php?f=2&t=6837&start=15#p10527)

没有运行时依赖