用于运行被防病毒扫描程序删除的 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 可执行文件的主要内容,如果未能解决你的问题,请参考以下文章