Java Antivirus ......有可能吗?怎么样?

时间:2010-02-23 21:00:53

标签: java antivirus

是否有可能用Java编写一个防病毒程序,例如它可以拦截程序被执行?我可以在Java中对操作系统进行如此深入的控制吗?

更新: 怎么样的##?相同的限制是适用的还是更好的方式?

7 个答案:

答案 0 :(得分:12)

可以对操作系统产生这样的影响。只有问题是,您将失去平台独立性,或者至少必须为每个给定平台编写代码,因为这样的操作需要对系统进行非常深入的访问,这可能是JNI所实现的,这将把你使用它的方法绑定到操作系统。

答案 1 :(得分:5)

我不认为使用Java可以实现这种控制,主要是因为它使用了虚拟机并且不受操作系统的影响。或者更确切地说,操作系统与Java VM隔离开来。这是设计的。

为了清楚起见编辑添加:我假设你想用Java编写整个解决方案,而不是混合语言。

答案 2 :(得分:2)

我不相信它甚至可以与JNI一起使用。

当操作系统启动新进程(或写入文件或其他)时“拦截”的情况下,您需要编写某种挂钩到操作系统的驱动程序或内核模块。该驱动程序/模块肯定是用本机编译代码编写的。因此操作系统是这里的负责人,并最终将调用您的本机模块。

所以,正如我所看到的,Java甚至没有参与其中。

无论如何,这是基本的方法。有可能在Linux中使用类似pam的内容,可以配置几乎任何与安全性和文件/进程权限相关的内容,并可以调用其他进程来进行出价。看起来很难为操作系统尝试启动的每个新进程运行JVM实例。

答案 3 :(得分:1)

正如HalloDu所说,使用JNI在技术上是可行的。但是,IIRC,大多数防病毒程序使用某种驱动程序拦截打开的文件并扫描它们,然后才允许操作系统继续使用该文件。在这种情况下,您必须编写的本机代码的数量(在C或可能是C ++中)将是巨大的,并且可能超出您的Java代码的大小。

在编写低级别的应用程序时,我会坚持使用C.然而,用更高级别的语言编写GUI之类的东西可能是有意义的,尽管Java也不是我的选择,因为它是善良的与C接口的痛苦。就个人而言,我只是因为混合语言往往是一种痛苦而在C中做了该死的事。如果我混合语言,我的选择将由C和python完成,因为ctypes与C的接口非常容易。

答案 4 :(得分:0)

可以使用JNI。对于任何其他类型的防病毒工作,您主要使用Java作为GUI和C / C ++。

答案 5 :(得分:0)

制作自己的防病毒软件有什么意义?这是很多工作,但我想如果你把它变成一个可以阻止并删除所有更讨厌的那个的便携式的话会很酷。如果你必须坚持ClamAV,它是一个开源且非常好的AV(没有实时保护),但用C ++编程。

答案 6 :(得分:0)

您最好的选择可能是在Java中编写GUI和大部分逻辑,然后使用C或C ++后端执行扫描。

然后,您可以跨平台重新使用前端,并将平台特定的内容保留在较低级别。

通过这种方式,您可以利用两种语言的优势 - Java的平台独立性和易用性以及C / C ++直接访问底层平台的能力。