我安装了VT::API
cpan模块,声称可以使用Virustotal公共API轻松发送文件和接收报告。不幸的是,文档非常通用,我甚至找不到一个关于如何使用它的简单示例。到目前为止,我有:
use VT::API;
$num_args = $#ARGV + 1;
if ($num_args != 1) {
print "\nNo file specified\n\n";
exit;
}
$file_name=$ARGV[0];
# OO-interface.
my $api = VT::API->new(key => '<===== my API key =====>');
# Send and scan a file.
my $res2 = $api->scan_file("$file_name");
这没有错误,但我尝试打印$res2
并获得空白输出。
我试过了:
# Retrieve a file scan report.
# If query successfull hash reference returned.
# my $res1 = $api->get_file_report('md5/sha1/sha256 or permalink identifier');
my $res1 = $api->get_file_report($res2);
但获得You have not specified a resource (md5/sha1/sha256 or permalink identifier)
。
所以我想我的问题是,你如何获得提交文件的md5/sha1/sha256 or permalink identifier
以及$res1
采用的形式?我需要能够显示结果。
答案 0 :(得分:0)
使用像Crypt::Digest::SHA256之类的模块来计算文件的sha256,并在get_file_report调用中使用该哈希
答案 1 :(得分:0)
VT :: API有效,但文档似乎存在一个问题。
我首先要说的是,我不知道为什么$res
应该打印为空白。
它应该是哈希。
哈希的一个关键是“报告”。这可能包含你想要的东西。
'report'的值是一个数组,包含另一个哈希,包含返回的任何匹配项。
如果您的文件扫描干净,哈希将非常无聊,只是一个AV供应商列表。
有时您需要等待一段时间才能获得结果 - 请使用get_file_report()
,不要继续重新提交相同的文件。
如果您的文件生成匹配,则哈希将更有趣。
例如,扫描EICAR会返回如下内容:
'result' => 1,
'permalink' => 'https://www.virustotal.com/file/275a021bbfb6489e54d471899f7db9d1663fc695ec2fe2a2c4538aabf651fd0f/analysis/',
'report' => [
'2018-03-27 19:14:15',
{
'Kaspersky' => 'EICAR-Test-File',
'F-Prot' => 'EICAR_Test_File',
'Fortinet' => 'EICAR_TEST_FILE',
'Arcabit' => 'EICAR-Test-File (not a virus)',
...
如果您无法使用EICAR进行测试,例如,您的AV吃了它,您可以上传EICAR文件的哈希值。
例如:my $res = $api->get_file_report('3395856ce81f2b7382dee72602f798b642f14140');
PS。对于参加聚会的新用户,要获取VirusTotal API密钥: