用于运行被防病毒扫描程序删除的 Java 应用程序的 Windows 可执行文件

Posted

技术标签:

【中文标题】用于运行被防病毒扫描程序删除的 Java 应用程序的 Windows 可执行文件【英文标题】:Windows Executable to run Java application deleted by anti virus scanner 【发布时间】:2009-11-09 15:16:11 【问题描述】:

我构建了一个在 USB 记忆棒上交付的 Java 应用程序。为了确保兼容性,我在棒上发布了一个合适的 JVM。我制作了一个 EXE,它简单地使用应用程序 jar 调用这个 JVM。

现在的问题是:一些病毒扫描程序采取积极行动,只是删除了可执行文件!

我尝试了一个用“批处理文件到可执行文件”工具制作的 exe,还有一个是我自己用 C 语言编写的(调用 ShellExecute);诺顿声纳检测并消除了这两个版本,但我可以想象其他病毒扫描程序可能会有类似的反应。

我最初选择了 Windows 快捷方式,但这些似乎不支持相对路径。批处理文件也不可接受,因为我不希望显示命令控制台。

【问题讨论】:

【参考方案1】:

您可以尝试使用众多可配置的 java 启动器之一 - 它们可能不太可能被 AV 拾取:

NSIS Janel JSmooth Launch4J WinRun4J

(完全披露:我在 winrun4j 工作)

【讨论】:

它最终与 NSIS 合作......我尝试了所有其他方法,但它们都被选中了。谢谢! 我使用github.com/kohsuke/winsw Windows 服务包装器将 java 程序添加为可执行文件【参考方案2】:

在批处理文件中使用start/b java.exe ...。会有短暂的闪烁,但窗口会很快消失。

至于病毒扫描程序删除您的文件:使用具有硬件开关的棒,可以使其写保护。这是为了您自己的安全:有病毒扫描程序并不意味着没有病毒。如果没有人可以在棍子上写字,那么没有人可以弄乱它。

【讨论】:

应用程序将数据保存在记忆棒上,因此无法写保护。 另外,如果我使用 start/b,我看到的不仅仅是闪烁,实际上完全没有区别,抱歉。【参考方案3】:

如果您使用javaw.exe 启动您的应用程序,那么您根本不应该有关联的控制台窗口,这样可能会绕过将您的 bat 文件转换为 .exe 的需要。

您还可以考虑将您的应用程序作为 Webstart 应用程序分发,其中关联的 jnlp 文件描述了 JVM 所需的最低版本。

【讨论】:

【参考方案4】:

由于程序不必经常更改:将其作为误报提交给 AV 供应商,那么它可能会很快被列入白名单。或者至少您可能会发现他们认为如此令人反感的是什么。

【讨论】:

以上是关于用于运行被防病毒扫描程序删除的 Java 应用程序的 Windows 可执行文件的主要内容,如果未能解决你的问题,请参考以下文章

开机弹出对话框“无法定位程序入点”

将文件上传到正在运行实时防病毒扫描的服务器

病毒扫描程序锁定和删除临时文件 - 应对它们的最佳方法?

使用 c# 和 symantec 扫描引擎进行病毒扫描

检测 Windows 机器是不是运行病毒扫描程序? [复制]

无法下载检测到病毒