¿Es posible? Sí lo es.
Quines
Hay ciertos tipos de programas que se llaman ‘quines’. Un quine es un programa que genera su propio código fuente (no el código fuente vacío, por supuesto). Aquí hay un ejemplo simple.
- Biotecnología: ¿qué tan lejos estamos (en años) de crear un útero artificial viable para la vida humana?
- ¿Cómo ayuda LSTM a prevenir el problema de gradiente de fuga (y explosión) en una red neuronal recurrente?
- ¿Scott Fahlman (y el Grupo de Investigación Scone) sigue desarrollando activamente Scone?
- ¿Dónde debería comenzar a construir un chatbot de IA?
- ¿Qué tipo de algoritmo de Machine Learning usarías para permitir que un robot camine en varios terrenos desconocidos?
echo on
Esto solo funciona en el símbolo del sistema de Microsoft Windows. Escríbelo en el bloc de notas y guárdalo como quine.bat, luego ve al símbolo del sistema, navega hasta donde está el archivo y escribe:
quine.bat
(eso supone que guardó el archivo como quine.bat. Debería ver el contenido del archivo en la pantalla. Esencialmente, eso es lo que es una quine. Hay muchas más citas no triviales en otros idiomas. Puede visitar esta página y este para más ejemplos en varios idiomas.
A donde voy con todo esto es que no es difícil imaginar un programa que genere su propio código fuente en un archivo, en lugar de simplemente imprimirlo, y ejecutarlo en su lugar.
Virus
Un virus es un programa autorreplicante. Adjunta una copia de sí mismo a los programas ejecutables (con esto quiero decir cualquier cosa que contenga instrucciones para que la computadora las siga). Aquí hay un código muy simple que puede copiarse de una parte de la memoria a otra. Está escrito en Asamblea (NASM)
Dirección de carga:
mov axe, LoadAddress; copia la ubicación del código a ax
mov cx, EndOfCode; obtener la dirección del final del código
sub cx, hacha; esto obtiene la longitud de este código
mov si, LoadAddress; por donde empezar copia
mov di, DestinationAddr; donde escribir
repnz stosb; copia el código
EndOfCode:
Básicamente, lo que hace el código anterior es calcular su propia longitud y luego copiarse en una ubicación diferente en la memoria. Por supuesto, tendrá que hacer algunos cálculos para averiguar cuál es la dirección de destino. (Tenga en cuenta que es posible que desee averiguar cómo esa pieza puede calcular en qué lugar de la memoria se carga).
Virus polimórficos
Un virus polimórfico viene con un motor de transformación . La función del motor de transformación es recrear una versión diferente del virus que hace exactamente lo mismo (que el virus hace). La idea es esta; la mayoría de las veces, uno puede escribir código que haga exactamente lo mismo de muchas maneras diferentes. Hay muchas técnicas diferentes para hacer esto; registre la reasignación, insertando instrucciones sin operaciones y muchas otras. Insertar una instrucción 'nop'
realidad no hace nada e incluso en procesadores Intel más antiguos se representaba como mov al, al.
Podría volver a escribir el ejemplo anterior como:
Dirección de carga:
nop; esta instrucción en realidad no hace nada
mov axe, LoadAddress; copia la ubicación del código a ax
mov cx, EndOfCode; obtener la dirección del final del código
o cx, cx; esta instrucción no tiene efecto
sub cx, hacha; esto obtiene la longitud de este código
nop; otra instrucción que no hace nada
hacha de empuje; empujar el hacha en la pila
pop si; regresarlo a si
mov di, DestinationAddr; donde escribir
repnz stosb; copia el código
EndOfCode:
El código anterior hace exactamente lo que hace el anterior, excepto con un conjunto diferente de instrucciones. Esta es la función del motor de transformación en un virus polimórfico.
Virus metamórficos
Los virus metamórficos hacen lo mismo que los virus polimórficos con una diferencia: en un virus polimórfico, el motor de transformación cambia solo el virus pero no el motor de transformación en sí. Por lo tanto, el virus aún se puede rastrear a través del motor de transformación que permanece constante a través de las iteraciones. En un virus metamórfico, el motor transforma el virus y su propio ser, por lo que es difícil reconocer el virus a través de las iteraciones.
¿Puedes imaginar?
Ahora puede imaginar que carga un virus metamórfico o polimórfico en una caja de arena (que es algo que hacen los antivirus) y lo supervisa a través de iteraciones, por ejemplo, la velocidad, el tamaño de la huella de la memoria e incluso cuánto cambia el virus. Use cualquier técnica de IA como Algoritmos genéticos, redes neuronales e incluso Hill Climbing para obtener la mejor versión de ese código. Esto puede ser cualquier código, por supuesto. No tiene que ser un virus.