¿Qué tan difícil es desarrollar un software antivirus?

No existe un enfoque único para el análisis de malware y la detección de virus. Nuevas técnicas para comprometer los sistemas operativos aparecen todo el tiempo. Estas técnicas y métodos están diseñados en gran medida para vencer a las aplicaciones de detección de antivirus.

Necesitará una sólida comprensión del sistema operativo que elija. Deberá saber cómo funciona el sistema operativo, cómo se gestiona la memoria, cómo se gestiona el acceso a los recursos, etc. Sin mencionar que necesitará saber cómo se asegura el acceso a estos recursos y se otorgan los permisos.

Necesitará conocer un lenguaje de programación de bajo nivel. No dijo para qué sistema operativo / plataforma (Mac, Linux, Windows, etc.) le interesa escribir el software AV. Suponiendo que va a apuntar a MS Windows, una de las mayores fuentes de virus conocidos. En mi opinión, el mejor lenguaje puede ser aprender C ++. Es posible escribir software AV en la plataforma .NET, pero algo difícil debido a restricciones de código administrado, etc. C ++ sería útil en Mac y es primo C en Linux.

Finalmente, para crear una aplicación AV efectiva, necesitará acceso a firmas de virus. Las firmas definen características únicas del virus o malware en sí. Las firmas ayudarán a identificar patrones de bytes únicos o cadenas que solo se encuentran en varias cepas de malware conocido.

Las firmas pueden ser algo difíciles de crear sin muchos recursos y acceso al malware en sí. Le recomendaría que eche un vistazo a algún software antivirus de código abierto como Clam AV. Clam ofrece software AV para Windows y Mac y Linux (http://ClamAV.com).

En resumen, no es fácil escribir software AV. Necesitará un amplio conocimiento del sistema operativo, el lenguaje de programación y las tendencias de virus.

Es una tarea muy complicada en términos de aspecto que debería interesarle. El malware utiliza varios enfoques para entrometerse en el sistema y su antivirus debería preocuparse por todos ellos. Eche un vistazo a estas dos muestras de demostración de anti-rootkits simples con solo dos enfoques discutidos (están desarrollados en C ++, lo que considero que es una muy buena herramienta para desarrollar software antivirus):

Tutorial simple de desarrollo antirootkit

Anti-empalmador simple

Además, debe preocuparse por la base de datos del malware conocido y actualizarlo constantemente. Existen algunas soluciones, como OPSWAT, que le permite utilizar motores / bases antivirus proporcionados por otros sistemas antivirus, mientras que su software solo es responsable de recopilar datos para el análisis, pero no se trata de qué valor adicional realmente puede proporcionar.

Un sistema antivirus tiene básicamente dos componentes principales: el motor y luego las bibliotecas de firmas de virus.

El sistema funciona utilizando el motor para abrir archivos y buscar firmas de virus que tenga registradas en la Biblioteca de virus.

Es una especie de campo enorme con una implementación muy compleja, la mejor manera de comenzar sería utilizar y aprender de los proyectos de código abierto existentes.

Proyecto OpenAntiVirus
Almeja antivirus

Ambas comunidades son extremadamente útiles y lo ayudarán a aprender el arte o ayudarlo a usar sus propias API y bibliotecas.

More Interesting

Cómo aprender y comprender estructuras de datos y algoritmos de manera efectiva

¿Qué algoritmos de C debe conocer todo ingeniero de software?

¿Qué cosas 'específicamente Java' debería revisar para prepararme para una entrevista de puesto de desarrollador de software (centrada en Java)?

¿Cuál es el mejor proveedor de servicios de ingeniería inversa a nivel mundial?

Cómo simplificar un proceso de gestión de cambios complejo y frustrante al entregar software a producción

¿Qué desafíos enfrentan los desarrolladores / programadores?

¿Cuál será la diferencia en el salario de un probador y desarrollador con los mismos años de experiencia y el mismo nivel de conocimiento en sus respectivos campos?

Si todo el software fue eliminado, pero todo el hardware y la documentación permanecieron, ¿cuánto tiempo tomaría reconstruir al nivel actual?

Soy estudiante de ingeniería de software y necesito una idea de aplicación de Android para un proyecto de 3 meses.

¿Cuál debería ser el proceso de control de calidad para bloqueos reportados para aplicaciones móviles?

¿En qué aspectos el mundo real del software es más complejo que el campo de los algoritmos?

¿Debo ir a la Universidad de Waterloo para la ingeniería de software o la Universidad de Toronto para la ingeniería informática? Si decido ir a Waterloo, me costará el doble porque necesito mudarme.

¿Cuál es la 'regla noventa y noventa' en ingeniería de software?

¿Qué debe hacer un desarrollador que comienza en un nuevo equipo en los primeros 90 días?

¿Cómo se clasifican en términos del tiempo que necesitaría para realizar estas tareas o aumentar mi nivel en ellas? ¿Serían los rendimientos futuros (en términos de trabajos, etc.) que estas habilidades darían a mi carrera?