金山卫士木马查杀API是金山网络为第三方开发人员提供的编程接口。您可以使用本文提供的一套 API 来开发基于金山卫士木马查杀引擎的木马查杀应用。
目前金山卫士木马查杀API 支持的功能集包含:
·金山卫士木马查杀引擎初始化及加载方式接口
·使用金山卫士木马查杀引擎完成木马查杀任务的逻辑调用接口
1. 概要说明
1.1 金山卫士木马查杀引擎结构概述
金山卫士木马查杀引擎从逻辑上划分为两三部分:
·快速扫描 快速扫描系统关键位置,包括启动项、进程、关键系统设置等项
·全盘扫描 扫描用户硬盘上的所有文件
·自定义扫描 由用户自行决定扫描硬盘上的文件/文件夹
从功能上划分为两个子引擎:
·快速扫描引擎 提供快速扫描功能
·全盘及自定义扫描引擎 提供全盘及自定义扫描功能
因此,金山木马查杀引擎的调用者应按需求分别调用这两个子引擎。
另请注意,由于某些扫描及处理操作需要高权限,因此我们的引擎需要在高权限下工作。如果权限不足,某些功能将不能正常运转。
1.2 金山卫士木马查杀引擎结构概述
开发者开发第三方木马查杀应用时,需要使用金山卫士木马引擎的一系列二进制文件及若干配置文件。为了方便开发者的使用,我们对金山卫士木马查杀引擎进行了封装,即本文所述的 API 集。我们把这套 API 集统一封装在了一个 DLL 文件(kcldscan.dll)中,并提供了从此 DLL 文件获取到相关接口的方法。对于开发者而言,仅需关心如何从 kcldscan.dll 中获取到所需接口,以及如何使用这些接口的方法。图 2-1 展示了此开发模式。
图 2-1 基于金山卫士木马查杀 API 的开发模式
1.3 金山卫士木马查杀 API 封装的使用方式
我们提供的封装了金山卫士木马查杀API的 kcldscan.dll 一共导出了下表所示的三组接口:
接口名 | 功能描述 |
---|---|
IKCldScanServer | 初始化、启动及停止木马查杀引擎接口 |
IKCldQuickScanClient | 快速扫描子引擎调用接口 |
IKCldCustomScanClient | 全盘及自定义扫描子引擎调用接口 |
这些接口类似于 COM 接口,我们称之为 SCOM 接口。相应地,这些接口的实现组件,称之为 SCOM 组件。接口 IKCldQuickScanClient 的实现组件即为对1.1小节所述的快速扫描子引擎的调用封装;接口 IKCldCustomScanClient 的实现组件即为对1.2小节所述的全盘及自定义扫描子引擎的调用封装;而接口 IKCldScanServer 的实现组件用于初始化、启动及停止这两个子引擎。
我们提供了获取这些组件接口的方法封装类 KSCOMDll (实现头文件为kscomdll.h),通过它可以很方便地获取到上述接口。获取到某个接口后,就可以用此接口指针进行相应的接口功能调用了。注意,一个接口使用完后,需要调用 Release() 方法释放引用计数;kcldscan.dll 使用完后,需调类 KSCOMDll 的 Release() 方法卸载之。以下简要代码示意了获取及使用 IKCldScanServer 接口的调用序列: 具体操作方法请参见示例。
2. 金山卫士木马查杀引擎的加载及卸载
如1.1小节所述,金山卫士木马查杀引擎划分为两个子引擎:快速扫描子引擎和全盘及自定义扫描子引擎。因此,可视需要全部加载这两个子引擎,或者只加载其中一个。使用我们提供的封装类 KSCOMDll 获取到 IKCldScanServer 接口之后,就可以调用此接口提供的方法很方便地加载/卸载它们。
2.1 加载及卸载快速扫描子引擎
以下代码片段展示了如何加载及卸载快速扫描子引擎:
2.2 加载及卸载全盘及自定义扫描子引擎
以下代码片段展示了如何加载及卸载全盘及自定义扫描子引擎:
3. 金山卫士快速扫描子引擎调用方法
按照2.1小节的方法加载了快速扫描子引擎后,就可以使用 kcldscan.dll 导出的 IKCldQuickScanClient 接口来调用它了。IKCldQuickScanClient 接口的定义见附件头文件 ikcldquickscanclient.h。表2-2 展示了 IKCldQuickScanClient 接口支持的接口函数集。具体调用逻辑可参照示例中的testquickscan.cpp。
接口函数 | 说明 |
---|---|
Init | 初始化 |
StartScan | 启动快速扫描 |
StopScan | 停止扫描 |
QuerySessionStatus | 查询扫描的状态 |
QuerySessionFixListEx | 查询扫描到的威胁项列表 |
QueryConnectToCloudState | 检查是否能够连接到金山云安全中心 |
StartFix | 修复指定威胁项 |
QueryNeedReboot | 检查是否需要重启 |
Reboot | 重启系统 |
Uninit | 反初始化 |
4. 金山卫士全盘及自定义扫描子引擎调用方法
按照2.2小节的方法加载了全盘及自定义扫描子引擎后,就可以使用kcldscan.dll导出的 IKCldCustomScanClient接口来调用它了。IKCldCustomScanClient接口的定义见附件头文件 ikcldcustomscanclient.h。表2-3 展示了 IKCldCustomScanClient接口支持的接口函数集。具体调用逻辑可参照示例中的testcustomscan.cpp。
接口函数 | 说明 |
---|---|
Init | 初始化 |
StartFullScan | 启动全盘扫描 |
AppendScanTargetPath | 自定义扫描时添加扫描路径 |
StartCustomScan | 启动自定义扫描 |
StopScan | 停止扫描 |
PauseScan | 暂停扫描 |
ResumeScan | 恢复扫描 |
QueryFullScanStatus | 查询全盘扫描状态信息 |
QueryCustomScanStatus | 查询自定义扫描状态信息 |
QueryFileVirusThreats | 查询扫描中发现的文件病毒威胁项列表 |
ProcessScanResult | 对发现的威胁进行处理 |
QueryScanThreatProcessResult | 查询扫描到的威胁的处理结果 |
QueryNeedReboot | 检查是否需要重启 |
AppendScanProcessTarget | 增加进程扫描的目标 |
SetAutoUploadFile | 控制是否上报样本 |
GetAutoUploadFile | 获取是否上报样本 |
Uninit | 反初始化 |
按照API说明所描述的方法,就可以使用金山卫士木马查杀引擎开发第三方应用了。由于我们的引擎需要在高权限环境下运行,因此,我们建议您将引擎加载在一个高权限的进程中运行,而将对于引擎的调用逻辑放在低权限中运行。本示例就是基于这种实现方式的。示例工程生成了一个可执行文件 kcldscantest.exe,它有种运行模式:后台引擎模式(Server)和客户端(Client)模式。Server模式调用 kcldscan.dll 并加载您指定的子引擎,然后监听外部 Client 进程的调用;Client模式亦调用 kcldscan.dll 并获取到您指定的调用封装接口,然后向 Server 端发起功能调用。在运行示例的时候,您应当先用高权限以 Server模式启动Server端,然后用低权限启动 Client 端,就可以进行快速扫描、全盘扫描或者自定义扫描了。
示例工程见附件示例代码文件中的kcldscantest.sln。
1. 头文件
1.1 接口定义头文件
./publish/ikcldscanserver.h----------------------初始化、启动及停止木马查杀引擎接口定义
./publish/ikcldquickscanclient.h----------------快速扫描子引擎调用接口定义
./publish/ikcldcustomscanclient.h-------------全盘及自定义扫描子引擎调用接口定义
1.2 接口数据结构定义文件
./publish/kcldquickscandata_def.h------------快速扫描子引擎调用接口所用数据结构定义
./publish/kcldcustomscandata_def.h---------全盘及自定义扫描子引擎调用接口所用数据结构定义
1.3 其他依赖头文件
./publish/kscomdll.h-----------------------------加载 SCOM 组件的辅助封装类定义
2. 示例代码文件
./kcldscantest 文件夹