1 个不稳定版本

0.1.0 2020年12月27日

#5#protected


vmprotect 中使用

MIT 许可证

4KB
82

vmprotect crates.io

正在进行的rust VMProtect SDK

基本的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)

依赖项

~1.5MB
~37K SLoC