Willkommen in der Virustotal CLI, einem Tool, das für diejenigen entwickelt wurde, die sowohl virustotale als auch Befehlszeilenschnittstellen lieben. Mit diesem Tool können Sie alles tun, was Sie normalerweise mit der Webseite von Virustotal tun, einschließlich:
Und viel mehr ...
Da dieses Tool die virustotale API unter der Haube verwendet, benötigen Sie einen virustotalen API -Schlüssel. Wenn Sie sich bei Virustotal anmelden, erhalten Sie jedoch einen kostenlosen API -Schlüssel, aber kostenlose API -Schlüssel haben eine begrenzte Anzahl von Anfragen pro Minute und sie haben keinen Zugriff auf einige Premium -Funktionen wie Suchanfragen und Datei -Downloads. Wenn Sie daran interessiert sind, diese Premium -Funktionen zu verwenden, kontaktieren Sie uns bitte.
Es gibt zwei Möglichkeiten, das Tool zu installieren: Durch die Verwendung eines unserer vorgefertigten Binärdateien oder durch Erstellen von selbst.
Die vorgefertigten Binärdateien finden Sie auf der Seite der Veröffentlichungen. Es gibt Binärdateien für Windows, Linux und Mac OS X. Um sie zu verwenden, laden Sie einfach die Datei herunter, dekomprimieren sie und platzieren Sie sie in ein Verzeichnis, in dem Sie der Meinung sind, dass es bequemer zu verwenden ist.
Um das Programm zu kompilieren, benötigen Sie in Ihrem System Go 1.14.x oder höher und geben Sie die folgenden Befehle ein:
$ git clone https://github.com/VirusTotal/vt-cli
$ cd vt-cli
$ make install
Hinweis: Um die vt
-Binärin zu verwenden, stellen Sie sicher, dass das GOBIN
Teil Ihrer PATH
ist:
$ export GOBIN= ` go env GOPATH ` /bin
$ export PATH= $PATH : $GOBIN
Für Mac OS -Benutzer gibt es eine Brauformel. Bitte beachten Sie, dass dies nicht von Virustotal aufrechterhalten wird.
$ brew install virustotal-cli
Für Windows -Benutzer steht ein Winget -Manifest zur Verfügung. Bitte beachten Sie, dass dies nicht von Virustotal aufrechterhalten wird.
winget install VirusTotal.vt - cli
Schokolady wird ebenfalls unterstützt (auch nicht von Virustotal aufrechterhalten):
choco install vt - cli
Wenn Sie regelmäßig vt-cli
in Windows verwenden möchten, empfehlen wir Ihnen dringend, die Standard-Windows-Konsole zu vermeiden und stattdessen Cygwin zu verwenden. Die Windows-Konsole ist beim Drucken großer Textmengen sehr langsam (wie es normalerweise vt-cli
), während Cygwin viel besser abschneidet. Darüber hinaus können Sie von der Unterstützung von Cygwin für die automatische Vervollständigung von Befehl profitieren, einer praktischen Funktion, die die Windows-Konsole nicht bietet. Um die automatische Vervollständigung zu nutzen, achten Sie darauf, dass das bash-completion
-Paket während der Installation von Cygwin einbezieht.
Sobald Sie das VT-CLI-Tool installiert haben, möchten Sie es möglicherweise mit Ihrem API-Schlüssel konfigurieren. -k
ist nicht ausschließlich notwendig, da Sie Ihre API --apikey
jedes Mal, wenn Sie das Tool aufrufen (Und wir wetten, dass du es tun wirst!). Zum Konfigurieren Ihres API -Schlüssels geben Sie einfach:
$ vt init
In diesem Befehl wird nach Ihrem API -Schlüssel gefragt und in einer Konfigurationsdatei in Ihrem Home -Verzeichnis (~/.vt.toml) gespeichert. Sie können Ihren API -Schlüssel auch mit der Umgebungsvariablen VTCLI_APIKEY
angeben. Wenn Sie Ihren API -Schlüssel auf verschiedene Weise angeben, hat die Option --apikey
die höchste Vorrang, gefolgt von der Umgebungsvariablen VTCLI_APIKEY
, der API -Schlüssel in der Konfigurationsdatei wird als letzte Ausweg verwendet.
Wenn Sie hinter einem HTTP-Proxy stehen, können Sie vt-cli
auf verschiedene Weise die Adresse Ihres Proxy-Servers erkennen. Man verwendet die Option --proxy
, wie in:
$ vt --proxy http://myproxy.com:1234 < command >
Sie können auch die VTCLI_PROXY
-Umgebungsvariable verwenden oder der Konfigurationsdatei die folgende Zeile hinzufügen:
proxy= " http://myproxy.com:1234 "
Wenn Sie dieses Tool häufig verwenden möchten, möchten Sie möglicherweise die automatische Vervollständigung des Befehls haben. Es spart sowohl kostbare Zeit als auch Tastenanschläge. Beachten Sie jedoch, dass Sie Ihre API wie im vorherigen Abschnitt beschrieben konfigurieren müssen , bevor Sie den unten aufgeführten Schritten befolgen. Die API ist erforderlich, um die Befehle zu bestimmen, auf die Sie Zugriff haben.
Linux:
$ vt completion bash > /etc/bash_completion.d/vt
Mac OS X:
$ brew install bash-completion
$ vt completion bash > $( brew --prefix ) /etc/bash_completion.d/vt
Fügen Sie ~/.bash_profile
die folgenden Zeilen hinzu:
if [ -f $( brew --prefix ) /etc/bash_completion ] ; then
. $( brew --prefix ) /etc/bash_completion
fi
Cygwin:
Stellen Sie sicher, dass das bash-completion
-Paket installiert ist (Cygwin installiert es nicht standardmäßig) und geben Sie ein:
$ vt completion bash > /usr/share/bash-completion/completions/vt
❗ Möglicherweise müssen Sie Ihre Schale neu starten, damit die Autocompletion mit der Arbeit beginnt.
Das Ausgabeskript von vt completion zsh
muss irgendwo in das $fpath
-Verzeichnis gestellt werden. Zum .oh-my-zsh/completions
.
$ mkdir /Users/ $USERNAME /.oh-my-zsh/completions
$ vt completion zsh > /Users/ $USERNAME /.oh-my-zsh/completions/_vt
Starten Sie die Schale neu.
Informationen zu einer Datei erhalten:
$ vt file 8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85
Erhalten Sie Informationen zu einer Datei im JSON -Format:
$ vt file 8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 --format json
Erhalten Sie einen spezifischen Analysebericht für eine Datei:
$ # File analysis IDs can be given as `f-<file_SHA256_hash>-<UNIX timestamp>`...
$ vt analysis f-8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85-1546309359
$ # ...or as a Base64 encoded string, retrieved from the `vt scan file` command:
$ vt scan file test.txt
test.txt MDJiY2FiZmZmZmQxNmZlMGZjMjUwZjA4Y2FkOTVlMGM6MTU0NjQ1NDUyMA==
$ vt analysis MDJiY2FiZmZmZmQxNmZlMGZjMjUwZjA4Y2FkOTVlMGM6MTU0NjQ1NDUyMA==
- _id: " MDJiY2FiZmZmZmQxNmZlMGZjMjUwZjA4Y2FkOTVlMGM6MTU0NjQ1NDUyMA== "
_type: " analysis "
date: 1546454520 # 2019-01-02 13:42:00 -0500 EST
stats:
failure: 0
harmless: 0
malicious: 0
suspicious: 0
timeout: 0
type-unsupported: 0
undetected: 0
status: " queued "
Laden Sie Dateien mit einer Liste von Hashes in einer Textdatei, einem Hash pro Zeile, herunter:
$ cat /path/list_of_hashes.txt | vt download -
Informationen zu einer URL erhalten:
$ vt url http://www.virustotal.com
Holen Sie sich die IP -Adresse, die eine URL bediente:
$ vt url last_serving_ip_address http://www.virustotal.com
Suche nach Dateien:
$ vt search " positives:5+ type:pdf "
Scannen Sie eine Datei:
$ vt scan file < yourfile >
< yourfile > ZDZiOTcxY2JhNDE0MWU5ZWRjN2JjNGQ2NTdhN2VjODU6MTU3MDE3Mjg1NQ==
$ vt analysis ZDZiOTcxY2JhNDE0MWU5ZWRjN2JjNGQ2NTdhN2VjODU6MTU3MDE3Mjg1NQ==
- _id: " ZDZiOTcxY2JhNDE0MWU5ZWRjN2JjNGQ2NTdhN2VjODU6MTU3MDE3Mjg1NQ== "
_type: " analysis "
date: 1570172855 # 2019-10-04 09:07:35 +0200 CEST
stats:
failure: 0
harmless: 0
malicious: 0
suspicious: 0
timeout: 0
type-unsupported: 0
undetected: 0
status: " queued "
Exportieren von Erkennungen und Tags von Dateien aus einer Suche im CSV -Format:
$ vt search " positives:5+ type:pdf " -i sha256,last_analysis_stats.malicious,tags --format csv
Exportieren Sie Erkennungen und Tags von Dateien aus einer Suche im JSON -Format:
$ vt search " positives:5+ type:pdf " -i sha256,last_analysis_stats.malicious,tags --format json
Wenn Sie nach Informationen zu einer Datei, einer URL, einer Domäne, einer IP -Adresse oder einem anderen Objekt in Virustotal fragen, erhalten Sie viele Daten (standardmäßig im YAML -Format), die normalerweise mehr als das sind, was Sie benötigen. Sie können die vom VT -CLI -Tool angezeigten Informationen eingrenzen, indem Sie die Befehlszeilenoptionen --include
und --exclude
in Kurzform verwenden ( -i
und -x
).
Diese Optionen akzeptieren Muster, die mit den Feldern übereinstimmen, die die Daten verfassen, und ermöglichen es Ihnen, nur eine Teilmenge davon aufzunehmen oder ein für Sie nicht interessantes Feld auszuschließen. Mal sehen, wie es mit den Daten funktioniert, die wir über http://www.virustotal.com
haben, als Beispiel:
$ vt url http://www.virustotal.com
- _id: 1db0ad7dbcec0676710ea0eaacd35d5e471d3e11944d53bcbd31f0cbd11bce31
_type: " url "
first_submission_date: 1275391445 # 2010-06-01 13:24:05 +0200 CEST
last_analysis_date: 1532442650 # 2018-07-24 16:30:50 +0200 CEST
last_analysis_results:
ADMINUSLabs:
category: " harmless "
engine_name: " ADMINUSLabs "
result: " clean "
AegisLab WebGuard:
category: " harmless "
engine_name: " AegisLab WebGuard "
result: " clean "
AlienVault:
category: " harmless "
engine_name: " AlienVault "
result: " clean "
last_http_response_code: 200
last_http_response_content_length: 7216
last_http_response_content_sha256: " 7ed66734d9fb8c5a922fffd039c1cd5d85f8c2bb39d14803983528437852ba94 "
last_http_response_headers:
age: " 26 "
cache-control: " public, max-age=60 "
content-length: " 7216 "
content-type: " text/html "
date: " Tue, 24 Jul 2018 14:30:24 GMT "
etag: " " bGPKJQ " "
expires: " Tue, 24 Jul 2018 14:31:24 GMT "
server: " Google Frontend "
x-cloud-trace-context: " 131ac6cb5e2cdb7970d54ee42fd5ce4a "
x-frame-options: " DENY "
last_submission_date: 1532442650 # 2018-07-24 16:30:50 +0200 CEST
private: false
reputation: 1484
times_submitted: 213227
total_votes:
harmless: 660
malicious: 197
Beachten Sie, dass die zurückgegebenen Daten normalerweise einer hierarchischen Struktur folgen, mit einigen Feldern auf höchster Ebene, die möglicherweise Teilfelder enthalten, die wiederum ihre eigenen Unterfelder enthalten können. Im obigen Beispiel last_http_response_headers
hat age
, cache-control
, content-length
usw. Subfelder, während total_votes
harmless
und malicious
ist. Um sich auf ein bestimmtes Feld innerhalb der Hierarchie zu beziehen, können wir einen Pfad verwenden, ähnlich wie wir eine Datei in unseren Computern identifizieren. der Schrägstriche (oder Backslashes), die von den meisten Dateisystemen verwendet werden. Die folgenden sind gültige Pfade für unsere Beispielstruktur:
last_http_response_headers.age
total_votes.harmless
last_analysis_results.ADMINUSLabs.category
last_analysis_results.ADMINUSLabs.engine_name
Die von --include
als auch --exclude
Filter, sind Pfade, auf denen wir *
und **
als Platzhalter für ein bzw. viele Pfadelemente verwenden können. foo.bar.baz
foo.bar.baz.qux
foo.*
Passt foo.bar
foo.bar
aber nicht foo.bar.baz
, während foo.**
foo.bar.baz.qux
entspricht foo.*.qux
entspricht foo.bar.qux
und foo.baz.qux
, aber nicht foo.bar.baz.qux
, während foo.**.qux
Pfad beginnend mit foo
und endet mit qux
.
Für Kirschpicking nur die gewünschten Felder sollten Sie verwenden --include
, gefolgt von einem Pfadmuster, wie oben erläutert. Sie können auch mehr als ein Muster einfügen, indem Sie das Argument --include
Argument mehrmals verwenden, oder indem Sie es mit einer von Kommas getrennten Liste von Mustern verwenden. Die folgenden zwei Optionen sind gleichwertig:
$ vt url http://www.virustotal.com --include=reputation --include=total_votes. *
$ vt url http://www.virustotal.com --include=reputation,total_votes. *
Hier haben Sie verschiedene Beispiele mit ihren Ausgängen (vorausgesetzt, vt url http://www.virustotal.com
gibt die oben gezeigte Struktur zurück):
$ vt url http://www.virustotal.com --include=last_http_response_headers.server
- last_http_response_headers:
server: " Google Frontend "
$ vt url http://www.virustotal.com --include=last_http_response_headers. *
- last_http_response_headers:
age: " 26 "
cache-control: " public, max-age=60 "
content-length: " 7216 "
content-type: " text/html "
date: " Tue, 24 Jul 2018 14:30:24 GMT "
etag: " " bGPKJQ " "
expires: " Tue, 24 Jul 2018 14:31:24 GMT "
server: " Google Frontend "
x-cloud-trace-context: " 131ac6cb5e2cdb7970d54ee42fd5ce4a "
x-frame-options: " DENY "
$ vt url http://www.virustotal.com --include=last_analysis_results. **
- last_analysis_results:
ADMINUSLabs:
category: " harmless "
engine_name: " ADMINUSLabs "
result: " clean "
AegisLab WebGuard:
category: " harmless "
engine_name: " AegisLab WebGuard "
result: " clean "
AlienVault:
category: " harmless "
engine_name: " AlienVault "
result: " clean "
$ vt url http://www.virustotal.com --include=last_analysis_results. * .result
- last_analysis_results:
ADMINUSLabs:
result: " clean "
AegisLab WebGuard:
result: " clean "
AlienVault:
result: " clean "
$ vt url http://www.virustotal.com --include= ** .result
- last_analysis_results:
ADMINUSLabs:
result: " clean "
AegisLab WebGuard:
result: " clean "
AlienVault:
result: " clean "
Beachten Sie auch, dass _id
und _type
auch Feldnamen sind und Sie sie daher in Ihren Filtern verwenden können:
$ vt url http://www.virustotal.com --include=_id,_type, ** .result
- _id: " 1db0ad7dbcec0676710ea0eaacd35d5e471d3e11944d53bcbd31f0cbd11bce31 "
_type: " file "
last_analysis_results:
ADMINUSLabs:
result: " clean "
AegisLab WebGuard:
result: " clean "
AlienVault:
result: " clean "
Die Option --exclude
Option funktioniert ähnlich wie --include
, aber anstatt die passenden Felder in die Ausgabe aufzunehmen, enthält sie alles außer den passenden Feldern. Sie können diese Option verwenden, wenn Sie die meisten Felder behalten möchten, aber einige von ihnen weglassen, die nicht interessant sind. Wenn Sie --include
und --exclude
ausschließlich --include
Aktion verwenden, einschließlich nur der Felder, die mit den --include
Mustern übereinstimmen, während --exclude
danach kommt und ein verbleibendes Feld entfernen, das mit dem exklusigen --exclude
übereinstimmt, entfernen Muster.