2010-02-23 10 views
9

¿Es posible escribir un programa antivirus en Java que pueda interceptar la ejecución de un programa? ¿Puedo tener un control tan profundo del sistema operativo en Java?Java Antivirus ... ¿es posible? ¿Cómo?

actualización: ¿qué ocurre con C#? se aplican las mismas restricciones o esa es una mejor manera?

+1

Por favor, no. Técnicamente, esto es posible incluso con PHP. – pestilence669

+0

Probablemente sería lo mismo con C#. Tal vez un poco más fácil, pero igual tendrías que escribir más código de bajo nivel que C#. –

Respuesta

12

Teniendo tal influencia en el sistema operativo es posible. Solo existe el problema, que perderá la independencia de la plataforma o al menos tendrá que escribir el código para cada plataforma dada debido a que tales acciones requieren un acceso bastante profundo del sistema que podría lograrse con JNI, lo que vincularía el método en que lo usa en el sistema operativo.

+2

Sí. Se necesitaría JNI para esto, y en ese momento ya no estás escribiendo Java puro. –

+2

podría ser * pirateado * junto con JNI, lo que le permite escribir C++ que se hace pasar por java ... –

1

Como dijo HalloDu, esto es técnicamente posible con el uso de JNI. Sin embargo, IIRC, la mayoría de los programas antivirus usan algún tipo de controlador para interceptar archivos abiertos y escanearlos antes de permitir que el sistema operativo continúe usando el archivo. Siendo este el caso, la cantidad de código nativo que tendría que escribir (en C o posiblemente en C++) sería considerable y es probable que supere el tamaño de su código Java.

Al escribir aplicaciones de bajo nivel, me quedaría con C. Sin embargo, podría tener sentido codificar cosas como la GUI en un lenguaje de nivel superior, aunque Java tampoco sería mi elección allí, porque es Me duele mucho interactuar con C. Personalmente, haría todo el maldito trabajo en C solo porque mezclar idiomas suele ser doloroso. Si yo tuviera para mezclar idiomas, mis elecciones serían por C y python, simplemente porque ctypes hace que la interacción con C sea realmente fácil.

+0

No creo que esto sea relevante, el OP parece que el objetivo es escribir toda la solución en Java. – hmcclungiii

+0

Tal vez mi mención de python no es totalmente relevante, pero la uso en gran medida como una comparación con JNI, lo que tendría que admitir, es un poco doloroso trabajar con él. –

+0

JNA (Java Native Access) funciona muy bien cuando necesita interconectar el código C con Java. –

5

No creo que ese tipo de control sea posible con Java, principalmente porque usa una máquina virtual y está protegido del sistema operativo. O más bien, el sistema operativo está protegido de la máquina virtual de Java. Esto es por diseño.

Editado para agregar para mayor claridad: supongo que desea escribir la solución completa en Java y no mezclar idiomas.

0

Es posible con JNI. Sin embargo, en su mayoría estarías usando Java para una GUI y C/C++ para cualquier otro tipo de trabajo antivirus.

2

No estoy convencido de que funcione incluso con JNI.

En el caso de "interceptar" cuando el SO inicia un nuevo proceso (o escribe en un archivo o lo que sea), necesita escribir algún tipo de controlador o módulo kernel que enganche en el sistema operativo. Ese controlador/módulo está ciertamente escrito en código nativo compilado. Entonces, el sistema operativo es el que está a cargo aquí, y eventualmente llamará a su módulo nativo.

Así que, como yo lo veo, Java ni siquiera está involucrado aquí.

Ese es el enfoque básico de todos modos. Puede ser posible usando algo como pam en Linux, que es configurable para hacer casi cualquier cosa relacionada con la seguridad y los permisos de archivo/proceso y puede llamar a otros procesos para hacer sus pujas. Parece exagerado para ejecutar una instancia de JVM para cada nuevo proceso que el sistema operativo intenta iniciar.

0

¿De qué sirve crear su propio antivirus? Es mucho trabajo, pero supongo que sería genial si lo hicieras uno portátil que bloqueara y eliminara los más desagradables. Si debe persistir, ClamAV, es una fuente abierta y bastante buena AV (sin protección en tiempo real) pero programada en C++.

+0

Estoy pensando en un nuevo tipo de antivirus, así que necesitaré tener el mismo acceso que los tradicionales –

+0

Hasta donde yo sé, ese es el único de código abierto, o al menos, el único que sigue siendo activly mantenido. Pero si puede entender el código fuente, ¿estoy seguro de que hacer un escáner en tiempo real no sería un gran desafío? –

0

Su mejor opción podría ser escribir la GUI y gran parte de la lógica en Java, luego tener un back-end de C o C++ que realice los escaneos.

Puede volver a utilizar el front-end en las plataformas y mantener las cosas específicas de la plataforma en los niveles inferiores.

De esta manera puede usar las fortalezas de ambos idiomas: la independencia de plataforma de Java y su facilidad de uso y la capacidad de C/C++ para acceder directamente a la plataforma subyacente.

Cuestiones relacionadas