如何使用VT :: API cpan模块检索Virustotal文件扫描报告?

时间:2014-03-05 21:22:51

标签: perl cpan

我安装了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采用的形式?我需要能够显示结果。

2 个答案:

答案 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密钥:

  1. https://www.virustotal.com
  2. 注册一个帐户
  3. 导航至user-image-&gt; settings-&gt; api键(或直接转至https://www.virustotal.com/#/settings/apikey