1 个不稳定版本
0.1.0 | 2020年12月27日 |
---|
#5 在 #protected
在 vmprotect 中使用
4KB
82 行
vmprotect
正在进行的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