¿Es posible escribir virus informáticos, gusanos y botnets usando C ++?

Definitivamente sí.

No solo es posible, algunos de los programas que se ejecutan en este momento se realizan en C, por ejemplo, el código fuente de Mirai está disponible en C. No hay mucha diferencia con las posibilidades de los lenguajes entre C y C ++, por lo que todo eso se puede escribir en C ++ también se puede escribir en C.

Sin embargo, algunas cosas posibles en C no se pueden hacer en C ++. Pero virii, gusanos, botnets u otros malwares no son algunos de los cuales.

Verán, un virus no es más que un programa de enlace malicioso, como “ld”, si lo desea, una herramienta que también está naturalmente escrita en C. Manipula algunas estructuras de datos de archivos ejecutables, como el formato ELF o el colgante en Windows. Totalmente posible en algo como C.

Puedes hacer un gusano en C, porque eso es solo un poco de código de red, más o menos. ¿Y las botnets? Solo una variante distribuida de un gusano.

Debido a que estas funciones se han vuelto bastante elaboradas hoy en día, a menudo vemos todo tipo de malwares realizados en C o C ++. E incluso la mayoría de los exploits son factibles en C. Bueno, creo que es más fácil hacerlo en Assembly, para ser honesto, y especialmente si haces desbordamientos de buffer y ataques de explotación de stack, Assembly es realmente útil. Pero no es imposible hacer eso en C. Simplemente no es una fortaleza de un lenguaje de alto nivel hacer tales cosas.

Significa que las cosas típicas de gusanos, virus, troyanos y malware se pueden hacer bien en eso y también es bastante sensato usar C para eso. Porque de hecho es un trabajo de implementación y no tiene que preocuparse demasiado por los ciclos. El tamaño importa, por supuesto, y puede aterrizar en una situación en la que su código C ha explotado su malware de una manera, que ya no es sensible para la implementación fuera del laboratorio.

Pero realmente depende de las circunstancias.

En 1990 más o menos, típicamente programamos malwares en ASM. Pero creo que el gusano Morris fue el primero que recuerdo haber hecho en C. No recuerdo cómo me senté sobre su código fuente para analizarlo. Pero eso fue hace mucho tiempo, así que no estoy muy seguro de si ese fue el gusano Morris o algo más tarde.

Al menos recuerdo que cuando se creó el VTC (Centro de Pruebas de Virus de la Universidad de Hamburgo), yo era uno de los estudiantes que había sido la primera generación. Y teníamos una disputa sobre eso, si se podía hacer malware en HLL. Y todos teníamos la tarea para venir con alguna prueba. La próxima semana tuvimos virii en Forth, Lisp y todo tipo de lenguajes, tuve una solución en C, que era uno de esos lenguajes “imposibles” para eso.

Hasta ese momento había sido la sabiduría reconocida, que esto era solo el dominio de la Asamblea, porque tienes posibilidades limitadas de autorreferencia en HLL. Pero encontré una forma de eludir ese límite cuando mis colegas encontraron sus caminos. Si desea hacer referencia al código en la memoria, tiene una dirección que aparece en C. Y también puede abordar el final de ese código simplemente usando una etiqueta o una función diferente que se coloca detrás de esa función.

Puede copiar los códigos de operación de la memoria a un lugar diferente en la memoria, simplemente accediendo a la dirección y longitud de la función. Entonces, sí, no es ningún problema hacer todas esas cosas en C. Incluso no solo puede escribir máquinas virtuales con ellas, sino que también puede hacer la compilación JIT en un espacio de datos y ejecutar esas cosas también.

No es difícil, solo en ese momento no era de conocimiento común que esto era posible. Pero lo hicimos entonces, puedes hacerlo ahora. Solo con C ++ tenga en cuenta que el concepto de memoria de C ++ es diferente al de C y aterriza en el infierno si comienza a usar “nuevo” u otro tipo de administración de memoria dinámica de ese lenguaje bastardo.

Si haces eso, mejor usa malloc () y free () en su lugar. Eso está mucho más bajo control. Ambas formas son (a menudo no siempre) incompatibles entre sí, así que tenga en cuenta eso.

Entonces, si escribe algo así, mi consejo sería usar C para eso y no C ++. C ++ simplemente no es la herramienta adecuada para eso. Pero no es imposible hacerlo. Es solo que no tienes el tipo de control sobre lo que haces en C ++ como lo tienes en C. C ++ realmente se está volviendo loco y hace algunas cosas que no sabes y no quieres que haga. hazlo, pero lo hace de todos modos y no tienes forma de detenerlo para hacerlo.

Esa es también una de las razones por las que dejé de usar C ++. Muy buen lenguaje, pero tiene algunas desventajas desagradables, que no quiero heredar en mis proyectos. El núcleo de Linux tiene una buena razón para estar escrito en C y no en C ++.

El problema con C ++ es que su código se ejecuta hoy, pero mañana, cuando vuelvan a joder algo en el STL, ya no se ejecutará. Eso es algo que ya se ha comido meses y meses de mi vida, razón por la cual no estoy usando C ++ sino C para todo el trabajo de implementación.

Si tiene un error en su programa, puede encontrarlo mucho más fácil en C que en C ++. Porque si logras dispararte en el pie con C ++, no solo falta el pie, sino también la pierna y una buena parte de tu vientre. Y en esa condición, intente correr para la fecha límite y joder el código.

Prefiero usar idiomas fáciles en todas las circunstancias. Los lenguajes complejos son una mala idea si está en el nivel de implementación. La complejidad en el nivel del script está bien a veces, pero, por favor, no en el nivel de implementación.

Respuesta corta: en algunos casos limitados, sí.

Detalles: los virus, gusanos y botnets son solo código, y teóricamente es posible codificarlos en cualquier lenguaje de computadora. Dicho esto, este código tendrá que ejecutarse en una plataforma, y ​​la plataforma determinará qué idiomas son válidos. Además, los virus y gusanos necesitarán explotar vulnerabilidades en la ejecución de software, y esto a menudo requerirá conocimiento de implementación de bajo nivel que es difícil de expresar en lenguajes de alto nivel como C ++.

Por ejemplo, C ++ usa tablas de funciones virtuales que aparecerán en ubicaciones algo “arbitrarias” en la memoria. Aprovechar estas tablas de funciones virtuales agrega una gran complejidad a un ataque que sería mucho más directo si se escribiera en ensamblado, donde su código podría ser compacto, fácil de ubicar e independiente de la posición.

Mi recomendación personal sería comenzar primero con un lenguaje de nivel inferior como C y / o ensamblaje. Después de que comprenda cómo se compila, ensambla, vincula y carga el código en este nivel, puede comenzar a aprender ingeniería inversa de malware para comprender mejor cómo funciona.

El lenguaje más común para escribir malware a mediados de la década de 2000 fue Delphi. En los 90 fue asamblea. C ++ siempre ha sido un objetivo válido para el desarrollo de malware. A fines de la década de 2000 y principios de este año tiene Java y actionscriot.

Dada la prevalencia de las tecnologías web, JS / node / ASP y otros también son bastante comunes. Llámame un bicho raro, pero escribo un código ofensivo que soy Perl-metasploit durante años, hasta que se mudaron a Ruby.

Entonces, sí, c ++ es un lenguaje perfectamente bueno para desarrollar código ofensivo.

¡Absolutamente! No serán elegantes (desde la perspectiva del código binario). Serán de gran tamaño debido a toda esa información adicional añadida de las bibliotecas estándar y la ineficiencia general de los lenguajes de programación de alto nivel en comparación con el ensamblador, pero funcionarán.

Se ha hecho varias veces en el pasado. Los creadores de virus utilizaron C ++, Delphi, etc.

¡Por supuesto! Técnicamente, un virus o malware se puede escribir en cualquier programa. Todo lo que un programa tiene que hacer para ser considerado un virus es causar daño intencionalmente al sistema operativo. Alguien podría escribir un Virus en C ++ que elimine system32, y listo. Virus / Gusano completo.

Para ser sincero, recomendaría usar C ++ para virus.

Es rápido, puede causar mucho daño y será indetectable durante las primeras semanas.

En breve la respuesta es sí.

C es la madre de todos los idiomas, por lo que puede hacer cualquier cosa posible en C

More Interesting

¿Quiénes son los usuarios de la tecnología de cifrado?

¿Kali Linux tiene RDP disponible? ¿Cómo edito esa configuración si es así?

Cómo proteger un sitio web de los piratas informáticos

¿Cuál es el mejor administrador de contraseñas?

Hice una búsqueda en Google recientemente y leí un artículo de dos años que el Departamento de Seguridad Nacional de los EE. UU. Me recomendó no instalar Java o eliminarlo por completo porque era la causa de una serie de problemas de seguridad. ¿Siguen existiendo los problemas?

Debido a que se accedió a toda nuestra información personal en la violación de seguridad de Equfax, ¿hay algún punto en tener cuidado con su información personal?

Quiero hacer proyecto en seguridad de la información. ¿Cuáles son algunos buenos temas?

Me acabo de unir a la industria de seguridad cibernética de TI. ¿Qué certificados vale la pena perseguir? CEH, CCNP Seguridad? CheckPoint CCSE?

¿Cómo podemos analizar los sitios de redes sociales y predecir los tiempos de espera en las fronteras?

Cómo evitar pagar un certificado SSL y aún no obtener la información de advertencia roja al intentar cifrar la comunicación en el navegador

¿Por qué tengo tantos eventos de seguridad registrados con el usuario 'N / A'?

¿Cuáles son los diferentes temas en la piratería web (piratería de sitios web, bases de datos) que una persona interesada debe aprender y explorar?

¿Cuál es el mejor antivirus para teléfonos Android?

¿Cuáles son las tendencias clave en el campo de la seguridad de la red?

¿Hay un lugar secreto en Windows donde se guardan todas las contraseñas?