我正在尝试构建一个 SpamAssassin 测试,该测试使用 ClamAV 的 CLI 工具 sigtool 来检测附加的 MS Office 旧文件(如可能具有宏的 .xls 或 .doc)何时实际上具有可执行宏。
在 perl 中调用 sigtool 并传递一个文件名以像这样进行扫描很容易
my $filename = "email_attach";
my $scan = `/usr/bin/sigtool --vba="$filename"`;
if ($scan =~ /autoopen/i ) {
print "Scanning $file: INFECTED VBA\n";
}
但是,作为 SpamAssassin 测试,我已经将电子邮件附件作为变量传递给我的测试。所以我不想花时间将每个附件写入磁盘然后告诉 sigtool 去阅读它。
我研究了整个第 16 章 Programming Perl 和 Perl Cookbook on Interprocess Communications 和 Process Management and Communication ,那里有大量信息,但我没有看到任何解决将您的内部 perl 程序数据作为输入传输到外部的内容正在寻找要作为命令行参数传递的路径/文件名的应用程序。
感谢您对如何实现这一点的任何想法。或者,如果有人知道一种更简单的方法来检测 MS Office 旧文件中的 VBA 宏或可执行文件,那也可以。