ยินดีต้อนรับสู่ Virustotal CLI ซึ่งเป็นเครื่องมือที่ออกแบบมาสำหรับผู้ที่ชื่นชอบอินเทอร์เฟซ virustotal และบรรทัดคำสั่ง ด้วยเครื่องมือนี้คุณสามารถทำทุกอย่างที่คุณใช้ตามปกติโดยใช้เว็บเพจของ Virustotal รวมถึง:
และอีกมากมาย ...
เนื่องจากเครื่องมือนี้ใช้ Virustotal API ภายใต้ฮูดคุณจะต้องใช้คีย์ API virustotal ด้วยการลงทะเบียนกับ Virustotal คุณจะได้รับคีย์ API ฟรีอย่างไรก็ตามคีย์ API ฟรีมีคำขอจำนวน จำกัด ต่อนาทีและพวกเขาไม่สามารถเข้าถึงคุณสมบัติพรีเมี่ยมบางอย่างเช่นการค้นหาและการดาวน์โหลดไฟล์ หากคุณสนใจที่จะใช้คุณสมบัติพรีเมี่ยมเหล่านั้นโปรดติดต่อเรา
มีสองวิธีในการติดตั้งเครื่องมือ: โดยใช้หนึ่งในไบนารีที่คอมไพล์ล่วงหน้าของเราหรือโดยการสร้างด้วยตัวเอง
ไบนารีที่คอมไพล์ล่วงหน้าสามารถพบได้ในหน้ารุ่น มีไบนารีสำหรับ Windows, Linux และ Mac OS X เพื่อใช้งานเพียงดาวน์โหลดไฟล์คลายการบีบอัดและวางไว้ในไดเรกทอรีที่คุณคิดว่าสะดวกกว่าที่จะใช้
ในการรวบรวมโปรแกรมคุณจะต้องใช้ 1.14.x หรือสูงกว่าที่ติดตั้งในระบบของคุณและพิมพ์คำสั่งต่อไปนี้:
$ git clone https://github.com/VirusTotal/vt-cli
$ cd vt-cli
$ make install
หมายเหตุ: ในการใช้ไบนารี vt
ตรวจสอบให้แน่ใจว่า GOBIN
เป็นส่วนหนึ่งของตัวแปร PATH
Env ของคุณ:
$ export GOBIN= ` go env GOPATH ` /bin
$ export PATH= $PATH : $GOBIN
สำหรับผู้ใช้ Mac OS มีสูตรการชง โปรดทราบว่านี่ไม่ได้รับการดูแลโดย Virustotal
$ brew install virustotal-cli
สำหรับผู้ใช้ Windows มีรายการปีกมีอยู่ โปรดทราบว่านี่ไม่ได้รับการดูแลโดย Virustotal
winget install VirusTotal.vt - cli
ช็อคโกแลตยังรองรับ (ไม่ได้รับการดูแลโดย virustotal):
choco install vt - cli
หากคุณวางแผนที่จะใช้ vt-cli
ใน Windows เป็นประจำเราขอแนะนำให้คุณหลีกเลี่ยงคอนโซล Windows มาตรฐานและใช้ Cygwin แทน คอนโซล Windows ช้า มาก เมื่อพิมพ์ข้อความจำนวนมาก (ตามที่ vt-cli
มักจะทำ) ในขณะที่ Cygwin ทำงานได้ดีขึ้นมาก นอกจากนี้คุณสามารถได้รับประโยชน์จากการสนับสนุนของ Cygwin สำหรับการเติมคำสั่งอัตโนมัติซึ่งเป็นคุณสมบัติที่มีประโยชน์ที่คอนโซล Windows ไม่ได้เสนอ ในการใช้ประโยชน์จากการทำเสร็จอัตโนมัติตรวจสอบให้แน่ใจว่าได้รวมแพ็คเกจ bash-completion
ในขณะที่ติดตั้ง Cygwin
เมื่อคุณติดตั้งเครื่องมือ VT-CLI แล้วคุณอาจต้องการกำหนดค่าด้วยคีย์ API ของคุณ สิ่งนี้ไม่จำเป็นอย่างเคร่งครัดเนื่องจากคุณสามารถจัดเตรียมคีย์ API ของคุณได้ทุกครั้งที่คุณเรียกใช้เครื่องมือโดยใช้ตัวเลือก --apikey
( -k
ในรูปแบบสั้น ๆ ) แต่นั่นเป็นเรื่องยุ่งยากเล็กน้อยหากคุณจะใช้เครื่องมือบ่อยครั้ง (และเราพนันได้เลยว่าคุณจะทำ!) สำหรับการกำหนดค่าคีย์ API ของคุณเพียงพิมพ์:
$ vt init
คำสั่งนี้จะขอคีย์ API ของคุณและบันทึกลงในไฟล์กำหนดค่าในไดเรกทอรีโฮมไดเรกทอรีของคุณ (~/.vt.toml) นอกจากนี้คุณยังสามารถระบุคีย์ API ของคุณโดยใช้ตัวแปรสภาพแวดล้อม VTCLI_APIKEY
หากคุณระบุคีย์ API ของคุณในหลายวิธีตัวเลือก --apikey
จะมีความสำคัญสูงสุดตามด้วยตัวแปรสภาพแวดล้อม VTCLI_APIKEY
คีย์ API ในไฟล์การกำหนดค่าจะถูกใช้เป็นทางเลือกสุดท้าย
หากคุณอยู่เบื้องหลังพร็อกซี HTTP คุณสามารถบอก vt-cli
ซึ่งเป็นที่อยู่ของพร็อกซีเซิร์ฟเวอร์ของคุณได้หลายวิธี หนึ่งคือการใช้ตัวเลือก --proxy
เช่นใน:
$ vt --proxy http://myproxy.com:1234 < command >
นอกจากนี้คุณยังสามารถใช้ตัวแปรสภาพแวดล้อม VTCLI_PROXY
หรือเพิ่มบรรทัดต่อไปนี้ในไฟล์กำหนดค่า:
proxy= " http://myproxy.com:1234 "
หากคุณกำลังจะใช้เครื่องมือนี้บ่อยครั้งคุณอาจต้องการให้เสร็จสิ้นคำสั่งอัตโนมัติ ช่วยประหยัดทั้งเวลาอันมีค่าและการกดแป้นพิมพ์ อย่างไรก็ตามโปรดแจ้งให้ทราบว่าคุณต้องกำหนดค่า API ของคุณตามที่อธิบายไว้ในส่วนก่อนหน้า ก่อน ทำตามขั้นตอนด้านล่าง API เป็นสิ่งจำเป็นสำหรับการพิจารณาคำสั่งที่คุณจะสามารถเข้าถึงได้
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
เพิ่มบรรทัดต่อไปนี้เป็น ~/.bash_profile
:
if [ -f $( brew --prefix ) /etc/bash_completion ] ; then
. $( brew --prefix ) /etc/bash_completion
fi
Cygwin:
ตรวจสอบให้แน่ใจว่ามีการติดตั้งแพ็คเกจ bash-completion
(Cygwin ไม่ติดตั้งตามค่าเริ่มต้น) และพิมพ์:
$ vt completion bash > /usr/share/bash-completion/completions/vt
❗คุณอาจต้องรีสตาร์ทเชลล์ของคุณเพื่อให้การเติมเงินอัตโนมัติเริ่มทำงาน
สคริปต์เอาท์พุทจาก vt completion zsh
จะต้องวางไว้ที่ไหนสักแห่งภายใต้ไดเรกทอรี $fpath
ตัวอย่างเช่น. .oh-my-zsh/completions
directory:
$ mkdir /Users/ $USERNAME /.oh-my-zsh/completions
$ vt completion zsh > /Users/ $USERNAME /.oh-my-zsh/completions/_vt
รีสตาร์ทเชลล์
รับข้อมูลเกี่ยวกับไฟล์:
$ vt file 8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85
รับข้อมูลเกี่ยวกับไฟล์ในรูปแบบ JSON:
$ vt file 8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 --format json
รับรายงานการวิเคราะห์เฉพาะสำหรับไฟล์:
$ # 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 "
ดาวน์โหลดไฟล์ที่ได้รับรายการแฮชในไฟล์ข้อความหนึ่งแฮชต่อบรรทัด:
$ cat /path/list_of_hashes.txt | vt download -
รับข้อมูลเกี่ยวกับ URL:
$ vt url http://www.virustotal.com
รับที่อยู่ IP ที่ให้บริการ URL:
$ vt url last_serving_ip_address http://www.virustotal.com
ค้นหาไฟล์:
$ vt search " positives:5+ type:pdf "
สแกนไฟล์:
$ 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 "
การตรวจจับการส่งออกและแท็กของไฟล์จากการค้นหาในรูปแบบ CSV:
$ vt search " positives:5+ type:pdf " -i sha256,last_analysis_stats.malicious,tags --format csv
การตรวจจับการส่งออกและแท็กของไฟล์จากการค้นหาในรูปแบบ JSON:
$ vt search " positives:5+ type:pdf " -i sha256,last_analysis_stats.malicious,tags --format json
เมื่อคุณขอข้อมูลเกี่ยวกับไฟล์, URL, โดเมน, ที่อยู่ IP หรือวัตถุอื่น ๆ ใน virustotal คุณจะได้รับข้อมูลจำนวนมาก (โดยค่าเริ่มต้นในรูปแบบ YAML) ซึ่งมักจะมากกว่าสิ่งที่คุณต้องการ คุณสามารถ จำกัด ข้อมูลที่แสดงโดยเครื่องมือ VT -CLI โดยใช้ --include
และ --exclude
เลือกบรรทัดคำสั่ง ( -i
และ -x
ในรูปแบบสั้น)
ตัวเลือกเหล่านี้ยอมรับรูปแบบที่จับคู่กับฟิลด์ที่เขียนข้อมูลและอนุญาตให้คุณรวมเฉพาะชุดย่อยของพวกเขาหรือยกเว้นฟิลด์ใด ๆ ที่ไม่น่าสนใจสำหรับคุณ มาดูกันว่ามันทำงานอย่างไรโดยใช้ข้อมูลที่เรามีเกี่ยวกับ http://www.virustotal.com
เป็นตัวอย่าง:
$ 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
ขอให้สังเกตว่าข้อมูลที่ส่งคืนมักจะเป็นไปตามโครงสร้างแบบลำดับชั้นโดยมีเขตข้อมูลระดับบนสุดที่อาจมีฟิลด์ย่อยซึ่งสามารถมีฟิลด์ย่อยของตัวเองได้ ในตัวอย่างด้านบน last_http_response_headers
age
ย่อย cache-control
content-length
และอื่น ๆ ในขณะที่ total_votes
มี harmless
และ malicious
สำหรับการอ้างถึงฟิลด์เฉพาะภายในลำดับชั้นเราสามารถใช้เส้นทางได้คล้ายกับวิธีที่เราระบุไฟล์ในคอมพิวเตอร์ของเรา แต่ในกรณีนี้เราจะใช้อักขระจุด (.) เป็นตัวคั่นสำหรับส่วนประกอบพา ธ แทน ของ slashes (หรือ backslashes) ที่ใช้โดยระบบไฟล์ส่วนใหญ่ เส้นทางต่อไปนี้เป็นเส้นทางที่ถูกต้องสำหรับโครงสร้างตัวอย่างของเรา:
last_http_response_headers.age
total_votes.harmless
last_analysis_results.ADMINUSLabs.category
last_analysis_results.ADMINUSLabs.engine_name
ตัวกรองที่ได้รับการยอมรับจากทั้งสอง --include
และ --exclude
เป็นเส้นทางที่เราสามารถใช้ *
และ **
เป็นตัวยึดตำแหน่งสำหรับองค์ประกอบเส้นทางหนึ่งและหลายเส้นทางตามลำดับ ตัวอย่างเช่น foo.*
ตรงกับ foo.bar
แต่ไม่ใช่ foo.bar.baz
ในขณะที่ foo.**
ตรงกับ foo.bar
, foo.bar.baz
และ foo.bar.baz.qux
ในทางกลับกัน foo.*.qux
จับคู่ foo.bar.qux
และ foo.baz.qux
แต่ไม่ใช่ foo.bar.baz.qux
ในขณะที่ foo.**.qux
ตรงกับ foo.bar.baz.qux
และอื่น ๆ เส้นทางเริ่มต้นด้วย foo
และลงท้ายด้วย qux
สำหรับการเลือกเชอร์รี่เฉพาะฟิลด์ที่คุณต้องการคุณควรใช้ --include
รวมตามด้วยรูปแบบเส้นทางตามที่อธิบายไว้ข้างต้น นอกจากนี้คุณยังสามารถรวมรูปแบบมากกว่าหนึ่งรูปแบบโดยใช้ --include
รวมถึงอาร์กิวเมนต์หลายครั้งหรือใช้กับรายการรูปแบบที่คั่นด้วยเครื่องหมายจุลภาค สองตัวเลือกต่อไปนี้เทียบเท่า:
$ vt url http://www.virustotal.com --include=reputation --include=total_votes. *
$ vt url http://www.virustotal.com --include=reputation,total_votes. *
ที่นี่คุณมีตัวอย่างที่แตกต่างกับผลลัพธ์ของพวกเขา (สมมติว่า vt url http://www.virustotal.com
ส่งคืนโครงสร้างที่แสดงด้านบน):
$ 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 "
นอกจากนี้โปรดสังเกตว่า _id
และ _type
เป็นชื่อฟิลด์และดังนั้นคุณสามารถใช้ในตัวกรองของคุณ:
$ 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 "
--exclude
ตัวเลือก exclude ทำงานได้เช่นเดียวกับ --include
แต่แทนที่จะรวมฟิลด์การจับคู่ในเอาต์พุตมันรวมทุกอย่างยกเว้นฟิลด์การจับคู่ คุณสามารถใช้ตัวเลือกนี้เมื่อคุณต้องการเก็บฟิลด์ส่วนใหญ่ แต่ทิ้งไว้สองสามตัวที่ไม่น่าสนใจ หากคุณใช้ --include
และ --exclude
กัน --include
ถึงเข้าสู่การดำเนินการก่อนรวมถึงเฉพาะฟิลด์ที่ตรงกับ --include
รวมถึงรูปแบบรวมในขณะ --exclude
--exclude
เข้ามาหลังจากนั้นลบฟิลด์ที่เหลืออยู่ รูปแบบ