外壳保护接口#
SDK标签函数#
函数功能:
sdk标签能方便用户找到关键代码
功能说明:
sdk工具包,包括头文件、静态库以及动态库,用户在编程的过程中将sdk标签静态载入到需要保护的函数当中,这样生成的可执行程序,在 Virbox Protector加壳工具中就能够分析出sdk表示的函数,这样就能够找到用户的核心代码所在的位置。目前支持,VBProtectBegin(常规保护),VBVirtualizeBegin(虚拟化保护),VBMutateBegin(混淆化保护),VBSnippetBegin(碎片化代码保护),VBProtectDecrypt(许可加解密)。
[注意:sdk标签能方便用户找到关键代码]
sdk标签使用需要注意以下几点:
sdk标签使用
1、sdk只能静态加载,不支持动态加载dll(即 loadlibraryA 的方式)。
2、VBProtectBegin、VBVirtualizeBegin、VBSnippetBegin 以及 VBMutateBegin 等接口,传入的字符串参数,不能与其他函数共用。
3、传入的字符串参数保证为 ANSII 码的形式,这样显示在界面上的函数名称才正确,否则就会显示为乱码。
4、每个 Begin 对应一个 End,总是成对出现,并且一个函数里面不要出现多对 begin+end。
5、如果sdk表示的保护方式和工程文件中保存的保护方式冲突了,以工程文件中的保护方式为准。
6、begin+end锁定代码最好大于3行代码。(因为锁定的代码正汇编生成的指令小于15个字节,那么不会显示在加壳工具界面上)
7、sdk动态库,分为32以及64位,在使用的时候要开发者根据要编译的程序位数进行加载对应的库。
8、目前明确不支持的语言:易语言、java程序、unity3d
9、begin/end不支持嵌套使用
10、VBProtectDecrypt 被加密的字符串或者是缓冲区的长度必须是16的倍数,例如 char g_test_string[16] = {"test_decrypt"};
11、VBProtectDecrypt 传入缓冲区和传出缓冲区不能是同一个缓冲区
12、VBProtectDecrypt 传入的缓冲区只能放在函数外,即全局变量。具体的使用参照 demo
13、.Net 程序暂时不支持 VBProtectDecrypt
函数接口#
#pragma once #if defined(__APPLE__) || defined(__unix__) #define VB_IMPORT #define VB_API_CALL #else #define VB_IMPORT __declspec(dllimport) #define VB_API_CALL __stdcall #ifdef _WIN64 #pragma comment(lib, "virbox64.lib") #else #pragma comment(lib, "virbox32.lib") #endif // _WIN64 #endif // __APPLE__ || __unix__ #ifdef __cplusplus extern "C" { #endif VB_IMPORT int VB_API_CALL VBProtectBegin(const char *tag); VB_IMPORT int VB_API_CALL VBVirtualizeBegin(const char *tag); VB_IMPORT int VB_API_CALL VBMutateBegin(const char *tag); VB_IMPORT int VB_API_CALL VBSnippetBegin(const char *tag); VB_IMPORT void VB_API_CALL VBProtectEnd(void); VB_IMPORT void *VB_API_CALL VBProtectDecrypt(void *dst, const void *src, int size); #ifdef __cplusplus } #endif