跳转至

外壳保护接口#

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