说明

  • 本文档简要说明使用反黑引擎(AntiHackShield)对通用行业软件、网络游戏、个人软件实施保护的方法和注意事项。
  • 文档中涉及代码片段位于SDK安装目录下的Demo.c中。
  • 文档中代码在vs2008以上IDE中编译通过,同时提供vs2008工程文件。
  • 关于代码中使用到的SDK接口,更详尽的说明请参考SDK安装目录下的AntiHackShield.chm。

环境部署

从反黑引擎压缩包中解压出ahsSDKSetup.exe、ahsSetup32.exe、ahsSetup64.exe文件,对应开发和发布阶段需要做如下处理:

开发环境

安装 ahsSDKSetup.exe,安装后的安装目录中包含了在使用反黑引擎SDK开发时需要的接口文件、静态库、以及签名工具,具体目录结构如下:

  • \Demo: 存放反黑引擎 SDK 调用的示例代码,目前仅支持 C/C++,同时提供了 VS2008 的工程文件。
  • \Doc: 反黑引擎 SDK 接口使用文档,AntiHackShield.chm,文档中对反黑引擎SDK提供的接口有详细的描述,对反黑引擎公开的数据结构也有准确的说明。
  • \SDK: 反黑引擎 SDK 接口文件,AntiHackShield.h。反黑引擎32位静态库(x86\ahs\_sdk.lib)、64位 的静态库 (x64\ahs_sdk.lib)。目前反黑引擎仅支持使用 C/C++ 开发调用。
  • \Tools:反黑引擎 32 位、64位文件签名工具,signFile.exe。该签名是一种与Window文件签名类似,由反黑引擎内部自行校验而实现的文件签名方式,具体使用方法见后续描述。

发布环境

在使用反黑引擎保护产品后,被保护的软件中已经包含了对反黑引擎接口的调用,因此需要在被保护软件运行的计算机上安装反黑引擎运行时库,对应的 32位 版本的安装包 ahsSetup32.exe,对应的64位版本为 ahsSetup64.exe。

注意:由于反黑引擎 SDK 中并不包含运行时库,因此在使用反黑引擎 SDK 保护软件,测试及调试时,仍需要安装反黑引擎运行时库,即 ahsSetup32 或 ahsSetup64(取决于开发软件的平台集);但在发布软件时,ahsSDKSetup 并不需要额外安装。

操作步骤

引入头文件

在被保护软件工程中添加对反黑引擎 SDK 头文件 “AntiHackShield.h” 的引用

#include <windows.h>
#include <stdio.h>
#include "AntiHackShield.h"
CPP
在引入头文件的同时,还需将对应版本的反黑引擎SDK库加入工程中,如:32位 软件加入 \x86\ahs_sdk.lib, 64位软件加入 \x64\ahs_sdk.lib。

初始化反黑引擎

ret = AHS_Initialize(cDeveloperId, lic, ahs_callback_fun, nOptions);
if (ret != AHS_ERROR_OK)
{
    printf("AHS_Initialize Failed.errCode: %x.\n", ret);
    return;
}
CPP

  • 使用 AHS_Initialize 初始化反黑引擎时,需要传入 开发商ID (cDeveloperId) 和授权码 (lic),开发商ID 和授权码位于反黑引擎 SDK 解压目录下的 Readme 中。
  • ahs_callback_fun 为用于接收反黑引擎通知的回调函数,反黑引擎在运行中检测到的异常事件均会通知的形式告知应用程序,因此被保护的软件可以在自定义的 ahs_callback_fun 中来实现惩罚处理措施。
  • nOptions 是反黑引擎在在对目标软件进行保护时的控制选项。

注意:在使用反黑引擎对被保护软件调试时,需要将 nOptions 填 0 表示当前处于调试状态,但软件发行前,需要修改此选项为组合安全选项,确保被保护软件的安全。

启动反黑引擎

在目标被保护软件任何功能工作前(时机越早,反黑引擎对其保护的时间越早),启动反黑引擎,达到对软件最大化保护的目的。

ret = AHS_StartService();
if (ret != AHS_ERROR_OK)
{
    AHS_Uninitialize();
    printf("AHS_StartService Failed.errCode: %x.\n", ret);
    return;
}
CPP


如果反黑引擎运行时库安装正常,反黑引擎一般可以正常启动,但如果反黑引擎检测到当前运行环境存在非法行为,比如对反黑引擎的调试、双机调试等等,此处的调用将会返回失败。尤其当使用双机调试来调试反黑引擎自身时,很可能导致计算机崩溃,如蓝屏。

API挂钩检测

ret = AHS_CheckApiW(L"Kernel32.dll", L"AreFileApisANSI", NULL);
if (ret != AHS_ERROR_OK)
{
    AHS_StopService();
    AHS_Uninitialize();
    printf("AHS_CheckApi-AreFileApisANSI Failed.errCode: %x.\n", ret);
    return;
}
printf("AHS_CheckApi AreFileApisANSI ok...\n");
CPP

API 挂钩检测可以通过指定需要保护的动态库(系统动态库和自定义普通动态库均可)中的特定API接口,达到防止该 API 被挂钩的目的,目前最后一个参数直接被忽略即可。

文件签名验证

反黑引擎自定义文件签名机制,是一种安全的对目标被保护文件进行签名,然后通过反黑引擎进行验证的保护机制,该机制可以防止可执行文件或数据文件被篡改,使用流程如下:

  • 使用 SDK 安装目录下的 signFile.exe 对被保护文件签名,其中 signFile.exe 为命令行工具,可以根据该命令行提示来完成签名操作。
  • 对文件签名后会生成对应的签名数据文件:usr.sig。
  • 如果需要对多个文件进行签名,可以多次调用该命令行工具。
  • 将 usr.sig 文件放置于被保护软件的相同目录。
  • 如果操作有误,需要将 usr.sig 文件删除,重新进行签名处理。错误的文件签名随着被保护软件被发布后可能导致反黑引擎在进行文件校验是出现错误的判断。
  • 在被保护程序代码中,主动对签名后的文件进行验证,如果文件数据未被篡改,则 AHS_CheckFileW 返回 AHS_ERROR_OK,否则返回对应的错误码,具体代码参考如下:
ret = AHS_CheckFileW(L"Demo.exe");
if (ret != AHS_ERROR_OK)
{
    AHS_StopService();
    AHS_Uninitialize();
    printf("AHS_CheckFile Failed.errCode: %x.\n", ret);
    return;
}
printf("AHS_CheckFile ahs_test.exe ok...\n");
CPP

检测反黑引擎运行状态

while (...) // 此处为应用程序主要代码逻辑处,如游戏主循环、执行重要功能代码之前
{
    ret = AHS_CheckEngineStatus(&status);
    if (ret != AHS_ERROR_OK)
    {
        AHS_StopService();
        AHS_Uninitialize();
        printf("AHS_CheckEngineStatus Failed.errCode: %x.\n", ret);
        return;
    }
    else
    {
        if (status != AHS_ERROR_OK)
        {
            printf("status: %x.\n", status);
        }
        printf("AHS_CheckEngineStatus ok...\n");
    }
    Sleep(100);
    ...
}
CPP

在应用程序运行时,在重要的函数调用前,或者主循环中,应该通过 AHS_CheckEngineStatus 接口主动检测反黑引擎的工作状态,当反黑引擎自身受到影响,被篡改,反黑组件异常时,都会返回相应的错误码,如果反黑引擎工作正常,返回 AHS_ERROR_OK。

停止反黑驱动及反初始化

在程序退出前,需要停止反黑引擎,同时对反黑引擎中使用到的资源进行释放。但在目标被保护程序真正退出前,反黑引擎仍会对其进行保护,但不会收到任何通知。

ret = AHS_StopService();
if (ret != AHS_ERROR_OK)
{
    AHS_Uninitialize();
    printf("AHS_StopService Failed.errCode: %x.\n", ret);
    return;
}
printf("AHS_StopService ok...\n");

ret = AHS_Uninitialize();
if (ret != AHS_ERROR_OK)
{
    printf("AHS_Uninitialize Failed.errCode: %x.\n", ret);
    return;
}
CPP

回调通知

int __stdcall ahs_callback_fun(int code, int paramSize, void *param)
{
    switch (code)
    {
    case AHS_NTF_ABNORMAL_KERNEL_MODULE:
    {
        t_sp_character_details *details = (t_sp_character_details*)param;
        printf("\n[Notify] code is: %x, kernem module: %s.\n", code, details->description);
    }
        break;
    case AHS_NTF_ABNORMAL_MODULE_MEM:
    case AHS_NTF_ABNORMAL_MODULE_NAME:
    case AHS_NTF_ABNORMAL_WINDOWS:
    case AHS_NTF_ABNORMAL_PROCESS:
        printf("\n[Notify] code is: %x.\n", code);
        break;
    default:
        printf("\n[Notify] unknown code: %x.\n", code);
        break;
    }
    return 0;
}
CPP

在反黑引擎初始化时设置该回调通知,当反黑引擎检测到应用层环境异常、驱动层环境异常、反黑引擎状态异常时,反黑引擎通过此回调通知被保护程序,被保护应用程序在接收到上述事件时可以决定后续处理策略,比如退出被保护应用程序,或记录日志。其中,AHS_NTF_XXXXXXXX 代表不同的通知类型,这些类型分别表示:

  • 发现可疑的内核模块,如 PC HUNTER 工具
  • 发现可疑的应用层模块,如 Windbg、OllyDbg 调试器
  • 发现可疑的 Windows 窗口,如调试器窗口
  • 发现可疑的进程,如调试器进程

以上的通知均由反黑引擎对反黑数据库内容的检测触发,当检测到数据库中特定规则项时,以上述回调方式提供报警。

函数接口说明

宏定义–保护选项

#ifndef __AHS_CHECK_OPTIONS
#define __AHS_CHECK_OPTIONS

#define AHS_CHKOPT_ENABLE_DEBUG                     0x00000001
/** 保护选项 AHS_CHKOPT_DEBUG_SELF_DESTRUCTION 检测被调试退出APP */  
#define AHS_CHKOPT_DEBUG_SELF_DESTRUCTION           0x00000002
/** 启用后,检测到异常的内核对象将退出APP */
#define AHS_CHKOPT_BAD_OBJ_SELF_DESTRUCTION         0x00000004
/** AHS_CHKOPT_CHECK_SUBPROCESS_OBJECTS 打开标志,则根据特征库内容检测被保护子进程的内核对象名称 */
#define AHS_CHKOPT_CHECK_SUBPROCESS_OBJECTS         0x00000008
/** 保护选项 是否开启内存保护 */
#define AHS_MEMORY_PROTECT                          0x00000010
/** AHS_CHKOPT_SKIP_SVCHOST 跳过SVC检测,打开标志,允许svchost.exe读取APP内存,只有windows有效*/
#define AHS_CHKOPT_SKIP_SVCHOST                     0x00000020
/** AHS_CHKOPT_SKIP_LSASS 跳过LSASS检测,打开标志,允许lsass.exe读取APP内存,只有windows有效*/
#define AHS_CHKOPT_SKIP_LSASS                       0x00000040
/** AHS_CHKOPT_SKIP_CSRSS 跳过CSRSS检测,打开标志,允许csrss.exe读取APP内存,只有windows有效*/
#define AHS_CHKOPT_SKIP_CSRSS                       0x00000080
/** AHS_CHKOPT_SKIP_SMSS 跳过SMSS检测,打开标志,允许smss.exe读取APP内存,只有windows有效*/
#define AHS_CHKOPT_SKIP_SMSS                        0x00000100
/** AHS_CHKOPT_SINGLE_NOTIFY_PER_ITEM 打开标志,相同通知只进行一次*/
#define AHS_CHKOPT_SINGLE_NOTIFY_PER_ITEM           0x00000200
/** 启用默认的挂钩检测 开启后,反黑引擎默认将对一些函数进行挂钩检测 */
#define AHS_CHKOPT_ENABLE_DEFAULT_HOOK_CHECK        0x00000400
/** 启用SafeApi调试检测 开启后,在调试状态调用SafeApi返回失败 */
#define AHS_CHKOPT_ENABLE_SAFEAPI_DEBUG_CHECK       0x00000800


/** AntiHackShield 所有保护选项*/
#define AHS_CHKOPT_ALL (AHS_CHKOPT_DEBUG_SELF_DESTRUCTION \
                    | AHS_CHKOPT_BAD_OBJ_SELF_DESTRUCTION\
                    | AHS_CHKOPT_CHECK_SUBPROCESS_OBJECTS\
                    | AHS_MEMORY_PROTECT \
                    | AHS_CHKOPT_SKIP_SVCHOST \
                    | AHS_CHKOPT_SKIP_LSASS \
                    | AHS_CHKOPT_SKIP_CSRSS \
                    | AHS_CHKOPT_SKIP_SMSS \
                    | AHS_CHKOPT_SINGLE_NOTIFY_PER_ITEM\
                    | AHS_CHKOPT_ENABLE_DEFAULT_HOOK_CHECK\
                    | AHS_CHKOPT_ENABLE_SAFEAPI_DEBUG_CHECK\
                    )


#endif//#define __AHS_CHECK_OPTIONS
CPP

宏定义–错误码

/** AHS_ERROR_OK 成功*/
#define AHS_ERROR_OK                                0x00000000  

/** AHS_ERROR_INVALID_PARAM 非法参数*/
#define AHS_ERROR_INVALID_PARAM                     0x00000001  

/** AHS_ERROR_LOAD_ENGINE_FAILED 加载引擎失败 请查看文件是否存在或者不完整或者权限或者杀毒软件*/
#define AHS_ERROR_LOAD_ENGINE_FAILED                0x00000002  

/** AHS_ERROR_INVALID_ENGINE 引擎非法被篡改*/
#define AHS_ERROR_INVALID_ENGINE                    0x00000003  

/** AHS_ERROR_NOT_ENOUGH_MEMORY 虚拟内存不够*/
#define AHS_ERROR_NOT_ENOUGH_MEMORY                 0x00000004  

/** AHS_ERROR_INITIALIZING 同步:引擎正在初始化,请稍等再试*/
#define AHS_ERROR_INITIALIZING                      0x00000005  

/** AHS_ERROR_ALREADY_INITIALIZED 同步:引擎已经初始化过,不需要再次初始化*/
#define AHS_ERROR_ALREADY_INITIALIZED               0x00000006  

/** AHS_ERROR_ALREADY_STARTED 同步:引擎已经开始了,不需要再开始了 */
#define AHS_ERROR_ALREADY_STARTED                   0x00000007  

/** AHS_ERROR_SERVICE_STARTING 同步:引擎正在开始,请稍后再试*/
#define AHS_ERROR_SERVICE_STARTING                  0x00000008  

/** AHS_ERROR_SERVICE_STOPPING 同步:引擎正在停止  请稍后再试*/
#define AHS_ERROR_SERVICE_STOPPING                  0x00000009  

/** AHS_ERROR_SERVICE_NOT_INITIALIZED 同步:引擎未初始化,请初始化*/
#define AHS_ERROR_SERVICE_NOT_INITIALIZED           0x0000000a  

/** AHS_ERROR_SERVICE_NOT_STARTED 同步:引擎未初始化,请调用开始*/
#define AHS_ERROR_SERVICE_NOT_STARTED               0x0000000b  

/** AHS_ERROR_SERVICE_INVALID_STATE 同步的状态不对,请联系开发商*/
#define AHS_ERROR_SERVICE_INVALID_STATE             0x0000000c  

/** AHS_ERROR_SERVICE_BUSY 服务正忙,请稍后尝试*/
#define AHS_ERROR_SERVICE_BUSY                      0x0000000d  

/** AHS_ERROR_INVALID_LICENSE 非法授权,不正确的反黑引擎SDK*/
#define AHS_ERROR_INVALID_LICENSE                   0x0000000e  

/** AHS_ERROR_INVALID_CONTEXT 反黑引擎内部状态已经错误*/  
#define AHS_ERROR_INVALID_CONTEXT                   0x0000000f  

/** AHS_ERROR_UNEXPECTED 反黑引擎非处理的异常*/
#define AHS_ERROR_UNEXPECTED                        0x00000010  

/** AHS_ERROR_NO_IMPLEMENT 未实现*/
#define AHS_ERROR_NO_IMPLEMENT                      0x00000011  

/** AHS_ERROR_LOAD_DRIVER 加载驱动失败 需要管理员权限等*/
#define AHS_ERROR_LOAD_DRIVER                       0x00000012  

/** AHS_ERROR_UNLOAD_DRIVER 卸载驱动失败,进程还在跟通讯失败*/
#define AHS_ERROR_UNLOAD_DRIVER                     0x00000013  

/** AHS_ERROR_INTERFACE_NOT_FOUND 内部API未实现 */
#define AHS_ERROR_INTERFACE_NOT_FOUND               0x00000014  

/** AHS_ERROR_API_NOT_FOUND-API 要检测的未找到 */
#define AHS_ERROR_API_NOT_FOUND                     0x00000015  

/** AHS_ERROR_INVALID_PATH, 特征数据库或者签名数据库文件未找到*/
#define AHS_ERROR_INVALID_PATH                      0x00000016  

/** AHS_ERROR_BE_HOOKED 被保护APP的被钩子*/
#define AHS_ERROR_FUNCTION_HOOKED                   0x00000017  

/** AHS_ERROR_QUERY_SIGNDATA 查询文件特征签名失败*/
#define AHS_ERROR_QUERY_SIGNDATA                    0x00000018  

/** AHS_ERROR_BAD_FILE_SIGNATURE 错误的文件签名*/
#define AHS_ERROR_BAD_FILE_SIGNATURE                0x00000019  

/** AHS_ERROR_PROTECT_PROCESS 保护指定进程 */
#define AHS_ERROR_PROTECT_PROCESS_FAILED            0x0000001a  

/** AHS_ERROR_IAT_HOOK_CHECKED 检测到IAT挂钩*/
#define AHS_ERROR_IAT_HOOK_CHECKED                  0x0000001b  

/** AHS_ERROR_SS_NOT_INSTALLED SS未安装或未运行*/
#define AHS_ERROR_SS_NOT_INSTALLED                  0x0000001c  

/** AHS_ERROR_SDK_VERSION_TOO_LOW SDK的版本太低 */
#define AHS_ERROR_SDK_VERSION_TOO_LOW               0x0000001d  

/** AHS_ERROR_GET_LOG_DIRECTORY_FAILED 获取日志目录失败 */
#define AHS_ERROR_GET_LOG_DIRECTORY_FAILED          0x0000001e  

/**AHS_ERROR_LOG_FILE_PERMISSION_DENIED 日志目录权限不足 */
#define AHS_ERROR_LOG_FILE_PERMISSION_DENIED        0x0000001f


/** AHS_ERROR_DB START*/
#define AHS_ERROR_DB                                0x00000100  

/** AHS_ERROR_DB_OPEN_FAILED 数据库文件打开失败*/
#define AHS_ERROR_DB_OPEN_FAILED                    AHS_ERROR_DB + 1  

/** AHS_ERROR_DB_FILE_NOT_FOUND 数据库文件不存在*/
#define AHS_ERROR_DB_FILE_NOT_FOUND                 AHS_ERROR_DB + 2  

/** AHS_ERROR_DB_OPERATE_FAILED 数据库文件操作失败*/
#define AHS_ERROR_DB_OPERATE_FAILED                 AHS_ERROR_DB + 3  

/** AHS_ERROR_DB_INVALID_DB 数据库文件不合法*/
#define AHS_ERROR_DB_INVALID_DB                     AHS_ERROR_DB + 4  

/** AHS_ERROR_DB_TABLE_MISSED 数据库表格消失了*/
#define AHS_ERROR_DB_TABLE_MISSED                   AHS_ERROR_DB + 5  

/** AHS_ERROR_DB_INVALID_VALUE 数据库不合法的值*/
#define AHS_ERROR_DB_INVALID_VALUE                  AHS_ERROR_DB + 6  

/** AHS_ERROR_DB_CRYPTO_ERROR 数据库解密失败*/
#define AHS_ERROR_DB_CRYPTO_ERROR                   AHS_ERROR_DB + 7
CPP

宏定义–回调消息通知消息类型

/** 正常运行*/
#define AHS_NTF_STATUS_RUNNING                      0x00000101  

/** 被下钩*/
#define AHS_NTF_FUNCTION_HOOKED                     0x00000102  

/** 不正常的进程*/
#define AHS_NTF_ABNORMAL_PROCESS                    0x00000103  

/** 不正常的窗口*/
#define AHS_NTF_ABNORMAL_WINDOWS                    0x00000104  

/** 不正常的模块名称*/
#define AHS_NTF_ABNORMAL_MODULE_NAME                0x00000105  

/** 不正常的模块内存*/
#define AHS_NTF_ABNORMAL_MODULE_MEM                 0x00000106  

/** 不正常的核心进程*/
#define AHS_NTF_ABNORMAL_KERNEL_MODULE              0x00000107  


/** 进程被附加调试,WINDOWS有效*/
#define AHS_NTF_PROCESS_ATTACHED                    0x00000108  

/** 进程被调试启动,WINDOWS有效*/
#define AHS_NTF_PROCESS_DEBUGGED                    0x00000109  

/** 进程被非法访问内存,WINDOWS有效*/
#define AHS_NTF_PROCESS_ACCESSING_MEMORY            0x0000010a  

/** 同步操作进程异常,WINDOWS有效*/
#define AHS_NTF_OPERATING_PROCESS                   0x0000010b  

/** 驱动不正常,WINDOWS有效*/
#define AHS_NTF_DRIVER_ABNORMALLY                   0x0000010c  

/** 消息钩子,WINDOWS有效*/
#define AHS_NTF_MESSAGE_HOOKED                      0x0000010d  

/** IAT钩子*/
#define AHS_NTF_FUNCTION_IAT_HOOKED                 0x0000010e  

/** 不正常的内核对象 */
#define AHS_NTF_ABNORMAL_KERNEL_OBJECT              0x0000010f  

/** 未知的状态,WINDOWS有效*/
#define AHS_NTF_UNKNOWN                             0x00000fff
CPP

宏定义–反黑引擎状态码

#define AHS_STATUS_NORMAL                           0x00000000  

#define AHS_STATUS_DRIVER_ABNORMALLY                0x00000501

#define AHS_STATUS_PROCESS_UNPROTECTED              0x00000502

#define AHS_STATUS_PROCESS_DEBUGGED                 0x00000503

#define AHS_STATUS_PROCESS_ABNORMALLY               0x00000504

#define AHS_STATUS_INVALID_CONTEXT                  0x00000505

#define AHS_STATUS_INVALID_ANTI_MONITOR             0x00000506

#define AHS_STATUS_INVALID_CHECK_MONITOR            0x00000507
CPP

反黑引擎通知回调函数声明

/**
 *  \brief 反黑引擎通知事件
 *  \param [in] code 回调通知类型
 *  \param [in] paramSize 回调通知的param的大小
 *  \param [in] param 通知的参数
 *  \remarks:
 *
 *      当code为AHS_NTF_STATUS_RUNNING通知类型,param无效,此时表示反黑引擎仍处于正常工作
 *
 *      当code为以下通知类型:
 *
 *      1)AHS_NTF_ABNORMAL_PROCESS: 可疑的进程,如调试器等
 *
 *      2)AHS_NTF_ABNORMAL_WINDOWS:可疑的窗口名称,如调试器窗口
 *
 *      3)AHS_NTF_ABNORMAL_MODULE_NAME: 可疑的模块名称,如特定的补丁模块
 *
 *      param 存放字符串,表示进程名称、窗口名称、模块名称
 *
 *      当code为AHS_NTF_ABNORMAL_KERNEL_MODULE通知类型,表示检测到系统中存在可疑的内核模块
 *
 *      param存放t_sp_character_details 结构
 *
 *      当code为 AHS_NTF_FUNCTION_HOOKED 通知类型
 *
 *      param存放数据暂未公开,此时表示在当前进程中检测到挂钩行为
 *
 *      当code为AHS_NTF_DRIVER_ABNORMALLY:反黑引擎的驱动模块工作异常
 *
 *      此时param暂未公开
 *     
 *      当code为以下通知类型:
 *
 *      1)AHS_NTF_PROCESS_ACCESSING_MEMORY:有其他正在访问当前进程内存
 *
 *      2)AHS_NTF_PROCESS_ATTACHED:当前进程被附加调试
 *
 *      3)AHS_NTF_PROCESS_DEBUGGED:当前进程处于调试状态
 *
 *      4)AHS_NTF_OPERATING_PROCESS:有其他进程正在请求访问当前进程,包括对内存的操作、线程的创建等
 *
 *      此时param并未公开
 *
 *      对于AHS_NTF_MESSAGE_HOOKED,目前并无实现,可以忽略。
 *      
 *      当code为AHS_NTF_UNKNOWN时,表示检测到非预期的异常
 *
 *
 *      在以上通知中 AHS_NTF_STATUS_RUNNING 为正常状态,其他均代表反黑引擎检测到有可疑的异常事件产生,可以根据测试结果和软件特点决定处理方式。
 */
typedef int (AHS_API *pfn_AHS_Callback)(int code, int paramSize, void *param);

/**
*  @}
*/

#ifndef AHS_PROTECTOR_CHECK_DESC_SIZE
/** 特征的字符最大体积*/
#define AHS_PROTECTOR_CHECK_DESC_SIZE          260
#endif

#define AHS_DEVELOPER_ID_SIZE                  8

#ifndef _CHARACTER_DETAILS
#define _CHARACTER_DETAILS
/** _sp_character_details 特征数据描述结构*/
typedef struct _sp_character_details
{
    /** 0 无匹配 1 匹配描述由description存储*/
    int value;

    /** 用来存模块名称 */
    char description[AHS_PROTECTOR_CHECK_DESC_SIZE];
}t_sp_character_details;
#endif//

/** 数据库类型 */
typedef enum _AHS_DB_TYPE
{
    AHS_DB_TYPE_CHARACTER = 0,
    AHS_DB_TYPE_SIGNATURE
}AHS_DB_TYPE;

/** AHS_CRYPTO_STATE加密句柄*/
typedef void* AHS_CRYPTO_STATE;
/** AHS_CRYPTO_STATE加密句柄的指针*/
typedef AHS_CRYPTO_STATE* PAHS_CRYPTO_STATE;

/** 反黑句柄*/
typedef void* AHS_HANDLE;
/** 反黑句柄的指针*/
typedef AHS_HANDLE* PAHS_HANDLE;
CPP

API函数

AHS_Initialize

   int AHS_API AHS_Initialize(
        IN unsigned char cDeveloperId[8],
        IN const char *szLicense,
        IN pfn_AHS_Callback pInit,
        IN unsigned int uOption
        );

描述: 反黑引擎初始化函数,在调用后续函数前必须调用此函数

参数 

  • [in] cDeveloperId 开发商ID
  • [in] szLicense 调用程序的许可证
  • [in] pInit 回掉函数指针
  • [in] uOption 反黑引擎保护选项 更多查看 AHS_OPTICON_FLAG

AHS_SetDBFileW

 int AHS_API AHS_SetDBFileW(const wchar_t *szFilePath, AHS_DB_TYPE dbType);

描述: 设置反黑引擎用户使用到的数据库文件路径 UNICODE

参数 

  • [in] szFilePath 对应被设置数据库的路径
  • [in] dbType 对应要设置的数据库的类型,AHS_DB_TYPE_CHARACTER表示特征库,AHS_DB_TYPE_SIGNATURE表示签名库

备注
该函数只允许在反黑引擎初始化后,启动之前被调用,否则返回 AHS_ERROR_SERVICE_INVALID_STATE。在不调用该函数时,反黑引擎将使用被保护软件主程序(exe)目录下usr.db、usr.sig文件作为默认特征数据库、签名数据库,并且允许文件不存在;如果手动调用该接口,则被设置文件必须正确的存在,且反黑引擎将使用此文件作为特征库文件或者签名库文件

AHS_SetDBFileA

int AHS_API AHS_SetDBFileA(const char *szFilePath, AHS_DB_TYPE dbType);

描述:
设置反黑引擎用户使用到的数据库文件路径 ANSI

参数 

  • [in] szFilePath 对应被设置数据库的路径
  • [in] dbType 对应要设置的数据库的类型,AHS_DB_TYPE_CHARACTER表示特征库,AHS_DB_TYPE_SIGNATURE表示签名库

备注
该函数只允许在反黑引擎初始化后,启动之前被调用,否则返回 AHS_ERROR_SERVICE_INVALID_STATE。在不调用该函数时,反黑引擎将使用被保护软件主程序(exe)目录下usr.db、usr.sig文件作为默认特征数据库、签名数据库,并且允许文件不存在;如果手动调用该接口,则被设置文件必须正确的存在,且反黑引擎将使用此文件作为特征库文件或者签名库文件

AHS_StartService

 int AHS_API AHS_StartService(void);

描述 : 反黑引擎启动函数,此函数被调用后,反黑引擎保护生效。建议在程序启动最初调用该函数

AHS_StopService

 int AHS_API AHS_StopService(void);  

描述 
反黑引擎停止函数、此函数被调用后,反黑引擎停止对进程的保护和检测。建议在程序退出前调用该函数

AHS_Uninitialize

int AHS_API AHS_Uninitialize(void);

描述 : 反黑引擎资源释放函数,在程序退出前,应该调用此函数来使用反黑引擎运行中所占用的资源

AHS_GetSDKVersion

int AHS_API AHS_GetSDKVersion(OUT int *version);

描述 
获取当前反黑引擎SDK版本

参数 

  • [out] version 接收SDK版本

AHS_GetAhsVersion

int AHS_API AHS_GetAhsVersion(OUT int *version);

描述 
获取当前反黑引擎版本

参数 

  • [out] version 反黑引擎版本

AHS_GetAhsDbVersion

int AHS_API AHS_GetAhsDbVersion(OUT int *version);

描述 
获取当前数据库版本

参数 

  • [out] version 反黑数据库版本

AHS_CheckApiW

int AHS_API AHS_CheckApiW(const wchar_t *szModuleName, const wchar_t *szFunctionName, const wchar_t *szSpecificPath);

描述 
检测指定模块中导出函数UNICODE

参数 

  • [in] szModuleName 待检测模块名称
  • [in] szFunctionName 待检测模块中函数名称
  • [in] szSpecificPath 被检测模块应位于的目录

备注 :
检测目标导出函数时,在应用程序退出前一直有效,通过回调通知

AHS_CheckApiA

int AHS_API AHS_CheckApiA(const char *szModuleName, const char *szFunctionName, const char *szSpecificPath);

描述 
检测指定模块中导出函数ANSI

参数 

  • [in] szModuleName 待检测模块名称
  • [in] szFunctionName 待检测模块中函数名称
  • [in] szSpecificPath 被检测模块应位于的目录

备注 :
检测目标导出函数时,在应用程序退出前一直有效,通过回调通知

AHS_CheckFileW

int AHS_API AHS_CheckFileW(const wchar_t *szFilePath);

描述 
检测文件签名信息UNICODE

参数 

  • szFilePath 需要检测文件签名的文件路径

备注 :
检测运行程序的文件校验信息。使用该API时,需要在发布程序前使用AHSSignTool对需要检测文件签名生成签名信息,在软件发布后,如果不存在该校验文件或文件错误,则该调用返回错误

AHS_CheckFileA

int AHS_API AHS_CheckFileA(const char *szFilePath);

描述 
检测文件签名信息ANSI

参数 

  • szFilePath 需要检测文件签名的文件路径

备注 :
检测运行程序的文件校验信息。使用该API时,需要在发布程序前使用AHSSignTool对需要检测文件签名生成签名信息,在软件发布后,如果不存在该校验文件或文件错误,则该调用返回错误

AHS_CheckEngineStatus

int AHS_API AHS_CheckEngineStatus(int *nStatus);

描述 
获取当前反黑引擎的工作状态

参数 

  • [out] nStatus 返回状态

AHS_DeviceIoControl

BOOL AHS_API AHS_DeviceIoControl(IN HANDLE hDevice,
        IN  DWORD        dwIoControlCode,
        IN  LPVOID       lpInBuffer,
        IN  DWORD        nInBufferSize,
        OUT LPVOID       lpOutBuffer,
        IN  DWORD        nOutBufferSize,
        OUT LPDWORD      lpBytesReturned,
        IN OUT LPOVERLAPPED lpOverlapped);

描述 

安全API-DeviceIoControl,在调用DeviceIoControl时可替换原系统函数来增加调用安全性

备注 

该函数与系统API DeviceIoControl参数与返回值意义相同,但目前该函数只支持同步通讯调用,免费版本此接口无效

购买

测试DEMO版或购买正式版请电话联系:010-56730936

支持

请关注反黑引擎最新动态,您可以在我们官方主页下载到当前最稳定、最安全的反黑引擎版本。

https://lm.virbox.com/product/7.html