1. 基础约定

1.1 服务地址

本地 API 默认关闭,需要在程序顶部的“接口”入口中手动启用。

启用后服务只监听本机回环地址:

http://127.0.0.1:{port}

端口默认从 11070 开始监听。如果端口已被占用,程序会从 11071 起依次递增尝试。实际地址可在“本地 API”弹窗中查看。

1.2 认证

除健康检查外,所有接口都需要 Token。

支持两种认证方式:

Authorization: Bearer <Token>

或:

X-WG-Api-Token: <Token>

Token 可在“本地 API”弹窗中查看、复制或重新生成。

1.3 请求格式

POST 接口请求体必须是 JSON 对象:

Content-Type: application/json

当前本地服务最大请求体大小为 2 MB。超过后返回 413 payload_too_large

1.4 统一响应格式

成功:

{
  "ok": true,
  "data": {}
}

失败:

{
  "ok": false,
  "error": {
    "code": "error_code",
    "message": "错误说明"
  }
}

1.5 常见 HTTP 状态码

状态码

含义

200

请求成功

400

请求参数错误、查询失败或启动失败

401

缺少或提供了无效 Token

403

功能未启用,例如命令执行接口未开启

404

接口不存在、模块不存在或模块不可用

405

请求方法不支持

409

任务正在运行,当前请求被拒绝

413

请求体过大

500

API 内部处理器未初始化

502

外部网络服务不可用或查询失败

2. 快速调用示例

PowerShell 示例:

$base = "http://127.0.0.1:11070"
$token = "<Token>"
$headers = @{ Authorization = "Bearer $token" }

Invoke-RestMethod "$base/api/v1/health"
Invoke-RestMethod "$base/api/v1/modules" -Headers $headers
Invoke-RestMethod "$base/api/v1/module/process/records?key=1234" -Headers $headers

POST 示例:

$body = @{
  pid = 1234
  includeMetadata = $true
  includeSignature = $true
} | ConvertTo-Json

Invoke-RestMethod "$base/api/v1/tool/process-dlls" `
  -Method Post `
  -Headers $headers `
  -ContentType "application/json" `
  -Body $body

3. 基础接口

3.1 健康检查

GET /api/v1/health

认证:不需要。

返回字段:

字段

类型

说明

app

string

应用名称

apiVersion

string

API 版本

enabled

bool

本地 API 是否正在监听

localOnly

bool

是否仅本机访问

readOnly

bool

当前为 false,因为包含刷新、扫描和命令执行能力

commandExecutionEnabled

bool

命令执行接口是否已开启

host

string

主机名

privilege

string

当前程序权限

baseUrl

string

本地 API 基础地址

示例响应:

{
  "ok": true,
  "data": {
    "app": "WG-Win-Check-Pro",
    "apiVersion": "v1",
    "enabled": true,
    "localOnly": true,
    "readOnly": false,
    "commandExecutionEnabled": false,
    "host": "WINDOWS-BU4URMF",
    "privilege": "管理员",
    "baseUrl": "http://127.0.0.1:11070"
  }
}

3.2 模块列表

GET /api/v1/modules

返回字段:

字段

类型

说明

modules

array

模块列表

模块字段:

字段

类型

说明

id

string

模块 ID

name

string

模块中文名称

index

number

UI 模块索引

current

bool

当前 UI 是否位于该模块

recordsEndpoint

string

records 查询接口

paginated

bool

records 是否分页

recordsMode

string

allpaged

defaultLimit

number

分页模块默认 limit

maxLimit

number

分页模块最大 limit

refreshSupported

bool

是否支持 refresh

refreshEndpoint

string

refresh 接口

当前模块:

id

名称

records

refresh

分页

risk

风险概览

支持

支持

user

用户排查

支持

支持

process

进程排查

支持

支持

network

网络排查

支持

支持

autorun

自启动项

支持

支持

service

服务排查

支持

支持

task

计划任务

支持

支持

file

文件排查

支持

支持

event

事件日志

UI records 不作为主要接口,建议使用 /api/v1/event/query

不支持

threat

威胁检索

支持

支持

activity

活动痕迹

支持

支持

tools

辅助工具

可能不可用

不支持

3.3 风险概览

GET /api/v1/risk/findings

返回字段:

字段

类型

说明

count

number

风险条目数量

findings

array

风险列表

风险字段:

字段

类型

说明

moduleId

string

模块 ID

module

string

模块名称

level

string

风险等级文本

levelRank

number

风险等级排序值

object

string

对象名称

info

string

信息字段

info2

string

信息字段 2

reason

string

风险原因

updatedAt

string

更新时间

recordId

number

模块内记录 ID

4. 模块 records 接口

4.1 查询模块结果

GET /api/v1/module/{moduleId}/records

查询参数:

参数

类型

必填

说明

offset

number

分页起始位置,仅 fileactivity 有效,默认 0

limit

number

分页数量,仅 fileactivity 有效,默认 500,最大 3000

key

string

核心字段精确过滤,仅指定模块有效

返回字段:

字段

类型

说明

moduleId

string

模块 ID

module

string

模块名称

paginated

bool

是否分页

snapshotAt

string

本次 API 取数时间

key

string

请求中的 key,未传则没有该字段

keyApplied

bool

key 是否被当前模块应用

available

bool

当前是否有可读表格结果

reason

string

不可用原因

hint

string

建议操作

columns

array

表格列名,顺序对应 rows[].cells

count

number

本次返回行数

total

number

过滤后的总行数

offset

number

分页起始位置,分页模块返回

limit

number

分页数量,分页模块返回

hasMore

bool

是否还有更多数据,分页模块返回

rows

array

行数据

行字段:

字段

类型

说明

row

number

当前层级中的行号

depth

number

树形层级深度,普通表格为 0

cells

array

columns 顺序排列的单元格文本

示例:

{
  "ok": true,
  "data": {
    "moduleId": "process",
    "module": "进程排查",
    "paginated": false,
    "snapshotAt": "2026-06-21 10:20:30",
    "key": "1234",
    "keyApplied": true,
    "available": true,
    "columns": ["进程名", "PID", "PPID", "命令行"],
    "count": 1,
    "total": 1,
    "rows": [
      {
        "row": 0,
        "depth": 0,
        "cells": ["example.exe", "1234", "1000", "\"C:\\example.exe\""]
      }
    ]
  }
}

4.2 key 核心字段过滤规则

key 仅匹配以下模块的核心字段。其他模块传入 key 时不应用过滤,返回 keyApplied=false

moduleId

模块

匹配字段

匹配方式

user

用户排查

用户名

忽略大小写的精确匹配

process

进程排查

PID

精确匹配

network

网络排查

PID 或远程 IP

精确匹配

autorun

自启动项

名称

忽略大小写的精确匹配

service

服务排查

服务名

忽略大小写的精确匹配

task

计划任务

任务名

忽略大小写的精确匹配

4.3 特殊模块说明

file

file records 是分页接口。如果尚未扫描或加载缓存,返回:

{
  "available": false,
  "reason": "尚未扫描或加载缓存",
  "hint": "可先调用 POST /api/v1/module/file/refresh 尝试加载缓存",
  "count": 0,
  "total": 0,
  "rows": []
}

activity

activity records 是分页接口。如果尚未扫描或加载缓存,返回类似 file 的不可用结构。

threat

如果尚未执行威胁检索,返回:

{
  "available": false,
  "reason": "尚未执行威胁检索",
  "hint": "可调用 POST /api/v1/module/threat/refresh 发起扫描",
  "scanning": false,
  "hasResult": false,
  "progress": {},
  "count": 0,
  "total": 0,
  "rows": []
}

5. 模块 refresh 接口

POST /api/v1/module/{moduleId}/refresh

支持模块:

risk, user, process, network, autorun, service, task, file, threat, activity

不支持模块返回:

{
  "ok": false,
  "error": {
    "code": "refresh_not_supported",
    "message": "该模块暂不支持 API 刷新"
  }
}

5.1 普通模块刷新

适用模块:

user, process, network, autorun, service, task

请求:

{}

响应:

{
  "ok": true,
  "data": {
    "status": "refresh_started",
    "moduleId": "process",
    "module": "进程排查"
  }
}

说明:

  • network 刷新会触发网络连接重新采集。

  • 不进入任务中心。

  • 不影响 UI 自动刷新设置。

5.2 风险概览刷新

POST /api/v1/module/risk/refresh

会依次刷新核心风险模块:

user, process, autorun, service, task

5.3 文件排查 refresh

POST /api/v1/module/file/refresh

默认加载缓存:

{
  "mode": "cache"
}

触发真实扫描:

{
  "mode": "scan"
}

mode=cache 响应字段:

字段

类型

说明

status

string

cache_loadedcache_missingbusycache_unavailable

moduleId

string

file

module

string

文件排查

mode

string

cache

message

string

加载结果说明

count

number

当前记录数

mode=scan 响应字段:

字段

类型

说明

status

string

scan_started

moduleId

string

file

module

string

文件排查

mode

string

scan

message

string

启动结果说明

count

number

当前记录数

如果扫描正在运行,返回:

{
  "ok": false,
  "error": {
    "code": "scan_busy",
    "message": "文件扫描正在运行"
  }
}

扫描结果通过 records 分页读取:

GET /api/v1/module/file/records?offset=0&limit=500

5.4 活动痕迹 refresh

POST /api/v1/module/activity/refresh

当前只加载缓存,不触发真实扫描。

响应字段类似文件模块的 mode=cache

5.5 威胁检索 refresh

POST /api/v1/module/threat/refresh

查询状态:

{
  "statusOnly": true
}

发起扫描:

{
  "ioc": "malware.example.com",
  "pid": 0,
  "includeSystemProcesses": false,
  "firstMatchOnly": true,
  "maxRegionSizeMB": 256,
  "maxResults": 5000
}

请求字段:

字段

类型

默认

说明

ioc

string

检索关键字

pid

number

0

指定 PID,0 表示全部目标进程

includeSystemProcesses

bool

false

是否包含系统进程

firstMatchOnly

bool

true

单进程命中后是否停止继续查找

maxRegionSizeMB

number

256

单内存区域最大扫描大小

maxResults

number

5000

最大结果数

如果正在扫描,返回:

{
  "ok": false,
  "error": {
    "code": "scan_busy",
    "message": "威胁检索正在运行,请稍后再试"
  }
}

6. 事件日志原始查询接口

POST /api/v1/event/query

该接口面向 Agent 自定义查询,直接返回 Windows Event Log 原始 XML,不进行事件字段解析。

请求:

{
  "channel": "Security",
  "query": "*[System[(EventID=4624)]]",
  "limit": 100,
  "timeoutMs": 10000,
  "direction": "reverse"
}

请求字段:

字段

类型

必填

默认

说明

channel

string

事件通道,例如 SecuritySystem

query

string

Windows Event Log XPath 查询语句

limit

number

100

返回数量,范围 1 到 1000

timeoutMs

number

10000

超时,范围 1000 到 30000

direction

string

reverse

reverse 从新到旧,forward 从旧到新

响应字段:

字段

类型

说明

channel

string

事件通道

query

string

查询语句

direction

string

查询方向

count

number

返回事件数量

limit

number

请求限制

truncated

bool

是否达到返回上限

timedOut

bool

是否超时

elapsedMs

number

耗时

errorCode

number

事件查询错误码,只有部分失败时返回

errorMessage

string

错误说明

events

array

原始 XML 事件列表

事件项:

{
  "index": 0,
  "xml": "<Event>...</Event>"
}

7. 工具接口

7.1 文件 Hash

POST /api/v1/tool/hash

请求:

{
  "paths": [
    "C:/Windows/System32/notepad.exe"
  ]
}

即使只查询一个文件,也必须使用 paths 数组。

响应字段:

字段

类型

说明

count

number

返回结果数

results

array

文件 Hash 结果

结果字段:

字段

类型

说明

input

string

原始输入

path

string

清理后的路径

fileName

string

文件名

exists

bool

文件是否存在且为文件

status

string

完成、文件不存在、计算失败

size

number

文件大小

sizeText

string

可读大小

md5

string

MD5

sha1

string

SHA1

sha256

string

SHA256

7.2 批量文件信息

POST /api/v1/tool/file-info

请求:

{
  "paths": [
    "C:/Windows/System32/notepad.exe"
  ],
  "includeMetadata": true,
  "includeSignature": true,
  "limit": 500
}

请求字段:

字段

类型

默认

说明

paths

array

文件路径列表

includeMetadata

bool

true

是否读取公司、描述

includeSignature

bool

true

是否校验签名

limit

number

500

最大处理数量,范围 1 到 1000

响应字段:

字段

类型

说明

count

number

返回数量

inputCount

number

输入数量

limit

number

本次限制

truncated

bool

是否截断

includeMetadata

bool

是否读取元数据

includeSignature

bool

是否读取签名

results

array

文件信息结果

结果字段:

字段

类型

说明

input

string

原始输入

path

string

清理后的路径

fileName

string

文件名

exists

bool

路径是否存在

isFile

bool

是否为文件

isDir

bool

是否为目录

absolutePath

string

绝对路径

createdAt

string

创建时间

modifiedAt

string

修改时间

accessedAt

string

访问时间

attributes

object

文件属性

size

number

文件大小

sizeText

string

可读大小

company

string

公司名

description

string

文件描述

signature

string

签名展示文本

signatureInfo

object

签名详情

status

string

完成、文件不存在、不是文件

属性字段:

字段

类型

说明

hidden

bool

Hidden 属性

system

bool

System 属性

readOnly

bool

ReadOnly 属性

archive

bool

Archive 属性

temporary

bool

Temporary 属性

签名详情字段:

字段

类型

说明

state

string

signedunsignedmismatchunknown

text

string

签名状态文本

publisher

string

签名发布者

display

string

展示文本

fileExists

bool

校验时文件是否存在

error

string

签名错误信息

7.3 指定 PID 的 DLL 模块列表

POST /api/v1/tool/process-dlls

请求:

{
  "pid": 1234,
  "processName": "example.exe",
  "includeMetadata": true,
  "includeSignature": true,
  "limit": 3000
}

请求字段:

字段

类型

必填

默认

说明

pid

number

目标进程 PID

processName

string

进程名,仅用于结果标记

includeMetadata

bool

true

是否返回公司、创建时间、修改时间

includeSignature

bool

true

是否返回签名字段

limit

number

3000

返回上限,范围 1 到 10000

响应字段:

字段

类型

说明

pid

number

目标 PID

processName

string

请求传入的进程名

count

number

本次返回数量

total

number

实际枚举模块数

limit

number

返回上限

truncated

bool

是否截断

elapsedMs

number

耗时

canceled

bool

是否取消

includeMetadata

bool

是否包含元数据

includeSignature

bool

是否包含签名

warning

string

非致命警告

modules

array

DLL 模块列表

模块字段:

字段

类型

说明

index

number

序号

name

string

模块名

path

string

模块路径

processCount

number

关联进程数,指定 PID 模式通常为 1

processNames

array

进程标记

company

string

公司名

createdAt

string

文件创建时间

modifiedAt

string

文件修改时间

signature

string

签名展示文本

signatureState

string

signedunsignedmismatchunknown

signaturePublisher

string

签名发布者

7.4 VirusTotal 查询

POST /api/v1/tool/vt

请求:

{
  "hashes": [
    "44d88612fea8a8f36de82e1278abb02f"
  ]
}

即使只查询一个 Hash,也必须使用 hashes 数组。

说明:

  • 支持 MD5、SHA1、SHA256。

  • 不接受文件路径,不自动计算文件 Hash。如需计算文件 Hash,请先调用 /api/v1/tool/hash

  • 查询前会检查 VT 网络可达性。

  • 如果 VT 未收录,结果显示 0/0found=false

响应字段:

字段

类型

说明

count

number

返回结果数

queried

number

实际提交 VT 的 Hash 数

results

array

查询结果

结果字段:

字段

类型

说明

input

string

原始输入

type

string

Hash 类型

hash

string

查询用 Hash

vt

string

检出比,例如 1/720/0

found

bool

VT 是否收录

positives

number

命中数

total

number

引擎总数

permalink

string

VT 链接

status

string

查询状态

7.5 IP 归属查询

POST /api/v1/tool/ip-location

请求:

{
  "ips": [
    "8.8.8.8",
    "192.168.1.1"
  ]
}

即使只查询一个 IP,也必须使用 ips 数组。

说明:

  • 内网、回环、本地监听、组播地址会本地分类,不进行外部查询。

  • 公网 IP 使用 ip-api.com/batch?lang=zh-CN 批量查询。

  • 每批最多 100 个公网 IP。

响应字段:

字段

类型

说明

count

number

返回结果数

queried

number

实际外部查询公网 IP 数

updated

number

成功查询到归属地的公网 IP 数

warning

string

外部查询失败警告

results

array

IP 结果

结果字段:

字段

类型

说明

input

string

原始输入

ip

string

提取后的 IP

type

string

本地分类

location

string

归属地

status

string

查询状态

error

string

错误说明

7.6 读取文件内容

POST /api/v1/tool/file-read

该接口一次只读取一个文件,用于外部 Agent 按需查看文本、配置或日志片段,避免一次返回过大的内容。

请求:

{
  "path": "C:/Windows/System32/drivers/etc/hosts",
  "mode": "text",
  "encoding": "auto",
  "offset": 0,
  "maxBytes": 262144
}

请求字段:

字段

类型

必填

默认

说明

path

string

目标文件路径

mode

string

text

返回模式,支持 textbase64

encoding

string

auto

文本解码方式,支持 autoutf8utf16leansi;仅 mode=text 生效

offset

number

0

起始读取偏移,单位字节

maxBytes

number

262144

最大读取字节数,范围 1 到 1048576

响应字段:

字段

类型

说明

input

string

原始输入路径

path

string

清理后的路径

fileName

string

文件名

exists

bool

路径是否存在

isFile

bool

是否为文件

size

number

文件大小

sizeText

string

可读大小

offset

number

本次读取起始偏移

maxBytes

number

本次最大读取字节数

readBytes

number

实际读取字节数

truncated

bool

是否仍有后续内容

nextOffset

number

下一次读取建议偏移

mode

string

返回模式

encoding

string

请求的文本编码

usedEncoding

string

实际使用的文本编码,mode=text 时返回

content

string

文本内容,mode=text 时返回

contentBase64

string

Base64 内容,mode=base64 时返回

8. 命令执行接口

POST /api/v1/command/exec

命令执行接口有独立开关。即使本地 API 已启用,该接口默认仍不可用,需要在“本地 API”弹窗中手动启用“命令执行”。

请求只支持 program + args,不支持裸命令字符串。

请求:

{
  "program": "cmd.exe",
  "args": ["/c", "whoami"],
  "cwd": "C:/Users/worker",
  "timeoutMs": 10000,
  "maxOutputBytes": 1048576
}

请求字段:

字段

类型

必填

默认

限制

说明

program

string

要执行的程序

args

array

[]

只能包含字符串

参数列表

cwd

string

程序当前工作目录

必须存在且为目录

工作目录

timeoutMs

number

10000

1000 到 60000

执行超时

maxOutputBytes

number

1048576

4096 到 5242880

stdout 和 stderr 各自的最大保存字节数

响应字段:

字段

类型

说明

program

string

执行程序

args

array

参数

cwd

string

工作目录

timeoutMs

number

实际超时

maxOutputBytes

number

实际输出上限

durationMs

number

耗时

timedOut

bool

是否超时

exitStatus

string

normalcrashtimeout

exitCode

number/null

退出码,超时或崩溃时为 null

stdout

string

标准输出

stderr

string

标准错误

stdoutTruncated

bool

stdout 是否截断

stderrTruncated

bool

stderr 是否截断

truncated

bool

是否任一输出被截断

注意:

  • 不提供 stdin。

  • 不做命令语义审查。

  • 不自动提升权限。

  • 要执行 shell 内建命令,需要显式调用 shell,例如 cmd.exe /c dir

  • 管道、重定向、通配符、环境变量展开等 shell 语法也需要显式调用 cmd.exe /cpowershell.exe -Command

  • 输出按文本返回,stdout 和 stderr 分别捕获;超出 maxOutputBytes 会截断并设置 truncated=true

  • 交互式命令、长时间运行的命令或等待输入的命令不适合该接口,会在 timeoutMs 后被终止。

  • 外部 Agent 应自行检查和限制命令。

调用示例:

PowerShell 通用调用模板:

$base = "http://127.0.0.1:11070"
$token = "<API Token>"
$headers = @{ Authorization = "Bearer $token" }

$body = @{
  program = "cmd.exe"
  args = @("/c", "whoami /all")
  cwd = "C:/"
  timeoutMs = 10000
  maxOutputBytes = 1048576
} | ConvertTo-Json -Depth 5

Invoke-RestMethod `
  -Method Post `
  -Uri "$base/api/v1/command/exec" `
  -Headers $headers `
  -ContentType "application/json" `
  -Body $body

直接执行普通程序:

{
  "program": "whoami.exe",
  "args": ["/user"],
  "timeoutMs": 10000
}

执行 CMD 内建命令、管道或重定向:

{
  "program": "cmd.exe",
  "args": ["/c", "dir /a C:\\Windows\\Temp & echo. & netstat -ano | findstr ESTABLISHED"],
  "timeoutMs": 15000,
  "maxOutputBytes": 2097152
}

执行 PowerShell 查询:

{
  "program": "powershell.exe",
  "args": [
    "-NoProfile",
    "-ExecutionPolicy",
    "Bypass",
    "-Command",
    "Get-Process | Select-Object -First 10 Name,Id,Path | ConvertTo-Json -Depth 3"
  ],
  "timeoutMs": 15000
}

指定工作目录执行:

{
  "program": "cmd.exe",
  "args": ["/c", "dir"],
  "cwd": "C:\\Users\\worker\\Desktop",
  "timeoutMs": 10000
}

未启用时返回:

{
  "ok": false,
  "error": {
    "code": "command_disabled",
    "message": "命令执行接口未启用,请在 API 接口服务窗口中手动开启"
  }
}