Memindai file atau hash secara otomatis menggunakan VirusTotal API v3 dalam bahasa pemrograman Python memerlukan pustaka requests dan kunci API resmi (API Key) dari akun VirusTotal Anda. Skrip ini dirancang untuk mengunggah file berukuran di bawah 32MB, memeriksa status pemindaian, dan menarik laporan analisis secara langsung ke terminal Anda.
Sebelum menjalankan kode di bawah ini, pastikan Anda telah menginstal pustaka yang dibutuhkan melalui terminal dengan perintah pip install requests serta menyiapkan variabel lingkungan untuk API key demi keamanan kredensial akun Anda.
Persiapan dan Kode Sumber Python
Berikut adalah skrip Python yang berfungsi untuk mengunggah file ke endpoint API v3 VirusTotal, mengambil ID analisis, dan menampilkan hasil deteksi dari berbagai mesin antivirus.
import os
import time
import requests
API_KEY = os.getenv('VT_API_KEY', 'MASUKKAN_API_KEY_ANDA_DISINI')
HEADERS = {
'x-apikey': API_KEY
}
def scan_file(file_path):
url = 'https://www.virustotal.com/api/v3/files'
if not os.path.exists(file_path):
print(f"File tidak ditemukan: {file_path}")
return
print(f"Mengunggah {file_path} ke VirusTotal...")
with open(file_path, 'rb') as f:
files = {'file': (os.path.basename(file_path), f)}
response = requests.post(url, headers=HEADERS, files=files)
if response.status_code == 200:
result = response.json()
analysis_id = result['data']['id']
print(f"File berhasil diunggah. Analysis ID: {analysis_id}")
get_analysis_report(analysis_id)
else:
print(f"Gagal mengunggah file. Status: {response.status_code}, Pesan: {response.text}")
def get_analysis_report(analysis_id):
url = f'https://www.virustotal.com/api/v3/analyses/{analysis_id}'
print("Menunggu hasil analisis...")
while True:
response = requests.get(url, headers=HEADERS)
if response.status_code == 200:
result = response.json()
status = result['data']['attributes']['status']
if status == 'completed':
print("Analisis selesai!")
stats = result['data']['attributes']['stats']
print(f"Hasil Deteksi: {stats}")
break
else:
print(f"Status saat ini: {status}. Menunggu 15 detik...")
time.sleep(15)
else:
print(f"Gagal mengambil laporan. Status: {response.status_code}")
break
if __name__ == '__main__':
target_file = 'path/ke/file/target.exe'
scan_file(target_file)
Parameter dan Batasan API v3 VirusTotal
VirusTotal menerapkan pembatasan akses (rate limit) terutama pada akun gratis (free tier). Memahami parameter ini penting agar skrip Anda tidak terkena blokir sementara akibat terlalu banyak permintaan dalam waktu singkat.
| Parameter | Free Tier (Publik) | Premium Tier |
|---|---|---|
| Batas Permintaan | 4 permintaan per menit | Disesuaikan paket langganan |
| Ukuran Maksimal File | 32 MB | Hingga 650 MB |
| Metode Pencarian Hash | Didukung (SHA-256, SHA-1, MD5) | Didukung penuh |
| Otomasi Skrip | Terbatas untuk pengujian/personal | Optimal untuk integrasi SOC / SIEM |
Langkah Eksekusi dan Troubleshooting
Untuk menjalankan skrip dengan lancar, ikuti tahapan operasional berikut di lingkungan lokal Anda:
- Dapatkan kunci API dari halaman profil akun VirusTotal Anda.
- Simpan kunci API sebagai variabel lingkungan dengan perintah
export VT_API_KEY='kunci_anda'di Linux/macOS atau gunakanset VT_API_KEY='kunci_anda'di Command Prompt Windows. - Ganti nilai
target_filepada baris terakhir skrip dengan lokasi absolut atau relatif dari file yang ingin Anda uji. - Jalankan skrip menggunakan terminal:
python nama_skrip.py.
Jika Anda menemui error 429 Too Many Requests, artinya skrip Anda melebihi batas 4 permintaan per menit yang diizinkan oleh kunci API gratis. Tambahkan jeda waktu (time.sleep) yang lebih lama di dalam loop atau gunakan endpoint pencarian berdasarkan hash file (GET /api/v3/files/{id}) alih-alih mengunggah ulang file yang sama.