样本基础综合信息查询
接口说明
对样本的综合信息进行批量查询(单次最多 20 条),支持输入 md5,sha1,sha256 多种格式,返回信誉值、病毒名称、标签、流行度、文件类型、文件名称、文件大小、pv、最近扫描时间、发现时间、结束时间、信誉数值和信誉度(相比 查询-样本-情报标签 接口,增加了流行度、文件类型、文件名称、文件大小、pv、最近扫描时间、发现时间、结束时间、信誉数值和信誉度)。
请求地址
https://api.f.360.cn/files/std/internal/v5/intelligence/l2
请求方法
POST
请求参数
| 参数名 | 类型 | 位置 | 是否必填 | 示例值 | 说明 |
|---|---|---|---|---|---|
| query | Array(String) | body | 是 | | md5、sha1 或 sha256 组成的集合,长度不超过20个元素 |
| source | String | body | 是 | hm | 请求来源(自定义,如 项目缩写) |
响应参数
| 名称 | 类型 | 示例值 | 描述 |
|---|---|---|---|
| code | string | 0 | 响应状态码 |
| msg | string | ok | 响应状态信息 |
| data | Array | | 包含多个结果 |
| data.confidence | Int | 0 | 云查信誉度 |
| data.file_name | string | ATI2EVXX.EXE | 文件名称 |
| data.file_size | Int | 692224 | 文件大小 |
| data.file_type | string | pe_exe_x86 | 文件类型 |
| data.first_time | Int | 1618661616 | 发现时间 |
| data.last_scan_time | Int | 1618661616 | 最近扫描时间 |
| data.last_time | Int | 1754017881 | 更新时间 (IOC更新时间) |
| data.level | string | 危险 | 样本信誉值(危险,未知,普通,安全) |
| data.level_value | Int | 0 | 云查信誉数值 |
| data.malware | string | Win32/Trojan.Dorv.HxMBEpsA | 病毒名称(自定义) |
| data.md5 | string | 1eb5989b5b354cf88c38f835d4b68642 | 查询样本的md5 |
| data.popularity | string | 1 | 流行度,见表流行度枚举 |
| data.pv | Int | 0 | pv访问量 |
| data.sha1 | string | ce59ae868e251a54d9033e18dffe171251857c20 | 查询样本的sha1 |
| data.sha256 | string | 217b758f8e0ca26cead270ca7a47956c5cf5dd4d1463c4826d3fd4fc9d6dece8 | 查询样本的sha256 |
| data.status | String | ACTIVE | 标签状态:ACTIVE:活跃,OVER:过期,UNKNOWN:未知,Sinkhole:被处置 |
| data.tags | Array | 包含多个标签 | |
| data.tags.alias | Array | | 标签别名 |
| data.tags.desc | String | 云端规则参与研判 | 标签描述 |
| data.tags.expire_time | Int | 1754017881 | 标签过期时间 |
| data.tags.focus_on | Array | | 特殊关注节点(1001 APT,1002 挖矿,1003 勒索,1004 僵尸,1005 后门,0默认值) |
| data.tags.id | String | 标签id(待补充) | |
| data.tags.name | String | 云识别 | 标签名称 |
| data.tags.source | Int | 101 | 来源 |
| data.tags.source_name | String | 情报IOC | 来源含义 |
| data.tags.type | Int | 1 | 类型(1恶意威胁,2危险威胁,3风险内容,4常规属性,5正常服务) |
| data.tags.update_time | Int | 1741190400 | 标签更新时间 |
| imphash | string | 12fcdccc0a959fa3a11a8820a1c4bb23 | PE文件导入表的hash值 |
| ssdeep | string | PmqCpw3TdOVbwPylqidX9epcB5fSwrU92F6FN | 模糊哈希实现 |
请求示例
支持cUrl、Python、Java、PHP、Go语言的请求,示例如下
#!/usr/bin/env bash
set -euo pipefail
APPID="" # apikey
SECRET="" # salt
URL="https://api.f.360.cn/files/std/internal/v5/intelligence/l2"
BODY='{"query":["1eb5989b5b354cf88c38f835d4b68642"],"source":"hm"}'
NONCE=$(printf '%08d' $((RANDOM % 100000000)))
TIMESTAMP=$(date +%s)
BODY_MD5=$(printf '%s' "$BODY" | openssl dgst -md5 -hex | awk '{print $NF}')
SIGNATURE=$(printf '%s' "${BODY_MD5}${APPID}${NONCE}${TIMESTAMP}${SECRET}" | openssl dgst -md5 -hex | awk '{print $NF}')
SIGNATURE=${SIGNATURE:16}
curl --location --request POST "$URL" \
--header "Content-Type: application/json" \
--header "X-360-Key: ${APPID}" \
--header "X-360-Nonce: ${NONCE}" \
--header "X-360-Timestamp: ${TIMESTAMP}" \
--header "X-360-Signature: ${SIGNATURE}" \
--data "${BODY}"# python3.6.8
# -*- coding:utf-8 -*—
import hashlib
import json
import random
import time
import requests
APPID = "" # apikey
SECRET = "" # salt
def make_headers(appid, secret, body):
headers = {}
headers["X-360-Key"] = appid
headers["X-360-Nonce"] = str(random.randint(0, 99999999)).zfill(8)
headers["X-360-Timestamp"] = str(int(time.time()))
s = (
hashlib.md5(body.encode("utf8")).hexdigest()
+ headers["X-360-Key"]
+ headers["X-360-Nonce"]
+ headers["X-360-Timestamp"]
+ secret
)
md5 = hashlib.md5(s.encode("utf8")).hexdigest()
headers["X-360-Signature"] = md5[16:]
headers["Content-Type"] = "application/json"
return headers
def do_post(url, body):
res = requests.post(
url,
data=json.dumps(params),
headers=make_headers(APPID, SECRET, json.dumps(body)),
)
print(res.text)
if __name__ == "__main__":
# 请求地址
url = "https://api.f.360.cn/files/std/internal/v5/intelligence/l2"
# 查询参数
params = {"query": ["1eb5989b5b354cf88c38f835d4b68642"], "source": "hm"}
do_post(url, params)import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.concurrent.ThreadLocalRandom;
public class Demo {
static String md5(String input) throws Exception {
byte[] digest = MessageDigest.getInstance("MD5")
.digest(input.getBytes(StandardCharsets.UTF_8));
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
sb.append(String.format("%02x", b & 0xff));
}
return sb.toString();
}
public static void main(String[] args) throws Exception {
String appid = ""; // apikey
String secret = ""; // salt
String url = "https://api.f.360.cn/files/std/internal/v5/intelligence/l2";
String body = "{\"query\":[\"1eb5989b5b354cf88c38f835d4b68642\"],\"source\":\"hm\"}";
String nonce = String.format("%08d", ThreadLocalRandom.current().nextInt(100000000));
String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
String signature = md5(md5(body) + appid + nonce + timestamp + secret).substring(16);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Content-Type", "application/json")
.header("X-360-Key", appid)
.header("X-360-Nonce", nonce)
.header("X-360-Timestamp", timestamp)
.header("X-360-Signature", signature)
.POST(HttpRequest.BodyPublishers.ofString(body, StandardCharsets.UTF_8))
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8));
System.out.println(response.body());
}
}<?php
// apikey
$appid = "";
// salt
$secret = "";
$url = 'https://api.f.360.cn/files/std/internal/v5/intelligence/l2';
$body = json_encode(['query' => ['1eb5989b5b354cf88c38f835d4b68642'], 'source' => 'hm'], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
$nonce = str_pad((string) random_int(0, 99999999), 8, "0", STR_PAD_LEFT);
$timestamp = (string) time();
$signature = substr(md5(md5($body) . $appid . $nonce . $timestamp . $secret), 16);
$ch = curl_init($url);
$options = [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-360-Key: {$appid}",
"X-360-Nonce: {$nonce}",
"X-360-Timestamp: {$timestamp}",
"X-360-Signature: {$signature}",
],
];
$options[CURLOPT_POST] = true;
$options[CURLOPT_POSTFIELDS] = $body;
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
if ($response === false) {
echo curl_error($ch), PHP_EOL;
} else {
echo $response, PHP_EOL;
}
curl_close($ch);package main
import (
"bytes"
"crypto/md5"
"encoding/hex"
"fmt"
"io"
"math/rand"
"net/http"
"time"
)
func md5Hex(s string) string {
sum := md5.Sum([]byte(s))
return hex.EncodeToString(sum[:])
}
func main() {
appid := "" // apikey
secret := "" // salt
url := "https://api.f.360.cn/files/std/internal/v5/intelligence/l2"
body := []byte(`{"query":["1eb5989b5b354cf88c38f835d4b68642"],"source":"hm"}`)
nonce := fmt.Sprintf("%08d", rand.Intn(100000000))
timestamp := fmt.Sprintf("%d", time.Now().Unix())
signature := md5Hex(md5Hex(string(body)) + appid + nonce + timestamp + secret)[16:]
req, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(body))
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-360-Key", appid)
req.Header.Set("X-360-Nonce", nonce)
req.Header.Set("X-360-Timestamp", timestamp)
req.Header.Set("X-360-Signature", signature)
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
respBody, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println(string(respBody))
}响应示例
业务正常响应
{
"code": "0",
"msg": "ok",
"request_id": "VfcUCTxcpyIMzLbuNPsC",
"data": [
{
"md5": "fdadd6050aec5f744d8e4e7118f95fc6",
"sha1": "4d002443ed7fac02b1731ee625b399e60229de3f",
"sha256": "78bd96c614349f2ec4029db543731097833727954babd50ccd6ef955cb13bba9",
"level": "危险",
"malware": "Linux/Backdoor.Mirai.Hq8ASqQA",
"status": "ACTIVE",
"tags": [
{
"id": "",
"name": "Linux/Backdoor.Mirai.Hq8ASqQA",
"desc": "",
"alias": [],
"update_time": 0,
"expire_time": 0,
"source": 101,
"source_name": "情报IOC",
"type": 1,
"focus_on": [
0
]
},
{
"id": "",
"name": "Mirai",
"desc": "",
"alias": [],
"update_time": 0,
"expire_time": 0,
"source": 101,
"source_name": "情报IOC",
"type": 1,
"focus_on": [
0
]
},
{
"id": "",
"name": "具有木马特征程序",
"desc": "",
"alias": [],
"update_time": 0,
"expire_time": 0,
"source": 101,
"source_name": "情报IOC",
"type": 1,
"focus_on": [
0
]
},
{
"id": "",
"name": "Backdoor",
"desc": "远控木马",
"alias": [],
"update_time": 0,
"expire_time": 0,
"source": 101,
"source_name": "情报IOC",
"type": 1,
"focus_on": [
0
]
}
],
"popularity": "1",
"file_type": "shell",
"file_name": "",
"file_size": 1900,
"first_time": 1650758751,
"last_time": 0,
"pv": 193,
"last_scan_time": 1653134262,
"level_value": 70,
"confidence": 60
}
]
}业务异常响应
{
"code": "AC150100",
"msg": "参数有误",
"request_id": "OtkkoOOtCNswmEdpLlgU",
"data": {}
}