[PYTHON] So erhalten Sie mithilfe der API von Virus Total einen Beispielbericht aus einem Hashwert

Einführung

Ich habe die Hashwertinformationen der Probe zur Hand, aber es ist zu viel, um sie manuell zu untersuchen. Deshalb habe ich ein Programm erstellt, das die Berichtsinformationen automatisch von Virus Total abruft. Das Programm wurde erstellt und für die Arbeit mit Python3 bestätigt. Es gibt viele ähnliche Artikel, aber ich habe beschlossen, einen Artikel zu erstellen, da er im Python 2-System oder etwas anders als das Beispiel des offiziellen Dokuments geschrieben ist.

Virus Total bietet eine API, wie in der Referenz beschrieben, sodass es effizient ist, die API zum Abrufen von Informationen zu verwenden. Der Virus Total API-Schlüssel kann kostenlos durch Erstellen eines Kontos bezogen werden. Seien Sie vorsichtig beim Veröffentlichen oder Freigeben, wenn Sie das Programm fest codieren, da es missbraucht werden kann, wenn es an Dritte weitergegeben wird. (Wenn Sie es nur verwenden, können Sie es hart codieren. Wenn Sie jedoch die externe Offenlegung berücksichtigen, ist es möglicherweise sicherer, es extern einzugeben.)

Programm

Ich habe es mit dem folgenden Inhalt gemäß dem offiziellen Dokument erstellt. Beschreiben Sie für den API-Schlüsselteil Ihren eigenen API-Schlüsselwert. (Wie oben erwähnt, ist auch die Form der externen Eingabe akzeptabel.)

Zusätzlich wird dieses Programm implementiert, indem die Hashwertinformationen des Beispiels aus einer anderen Textdatei empfangen werden. Bitte implementieren Sie es auf eine Weise, die einfach zu bewerkstelligen ist, unabhängig davon, ob Sie es fest codieren oder zur Laufzeit als Argument verwenden möchten.

get_vt.py


import sys
import json
import time
import requests

url = 'https://www.virustotal.com/vtapi/v2/file/report'

count = 0
file = open('hash.txt', 'r')
for hash in file:
    params = {'apikey': 'your api key value', 'resource': hash}
    response = requests.get(url, params=params)
    print(response.json())
    count = count + 1
    if count % 4 == 0:
        time.sleep(65)
file.close()

Wie ich oft höre, scheinen Zugriffsbeschränkungen anzuwenden zu sein, wenn Sie zeitweise auf die API zugreifen, und bei Virus Total habe ich Gerüchte gehört, dass es notwendig ist, 60 Sekunden nach viermal zu verlassen. Ich versuche, den Vorgang alle vier Male für 65 Sekunden zu stoppen.

Ausführungsmethode

Es ist nur ein Python-Skript, also führen Sie es folgendermaßen aus. Das Ergebnis wird im JSON-Format zurückgegeben. Geben Sie es daher in eine JSON-Datei aus.

get_vt.Wie man py läuft


$ python3 get_vt.py > vt_result.json

Das folgende ist das Erfassungsergebnis bei der Suche mit dem Hashwert a5a0420200af84fdb5674569f1a8eafe7ef7b41b. Nach dem Namen des Antivirenprodukts wird das Ergebnis der Malware-Beurteilung als wahr oder falsch in erkannt beschrieben. Es scheint, dass Sie auch den Malware-Namen erhalten können, und soweit Sie sehen können, sieht es aus wie Mirai.

Akquisitionsergebnis


{'scans': {'Bkav': {'detected': False, 'version': '1.3.0.9899', 'result': None, 'update': '20200819'}, 'MicroWorld-eScan': {'detected': False, 'version': '14.0.409.0', 'result': None, 'update': '20200820'}, 'FireEye': {'detected': True, 'version': '32.36.1.0', 'result': 'Trojan.Linux.Mirai.1', 'update': '20200820'}, 'CAT-QuickHeal': {'detected': False, 'version': '14.00', 'result': None, 'update': '20200820'}, 'McAfee': {'detected': True, 'version': '6.0.6.653', 'result': 'RDN/Generic BackDoor', 'update': '20200820'}, 'Malwarebytes': {'detected': False, 'version': '3.6.4.335', 'result': None, 'update': '20200820'}, 'Zillya': {'detected': True, 'version': '2.0.0.4158', 'result': 'Backdoor.Mirai.Linux.91998', 'update': '20200820'}, 'SUPERAntiSpyware': {'detected': False, 'version': '5.6.0.1032', 'result': None, 'update': '20200814'}, 'Sangfor': {'detected': False, 'version': '1.0', 'result': None, 'update': '20200814'}, 'K7AntiVirus': {'detected': False, 'version': '11.131.35049', 'result': None, 'update': '20200820'}, 'K7GW': {'detected': False, 'version': '11.131.35050', 'result': None, 'update': '20200820'}, 'Baidu': {'detected': False, 'version': '1.0.0.2', 'result': None, 'update': '20190318'}, 'F-Prot': {'detected': False, 'version': '4.7.1.166', 'result': None, 'update': '20200820'}, 'Symantec': {'detected': True, 'version': '1.11.0.0', 'result': 'Trojan.Gen.NPE', 'update': '20200820'}, 'ESET-NOD32': {'detected': True, 'version': '21852', 'result': 'a variant of Linux/Mirai.OX', 'update': '20200820'}, 'TrendMicro-HouseCall': {'detected': False, 'version': '10.0.0.1040', 'result': None, 'update': '20200820'}, 'Avast': {'detected': True, 'version': '18.4.3895.0', 'result': 'Other:Malware-gen [Trj]', 'update': '20200820'}, 'ClamAV': {'detected': True, 'version': '0.102.4.0', 'result': 'Unix.Dropper.Mirai-7135870-0', 'update': '20200817'}, 'Kaspersky': {'detected': True, 'version': '15.0.1.13', 'result': 'HEUR:Backdoor.Linux.Mirai.b', 'update': '20200820'}, 'BitDefender': {'detected': True, 'version': '7.2', 'result': 'Trojan.Linux.Mirai.1', 'update': '20200820'}, 'NANO-Antivirus': {'detected': True, 'version': '1.0.134.25140', 'result': 'Trojan.Mirai.hrbzkk', 'update': '20200820'}, 'ViRobot': {'detected': False, 'version': '2014.3.20.0', 'result': None, 'update': '20200820'}, 'Tencent': {'detected': True, 'version': '1.0.0.1', 'result': 'Backdoor.Linux.Mirai.wao', 'update': '20200820'}, 'Ad-Aware': {'detected': False, 'version': '3.0.16.117', 'result': None, 'update': '20200820'}, 'TACHYON': {'detected': False, 'version': '2020-08-20.02', 'result': None, 'update': '20200820'}, 'Comodo': {'detected': True, 'version': '32668', 'result': '.UnclassifiedMalware@0', 'update': '20200728'}, 'F-Secure': {'detected': True, 'version': '12.0.86.52', 'result': 'Malware.LINUX/Mirai.lpnjw', 'update': '20200820'}, 'DrWeb': {'detected': True, 'version': '7.0.46.3050', 'result': 'Linux.Mirai.671', 'update': '20200820'}, 'VIPRE': {'detected': False, 'version': '86068', 'result': None, 'update': '20200820'}, 'TrendMicro': {'detected': True, 'version': '11.0.0.1006', 'result': 'Backdoor.Linux.MIRAI.USELVH120', 'update': '20200820'}, 'CMC': {'detected': False, 'version': '2.7.2019.1', 'result': None, 'update': '20200820'}, 'Sophos': {'detected': True, 'version': '4.98.0', 'result': 'Linux/DDoS-CIA', 'update': '20200819'}, 'Cyren': {'detected': False, 'version': '6.3.0.2', 'result': None, 'update': '20200820'}, 'Jiangmin': {'detected': False, 'version': '16.0.100', 'result': None, 'update': '20200820'}, 'Avira': {'detected': True, 'version': '8.3.3.8', 'result': 'LINUX/Mirai.lpnjw', 'update': '20200820'}, 'Fortinet': {'detected': True, 'version': '6.2.142.0', 'result': 'ELF/DDoS.CIA!tr', 'update': '20200820'}, 'Antiy-AVL': {'detected': False, 'version': '3.0.0.1', 'result': None, 'update': '20200820'}, 'Kingsoft': {'detected': False, 'version': '2013.8.14.323', 'result': None, 'update': '20200820'}, 'Arcabit': {'detected': True, 'version': '1.0.0.877', 'result': 'Trojan.Linux.Mirai.1', 'update': '20200820'}, 'AegisLab': {'detected': True, 'version': '4.2', 'result': 'Trojan.Linux.Mirai.K!c', 'update': '20200820'}, 'AhnLab-V3': {'detected': False, 'version': '3.18.1.10026', 'result': None, 'update': '20200820'}, 'ZoneAlarm': {'detected': True, 'version': '1.0', 'result': 'HEUR:Backdoor.Linux.Mirai.b', 'update': '20200820'}, 'Avast-Mobile': {'detected': False, 'version': '200820-00', 'result': None, 'update': '20200820'}, 'Microsoft': {'detected': True, 'version': '1.1.17300.4', 'result': 'Trojan:Win32/Skeeyah.A!rfn', 'update': '20200820'}, 'Cynet': {'detected': True, 'version': '4.0.0.24', 'result': 'Malicious (score: 85)', 'update': '20200815'}, 'TotalDefense': {'detected': False, 'version': '37.1.62.1', 'result': None, 'update': '20200820'}, 'BitDefenderTheta': {'detected': False, 'version': '7.2.37796.0', 'result': None, 'update': '20200819'}, 'ALYac': {'detected': False, 'version': '1.1.1.5', 'result': None, 'update': '20200820'}, 'MAX': {'detected': True, 'version': '2019.9.16.1', 'result': 'malware (ai score=89)', 'update': '20200820'}, 'VBA32': {'detected': False, 'version': '4.4.1', 'result': None, 'update': '20200819'}, 'Zoner': {'detected': False, 'version': '0.0.0.0', 'result': None, 'update': '20200819'}, 'Rising': {'detected': True, 'version': '25.0.0.26', 'result': 'Backdoor.Mirai/Linux!1.BAF6 (CLASSIC)', 'update': '20200820'}, 'Yandex': {'detected': False, 'version': '5.5.2.24', 'result': None, 'update': '20200707'}, 'Ikarus': {'detected': True, 'version': '0.1.5.2', 'result': 'Trojan.Linux.Mirai', 'update': '20200820'}, 'MaxSecure': {'detected': False, 'version': '1.0.0.1', 'result': None, 'update': '20200819'}, 'GData': {'detected': True, 'version': 'A:25.26670B:27.19869', 'result': 'Trojan.Linux.Mirai.1', 'update': '20200820'}, 'AVG': {'detected': True, 'version': '18.4.3895.0', 'result': 'Other:Malware-gen [Trj]', 'update': '20200820'}, 'Panda': {'detected': False, 'version': '4.6.4.2', 'result': None, 'update': '20200819'}, 'Qihoo-360': {'detected': True, 'version': '1.0.0.1120', 'result': 'Linux/Backdoor.6f4', 'update': '20200820'}}, 'scan_id': '0aa5949d00c05b62cb5e9ac24f11b08cd5ed13f089b628220d6cc27b5147230c-1597909074', 'sha1': 'a5a0420200af84fdb5674569f1a8eafe7ef7b41b', 'resource': '0aa5949d00c05b62cb5e9ac24f11b08cd5ed13f089b628220d6cc27b5147230c', 'response_code': 1, 'scan_date': '2020-08-20 07:37:54', 'permalink': 'https://www.virustotal.com/gui/file/0aa5949d00c05b62cb5e9ac24f11b08cd5ed13f089b628220d6cc27b5147230c/detection/f-0aa5949d00c05b62cb5e9ac24f11b08cd5ed13f089b628220d6cc27b5147230c-1597909074', 'verbose_msg': 'Scan finished, information embedded', 'total': 59, 'positives': 29, 'sha256': '0aa5949d00c05b62cb5e9ac24f11b08cd5ed13f089b628220d6cc27b5147230c', 'md5': '1e0621f530a9f1cb000d670c54a789c9'}

Zusammenfassung

Ich habe ein Programm erstellt, um Berichtsinformationen aus Hashwerten mithilfe der API von Virus Total abzurufen. In Zukunft werden wir überlegen, wie die erhaltenen Ausgabeinformationen und andere APIs verwendet werden.

Verweise

Recommended Posts

So erhalten Sie mithilfe der API von Virus Total einen Beispielbericht aus einem Hashwert
So erhalten Sie mithilfe der Mastodon-API Follower und Follower von Python
So erhalten Sie Artikeldaten mithilfe der Qiita-API
[Rails] So erhalten Sie Standortinformationen mithilfe der Geolocation-API
So veröffentlichen Sie ein Ticket über die Shogun-API
So erhalten Sie die Temperatur vom SwitchBot-Thermo-Hygrometer mit Himbeer-Pi
So erhalten Sie eine Liste mit Links von einer Seite aus Wikipedia
So erhalten Sie mit einer vielseitigen Methode nur die erforderlichen Daten aus der strukturierten Datengruppe
So erhalten Sie eine Zeichenfolge aus einem Befehlszeilenargument in Python
[Python] So erhalten und ändern Sie Zeilen / Spalten / Werte aus einer Tabelle.
Verwendung der visuellen Erkennung, um die LINE ID von einem Mädchen zu erhalten
[Python] So erhalten Sie mit Enum einen Wert mit einem anderen Schlüssel als dem Wert
So bekommen Sie einen Ingenieur aus Ihren 30ern
So zeichnen Sie ein Diagramm mit Matplotlib
So installieren Sie ein Paket mithilfe eines Repositorys
So erstellen Sie ein Repository aus Medien
So finden Sie den Ansichtsnamen mit dem Namespace über die URL (path_info) in Django
So zeigen Sie eine Karte mit der Google Map API (Android) an
So codieren Sie eine Drohne mithilfe der Bilderkennung
So öffnen Sie einen Webbrowser über Python
So erstellen Sie ein Funktionsobjekt aus einer Zeichenfolge
So erhalten Sie Ergebnisse von id in Celery
So rufen Sie die Cloud-API über GCP-Cloud-Funktionen auf
So extrahieren Sie den Koeffizienten aus der Minutenformel
Beispiel zum Zeichnen einer einfachen Uhr mit ebiten
Generieren Sie Hash-Werte mit der HMAC-Methode.
So erstellen Sie eine Rest-API in Django
Hochladen auf ein freigegebenes Laufwerk mit pydrive
So deinstallieren Sie ein mit setup.py installiertes Modul
[PyTorch] Beispiel ⑧ ~ So erstellen Sie ein komplexes Modell ~
Eine Geschichte über einen Python-Anfänger, der versucht, Google-Suchergebnisse mithilfe der API abzurufen
So erstellen Sie mit Python ein radiales Profil aus astronomischen Bildern (Chandra, XMM usw.)
So richten Sie eine Python-Umgebung mit pyenv ein
So erhalten Sie einen angemeldeten Benutzer mit Djangos forms.py
PUSH-Benachrichtigung von Python an Android mithilfe der Google-API
So erstellen Sie ein Python-Paket mit VS Code
Analysieren mit Google Colaboratory mithilfe der Kaggle-API
So nehmen Sie ein aufgenommenes Bild aus einem Video auf (OpenCV)
So führen Sie einen Befehl mit einem Unterprozess in Python aus
[Python] So rufen Sie eine Funktion von c aus Python auf (ctypes edition)
[Linux] [C / C ++] So ermitteln Sie den Wert der Rücksprungadresse einer Funktion und den Funktionsnamen des Aufrufers
So erstellen Sie eine Instanz einer bestimmten Klasse aus dict mit __new__ () in Python
So ermitteln Sie die durchschnittliche Informationsmenge (Entropie) der ursprünglichen Wahrscheinlichkeitsverteilung aus der Stichprobe
So führen Sie ein Python-Programm in einem Shell-Skript aus
Zurücksetzen des Passworts über die API mit dem Django Rest Framework
So starten Sie AWS Batch über die Python-Client-App
So verschieben Sie ein zweidimensionales Array nur mit Python [Hinweis]
So generieren Sie einen öffentlichen Schlüssel aus einem privaten SSH-Schlüssel
Ich habe versucht "Wie man eine Methode in Python dekoriert"
So ersetzen Sie eine Teilübereinstimmung durch einen numerischen Wert (Anmerkung 1)
So generieren Sie eine Abfrage mit dem IN-Operator in Django
So verbergen Sie den Google Maps-API-Schlüssel vor HTML
Wie man aus einer Wahrscheinlichkeitsdichtefunktion in Python tastet
So erhalten Sie eine Liste der integrierten Ausnahmen für Python
Ich habe versucht, verschiedene Informationen von der Codeforces-API abzurufen
Ich habe versucht, mit pypyodbc schnell Daten von AS / 400 abzurufen
Extrahieren Sie den Wert, der einem Wert am nächsten kommt, aus einem Listenelement in Python
So erhalten Sie den Pixelwert des Punkts aus dem Satellitenbild, indem Sie den Breiten- und Längengrad angeben