轻松集成,即刻赋能

开发者接入指南

我们提供多种接入方式,无论您是希望快速集成,还是需要深度定制,都能找到适合您的方案。

API 详细文档

了解所有可用的API参数、返回值、错误码和评分标准,以便进行深度集成。

接入地址

请求地址https://www.virusmark.com/scan
请求方法POST (必须使用POST方法)
请求体格式
application/x-www-form-urlencodedmultipart/form-data (上传文件)

参数优先级

file > sha256 > md5 > hashes
一个请求对应一条返回信息,云后端优先处理文件上传任务,为兼容旧版接口,按顺序依次最高优先级参数处理返回内容。

请求参数说明

参数名必填类型标签/优先级说明
token必填string-访问令牌(示例:f47ac10b-58cc-4372-a567-0e02b2c3d479)
hashes推荐可选Array[string]P3哈希数组(可混合MD5/SHA1/SHA256,单次最多10个)
file可选FileP0待分析文件(此参数会覆盖所有哈希类参数)
sha256已弃用可选stringP1单个文件的SHA256值(此参数会覆盖md5和hashes)
md5已弃用可选stringP2单个文件的MD5值(仅当无sha256参数时生效)

文件上传响应示例

{
    "status": "Pending",
    "response_code": 2,
    "message": "文件 'MyMaliciousFile.exe' 已接收,等待处理",
    "task_id": "c4ca4238a0b923820dcc509a6f75849b"
}
  • 01response_code=2 表示上传成功
  • 02task_id 用于后续任务状态查询

批量查询响应示例

{
    "c660fdb3bdb010d01de1324f1b83cfa3": {
        "response_code": 1,
        "status": "Malicious",
        "score": 18,
        "tag": "Malware.MakeDirs.Gen@AI!BM9uMx0Lo",
        "md5": "c660fdb3bdb010d01de1324f1b83cfa3",
        "sha256": "24c9147cbf25ccf3d5ac465307c5c936a5881a6e9c903832bb50841afbc33d63",
        "updatetime": "2025-06-08T11:58:06.143+08:00",
        "notes": "这是一种高风险的木马程序..."
    },
    "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855": {
        "response_code": 0,
        .......
    }
}
  • 01每个键为请求中的哈希值(支持 MD5/SHA1/SHA256)。
  • 02response_code=1 表示命中情报;response_code=0 表示未命中。
  • 03updatetime 为该情报的更新时间。
  • 04单次请求最多 10 个哈希,超过限制将返回业务码 -6。
  • 05notes 为标签的介绍,可能包含风险等级、触发条件等。

文件评分标准

状态说明hashes 新模式md5 旧模式
Malicious确认恶意样本(如病毒、木马)0-100 (可信度越高)70-100 (风险越大)
Suspicious存在异常行为特征(如加壳、反调试)0-100 (可信度越高)50-69 (风险越大)
Clean无威胁特征(正常软件或零星漏检)0-100 (可信度越高)40
Safe白名单(如官方签名程序)0-100 (可信度越高)-1
Unknown未找到匹配情报固定值 0固定值 0

使用 hashes 请求时,返回值的 score 将表示状态标识 status 的可信度,范围为 0-100,值越高表示越可信。

业务返回码说明

2文件已接收,正在处理中。
1哈希查询成功,已找到匹配的情报。
0哈希查询成功,未找到匹配情报。
-1哈希格式不正确 (不是有效的 MD5, SHA1,或 SHA256)。
-3认证令牌(Token/OTP)无效或已过期。
-4上传的文件体积过大 (超过 50MB)。
-6单次查询哈希数量过多 (>10),需要限制每次请求的哈希数量。
-7参数不足(无文件且无哈希),请至少提供一个参数。
-10服务器外部组件错误,联系管理员排查。
-11服务器后端内部错误,联系管理员排查。

方式一:使用扩展组件接入

您可以下载我们为其他开发平台制作的通用接入组件,无需关心底层API请求细节,快速实现文件鉴定功能。

STEP 01

下载组件

点击下载通用接入组件 (Scanner_SDK_HTTP2_SHA256.exe)。

下载扩展组件 (蓝奏)立即下载
提取码:5wwb
STEP 02

调用组件

使用您的开发语言调用外部程序,然后执行以下命令。请将占位符替换为您的实际值。

Scanner_SDK_HTTP2_SHA256.exe [path] [your_api_token]

示例: 假设您的 API 令牌是 `abc123`,要扫描的文件位于 `C:\files\test.exe`,则命令如下:

Scanner_SDK_HTTP2_SHA256.exe "C:\files\test.exe" abc123
STEP 03

处理输出

程序运行后,将直接在标准输出中打印 JSON 格式的扫描结果字符串。您可以捕获此输出来进行解析。

{"code": 200, "md5": "60823f6bf0020325a1db2d5ed25dba84", "score": 40, "tag": "Unknown"}

如果发生错误,程序将输出包含错误信息的 JSON 字符串。

特别提示:安全校验

请注意核对扩展组件哈希值,防止被植入后门代码。

MD5: 97f4a73cb13a94e698cb6b2330b3fee5
SHA256: f3b8072d1d68cd26fa89aadb203cfc60e9df6b1192f544210fdd23dec5b98836

方式二:直接 API 接入

对于需要更高灵活性和深度定制的开发者,可以直接通过 HTTP 请求与我们的 API 进行交互。以下是 Python 示例。

Python 示例 1: 单个哈希查询(新模式)

import requests

def scan_with_hashes(token, sha256_value):
    url = 'https://www.virusmark.com/scan'
    data = {
        'token': token,
        'hashes': [sha256_value]
    }
    response = requests.post(url, data=data)
    print(f"查询哈希: {sha256_value}")
    print(f"响应: {response.text}")

# --- 使用 ---
# token = 'your_token_here'
# sha256_value = '24c9147cbf25ccf3d5ac465307c5c936a5881a6e9c903832bb50841afbc33d63'
# scan_with_hashes(token, sha256_value)

Python 示例 2: 批量哈希查询(新模式)

import requests

def scan_batch_hashes(token, hashes):
    url = 'https://www.virusmark.com/scan'
    data = {
        'token': token,
        'hashes': hashes
    }
    response = requests.post(url, data=data)
    print(f"批量查询: {len(hashes)} 个哈希")
    print(f"响应: {response.text}")

# --- 使用 ---
# token = 'your_token_here'
# hashes = [
#     'c660fdb3bdb010d01de1324f1b83cfa3',
#     'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
# ]
# scan_batch_hashes(token, hashes)

Python 示例 3: 直接上传文件(新模式)

import requests
import os

def scan_with_file_upload(token, file_path):
    url = 'https://www.virusmark.com/scan'
    with open(file_path, 'rb') as f:
        files = {'file': (os.path.basename(file_path), f)}
        data = {'token': token}
        response = requests.post(url, files=files, data=data)

    print(f"上传文件: {file_path}")
    print(f"响应: {response.text}")

# --- 使用 ---
# token = 'your_token_here'
# file_path = 'path/to/your/file.exe'
# scan_with_file_upload(token, file_path)