home *** CD-ROM | disk | FTP | other *** search
- *cN TECNICAS VIRICAS
- ----------------
- *cG
- Hey! ¿Qué es esto? ¡Efectiviwonder! Un cursillo de técnicas que utili-
- zan los virus: stealth, polimorfía, encriptación, etc. etc. etc.
-
- Pero, ¡que nadie se engañe! No vamos a enseñar a hacer virus, sino que
- vamos a destripar sus técnicas más comunes. Si, por alguna de aquellas quisie-
- ras aprender a hacer virus, léete la sección de "Virus comentado" y, si sabes
- ensamblador, encontrarás tú mismo la forma de hacerlo (por otra parte, NECESI-
- TAS saber ensamblador para hacer un virus). Si por alguna de aquellas no su-
- pieras ensamblador, lee atentamente la sección de Ensamblador en Programación.
-
- Y, para este número, empezaremos con la técnica más sencilla: la en-
- criptación.
-
- ¿Qué es la encriptación? Encriptar es cifrar, mediante una clave, una
- secuencia, de manera que nos dé una secuencia completamente diferente. Cono-
- ciendo la clave para deshacer el cifrado, podremos encontrar la secuencia ori-
- ginal.
-
- El encriptado de archivos y de secuencias ejecutables se basa en esto
- y, además, en la particularidad de que los bytes o words son "circulares", es
- decir, si a un byte con valor FEh le sumamos 3, por ejemplo, nos daría 101h,
- pero esto no se puede guardar en un byte, así que sólo se guardaría la última
- parte: 01h. Entonces tendríamos un byte encriptado, cuya clave sería BYTE + 3.
- Entonces, para deshacer el encriptado y encontrar el byte original, sólamente
- tendríamos que restarle 3.
-
- Pues esto es encriptar. Después hay varias formas de encriptar.
-
- Una es la expuesta antes, la de la suma. Un programa muy corto suma un
- determinado valor a cada byte o cada word. Para sacar la secuencia real, tan
- sólo hay que restar ese valor. Veámoslo con un programa:
-
- *cB
- MOV DI, Offset Inicio_Código
- MOV CX, Longitud_Encriptado
- L1: SUB WORD PTR [DI], Clave_de_encriptado
- INC DI
- INC DI
- LOOP L1
- *cG
- Esto hace lo siguiente:
-
- Tenemos la cadena original. Por ejemplo:
- *cB
- 45 54 7B 68 8A F7 95 2C 41 74 ...
- *cG
- Y la criptamos sumándole a cada byte el valor 10h. Nos daría:
- *cB
- 55 64 8B 78 9A 07 A5 3C 51 84 ...
- *cG
- Que es una cadena diferente. Al ejecutar los bytes de la cadena como
- si de instrucciones se tratase, nos encontraríamos que hace una cosa completa-
- mente diferente. Para que haga lo que realmente queremos que haga hay que vol-
- verla a dejar como estaba, y para ello le restaremos 10h, que fue lo que le
- sumamos. Y volvería a quedar:
- *cB
- 45 54 7B 68 8A F7 95 2C 41 74 ...
- *cG
- La cadena original.
-
- Pero podemos complicar un poco más el encriptado, y no hacerlo tan fá-
- cil de deshacer (o de detectar, puesto que la diferencia entre un byte y el
- siguiente de la cadena es la misma). Por ejemplo, podemos hacer un XOR (muy
- común).
-
- Me imagino que ya sabes lo que será el XOR, pero lo digo por si acaso
- hay alguno que no lo sabe (si está leyendo esto, extraño, extraño...). XOR es
- una instrucción que significa "eXtended OR". Es una instrucción de operación
- de bits, que compara dos números a este nivel y, si los bits son iguales, pone
- 0 en el destino, y si son distintos, pone 1. Así:
- *cB
- 10100101 --> 1er. nº (A5h)
- 01001110 --> 2o. nº (4Eh)
- --------
- 11101011 --> Resultado (EBh)
- *cG
- Si criptáramos nuestra cadena con un XOR, la secuencia sería más com-
- pleja. Así:
- *cB
- 45 54 7B 68 8A F7 95 2C 41 74 ...
- *cG
- Criptamos cada byte "XOReándolo" con 11h y da:
- *cB
- 01000101 01010100 01111011 01101000 10001010 11110111 10010101
- 00010001 00010001 00010001 00010001 00010001 00010001 00010001
- -------- -------- -------- -------- -------- -------- --------
- 01010100 01000101 01101010 01111001 10011011 11100110 10000100
-
- 00101100 01000001 01110100
- 00010001 00010001 00010001
- -------- -------- --------
- 00111101 01010000 01100101
- *cG
- Es decir:
- *cB
- 54 45 6A 79 9B E6 84 3D 50 65 ...
- *cG
- Que es una cadena un pelín más difícil de desencriptar que la otra. Lo
- bueno del XOR es que, para deshacer el encriptado, no necesitamos otra instruc-
- ción, sino que haciéndole XOR a esa cadena con la misma clave de encriptado,
- obtendremos la original. Probadlo y veréis. Y si hacéis un XOR a la cadena
- criptada con la original, byte a byte respectivamente, obtendréis la clave de
- encriptación.
- *cB
- 11 11 11 11 11 11 11 11 11 11 ...
- *cG
- Bueno, aquí tenéis tela para rato. Un virus se encripta para ocultar
- su código a posibles "estudiantes" de éste. Esto hoy ya no tiene sentido, y ac-
- tualmente el criptado se usa como complementación de otras técnicas más comple-
- jas, como el polimorfismo. Tampoco es del todo eficaz variar en cada infección
- la clave de encriptado, porque entonces lo único que tendría que hacer el anti-
- virus sería buscar el programita de desencriptación. Y para evitar precisamente
- eso los virus makers se calentaron la cabeza y crearon las rutinas y motores de
- polimorfía, cosa que veremos más adelante. De momento, el número que viene ve-
- remos las técnicas stealth más comunes. Hasta la vista!
- *cL
- Líyak el Oscuro
-
-