Я пытаюсь отформатировать json-вывод VirusTotal API таким образом, чтобы получить все необходимые данные в одном обзоре. API VirusTotal можно вызвать через curl следующим образом (вам нужно сначала зарегистрировать ключ API, передаваемые данные являются хешем файла, который, как вы подозреваете, является вредоносным):

curl --silent https://www.virustotal.com/vtapi/v2/file/report -F apikey=$VTAPI -F resource=b2349998571ab733d4ee0ca8a82afa614527aec75679569a91940631851c3d2b

И вывод находится в формате json. Итак, jq - это путь вперед, чтобы сделать это читаемым человеком:

curl --silent https://www.virustotal.com/vtapi/v2/file/report -F apikey=$VTAPI -F resource=b2349998571ab733d4ee0ca8a82afa614527aec75679569a91940631851c3d2b | jq "."

Это даст что-то вроде ниже (11 движков определяют файл как вредоносный, проверьте URL-адрес постоянной ссылки и просмотрите подробности на веб-сайте VT):

{
  "scans": {
    "Bkav": {
      "detected": false,
      "version": "1.3.0.9899",
      "result": null,
      "update": "20200418"
    },
    "TotalDefense": {
      "detected": false,
... etc.
  "resource": "b2349998571ab733d4ee0ca8a82afa614527aec75679569a91940631851c3d2b",
  "response_code": 1,
  "scan_date": "2020-04-18 12:36:44",
  "permalink": "https://www.virustotal.com/file/b2349998571ab733d4ee0ca8a82afa614527aec75679569a91940631851c3d2b/analysis/1587213404/",
  "verbose_msg": "Scan finished, information embedded",
  "total": 61,
  "positives": 11,
  "sha256": "b2349998571ab733d4ee0ca8a82afa614527aec75679569a91940631851c3d2b",
  "md5": "a860ff8b038de1ab70706163f4adf955"
}

Я помещаю полный вывод json VT в pastebin

Я бы хотел показать только записи с обнаруженным == true и отформатировать их таким образом, чтобы вся соответствующая информация была видна в одном обзоре без необходимости прокрутки назад. Я мог бы сделать perl-скрипт для этого, но поскольку jq настолько мощный, я надеюсь, что там можно все форматировать? В идеале это выглядело бы так:

MicroWorld-eScan        14.0.409.0      20200418        Trojan.GenericKD.42992262
McAfee                  6.0.6.653       20200417        Artemis!A860FF8B038D
...
"scan_id": "b2349998571ab733d4ee0ca8a82afa614527aec75679569a91940631851c3d2b-1587213404",
"sha1": "155f680dfc91b0f90976c0892bb883f7a360e041",
"resource": "b2349998571ab733d4ee0ca8a82afa614527aec75679569a91940631851c3d2b",
"response_code": 1,
"scan_date": "2020-04-18 12:36:44",
"permalink": "https://www.virustotal.com/file/b2349998571ab733d4ee0ca8a82afa614527aec75679569a91940631851c3d2b/analysis/1587213404/",
"verbose_msg": "Scan finished, information embedded",
"total": 61,
"positives": 11,
"sha256": "b2349998571ab733d4ee0ca8a82afa614527aec75679569a91940631851c3d2b",
"md5": "a860ff8b038de1ab70706163f4adf955"

Я пробовал кое-что с jq, но далеко не ухожу :(

% jq '.scans[] | "\(.detected)" + "   " + .result' vt-json.txt | grep -v false
"true   Trojan.GenericKD.42992262"
"true   Artemis!A860FF8B038D"
"true   Trojan.Generic.D2900286"
"true   Trojan.GenericKD.42992262"
"true   Trojan.PDF.Generic.O!c"
"true   Trojan.GenericKD.42992262"
"true   Trojan.GenericKD.42992262 (B)"
"true   Artemis"
"true   malware (ai score=86)"
"true   Trojan.GenericKD.42992262"
"true   Trojan.GenericKD.42992262"

А также

jq '. | select( .scans[].detected == true ) | .result ' vt-json.txt
null
null
null
null
null
null
null
null
null
null
null

Заранее благодарю за любую помощь. Эвальд ...

0
beamzer 18 Апр 2020 в 17:16

1 ответ

Лучший ответ

Вы можете получить результат, близкий к тому, что вы показали, но в действительном json с этим.

jq '
    .scans |= with_entries(
        select(.value.detected)
        | .value |= .version + " / " + .update + " / " + .result
    )
' vt-json.txt

{
  "scans": {
    "MicroWorld-eScan": "14.0.409.0 / 20200418 / Trojan.GenericKD.42992262",
    "McAfee": "6.0.6.653 / 20200417 / Artemis!A860FF8B038D",
    "Arcabit": "1.0.0.870 / 20200418 / Trojan.Generic.D2900286",
    "BitDefender": "7.2 / 20200418 / Trojan.GenericKD.42992262",
    "AegisLab": "4.2 / 20200418 / Trojan.PDF.Generic.O!c",
    "Ad-Aware": "3.0.5.370 / 20200418 / Trojan.GenericKD.42992262",
    "Emsisoft": "2018.12.0.1641 / 20200418 / Trojan.GenericKD.42992262 (B)",
    "McAfee-GW-Edition": "v2017.3010 / 20200418 / Artemis",
    "MAX": "2019.9.16.1 / 20200418 / malware (ai score=86)",
    "ALYac": "1.1.1.5 / 20200418 / Trojan.GenericKD.42992262",
    "GData": "A:25.25440B:26.18419 / 20200418 / Trojan.GenericKD.42992262"
  },
  "scan_id": "b2349998571ab733d4ee0ca8a82afa614527aec75679569a91940631851c3d2b-1587213404",
  "sha1": "155f680dfc91b0f90976c0892bb883f7a360e041",
  "resource": "b2349998571ab733d4ee0ca8a82afa614527aec75679569a91940631851c3d2b",
  "response_code": 1,
  "scan_date": "2020-04-18 12:36:44",
  "permalink": "https://www.virustotal.com/file/b2349998571ab733d4ee0ca8a82afa614527aec75679569a91940631851c3d2b/analysis/1587213404/",
  "verbose_msg": "Scan finished, information embedded",
  "total": 61,
  "positives": 11,
  "sha256": "b2349998571ab733d4ee0ca8a82afa614527aec75679569a91940631851c3d2b",
  "md5": "a860ff8b038de1ab70706163f4adf955"
}

Фильтр select(.value.detected) удаляет инструменты, которые ничего не обнаружили, а фильтр .version + " / " + .update + " / " + .result форматирует вывод в случае положительного обнаружения.

0
luciole75w 18 Апр 2020 в 17:18