Java杀毒软件...可行吗?怎么做?

9

能否用Java编写防病毒程序,并拦截程序的执行?我是否可以在Java中对操作系统进行深层次的控制?

更新: C#呢?是否有同样的限制,还是这是一种更好的选择?


1
请不要这样做。从技术上讲,即使使用PHP也是可能的。 - pestilence669
用C#可能会差不多。可能会更容易一些,但你仍然需要编写比C#更低级的代码。 - Sasha Chedygov
7个回答

12

在操作系统中具有这样的影响是可能的。只有一个问题,您将失去平台独立性,或者至少需要为每个给定的平台编写代码,因为此类操作需要深入访问系统,这可以通过JNI实现,这将使您使用它的方法与操作系统绑定。


2
是的。这将需要使用JNI,并且在那一点上,你不再编写纯Java代码。 - Mike Daniels
2
它可以使用JNI被黑客在一起,允许你编写伪装成Java的C++代码... - Gordon Gustafson

5

我认为使用Java不可能实现那种控制,主要是因为它使用虚拟机,并且受到操作系统的保护。或者说操作系统被设计成与Java虚拟机隔离。

为了更清晰地说明,我假设您希望完全使用Java编写整个解决方案,而不是混合使用其他编程语言。


2
我不认为即使使用JNI也能成功。
在“截取”操作时,当操作系统启动新进程(或写入文件或其他操作)时,您需要编写某种驱动程序或内核模块来钩入操作系统。该驱动程序/模块肯定是用本地编译代码编写的。因此,操作系统是主导者,并最终调用您的本地模块。所以,在我看来,Java 在这里根本没有参与。
这是基本的方法。在 Linux 中,可能可以使用类似于“pam”的东西,它可配置以执行与安全性和文件/进程权限相关的几乎任何操作,并且可以调用其他进程来执行其命令。不过,为每个操作系统尝试启动的新进程运行 JVM 实例似乎有些牵强。

1

正如HalloDu所说,使用JNI技术在技术上是可行的。然而,据我所知,大多数防病毒程序使用某种驱动程序来拦截打开的文件并在允许操作系统继续使用文件之前扫描它们。在这种情况下,您需要编写大量的本地代码(使用C或可能是C ++),这很可能会超过您的Java代码。

当编写较低级别的应用程序时,我会坚持使用C语言。但是,对于像GUI这样的东西,使用更高级别的语言编码可能是有意义的,尽管Java也不是我的首选,因为它与C的接口有点麻烦。就个人而言,如果我必须混合使用语言,我会选择C和Python,因为ctypes使得与C的接口非常容易。


我认为这并不相关,楼主似乎想要用Java编写整个解决方案。 - hmcclungiii
也许我提到Python并不完全相关,但我主要将其与JNI进行比较,您必须承认,JNI确实很难使用。 - Chinmay Kanchi
JNA(Java Native Access)非常适用于需要将C代码与Java进行接口交互的情况。 - jb.
不错!我甚至不知道这个存在。自从我需要接口C和Java代码以来已经很长时间了。 - Chinmay Kanchi

0

使用JNI是可能的。你会主要使用Java来进行GUI开发,而对于其他类型的杀毒工作则会使用C/C++。


0
制作自己的防病毒软件有什么意义呢?这需要很多工作,但如果你能制作一个便携式的软件来阻止和删除所有更加恶劣的病毒,那肯定很酷。如果你一定要坚持,ClamAV是一个开源且相当不错的防病毒软件(没有实时保护),但是它是用C++编程的。

我在考虑一种新型的杀毒软件,因此我需要拥有与传统杀毒软件相同的访问权限。 - Maurizio Pozzobon
据我所知,那是唯一的开源项目,或者至少是唯一一个仍在积极维护的项目。但如果你能理解它的源代码,我相信制作实时扫描器不会太具有挑战性? - Dr Hydralisk

0
你最好的选择可能是用Java编写GUI和大部分逻辑,然后有一个C或C++后端来执行扫描。
然后,您可以跨平台重复使用前端,并将特定于平台的内容保留在较低级别中。
这样,您可以利用两种语言的优势--Java的平台独立性和易用性以及C/C++直接访问底层平台的能力。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接