oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo A 06 - CURSO BASICO-PRACTICO DE CRACK/VIRII - A A A oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo Curso Basico-Practico de CRACKEO de VIRUS todo en uno se€ora!! @97 by +NetBuL /------------------------------------------------------------- |IMPORTANTE: | |.- Nivel: baaaasico (practicamente "explicado para tontos") | |.- Indicado para: novatos y lamercillos ocasionales ... | -------------------------------------------------------------/ *** INTRODUCCION *** ====================== Mucha gente quiere aprender cosas sobre los virus y los cracks y no saben por donde empezar. Generalmente los textos basicos que hablan de estos temas exigen unos conocimientos previos que no son tan basicos. Por eso, para escribir mi primer texto, he decidido hacer un mini-curso que trate estos 2 temas (muy por encima) y a la vez se pueda seguir (casi) sin conocimientos previos, pero a costa de explicar algunas cosas *demasiado* claras. A veces, para que te entre el gusanillo por estos temas y empieces a avanzar es necesario ver resultados. Creo que este texto conseguira, como minimo, que + de uno empiece con ganas a repasar el ensamblador. Recuerda la teoria del Gran Pecador de la Pradera : MODIFICAR virus *solo* es el paso previo para APRENDER a programarlos, a su vez PROGRAMAR virus *solo* es el paso previo para APRENDER ensamblador ... (:-? guewos ...). Por ultimo quiero aclarar que este articulo esta destinado a usos didacticos (y va en serio). EL BUEN/MAL USO QUE LE DEIS ES RESPONSABILIDAD VUESTRA, QUEDA CLARO ... *** INGREDIENTES *** ====================== - Lo imprescindible : el editor, el virus, un diskete vacio, este texto, un PC enchufado a la corriente y como minimo un dedo en cada mano (mancos abstenerse). :-) - Editor Hexadecimal (MS-DOS) : XED v1.1b David L. Dight a€o 1994 Es un poco viejo pero suficiente para las "practicas" y cumple los requisitos: - es para MS-DOS - ocupa poco (unos 170Kb) - desensambla instrucciones - Virus BARROTES.1310.A. Pregunta a algun vecino, seguro que tu primo tiene 400mil discos infectados con el barrotes y el PING PONG, y si no lo encuentras buscalo por internet que son 5 minutos. - DEBUG del MS-DOS. Facil, no ? - Libro "Lenguaje ensamblador de los 80x86" Jon Beltran de Heredia. Editorial ANAYA Multimedia, 300 pags, unas 1500 ptas. Lo mejor para iniciarse con el ASM, claro, clarito... - Libro "Virus informaticos" Alfonso Mur y otros. Iba de regalo en la revista PC Magazine hace tiempo, y es 100% publicidad y rollete pero tambien viene algo de codigo del VIERNES 13 ... - Articulo: "Todo sobre los virus" Javier Guerrero. Lo encontraras en la revista PCMANIA, a€o IV, n§ 28 ("Regalaban" 2 CD's, uno de ellos de GREENPEACE) Aqui hay parte del codigo del BARROTES comentado. *** SABER LO + BASICO *** =========================== Para nuestra primera mision solo necesitamos unos minimos conocimientos de ensamblador (no es imprescindible), instrucciones basicas como MOV, JMP, etc, uso basico del debug o de algun compilador de ASM, saber que cada instruccion en ensamblador se codifica al compilarla en uno o varios bytes, que luego son ejecutados directamente por el PC, por ejemplo: La instruccion: MOV AX,0 (MOV AX,0000) se codifica en hexadecimal como: B8 00 00 ( 3 bytes ) La forma en que vamos a modificar un virus sera cambiando directamente determinados bytes del codigo del virus para que cuando sea ejecutado el archivo infectado ejecute nuestras nuevas instrucciones. Ejemplo practico: Vamos a crear una mierdaprograma de ejemplo con el debug (tambien se puede con el editor hexadecimal) que cambie el modo de video, y despues lo vamos a modificar a pelo, usando el editor ... Resumiendo, que sobre un ejecutable vamos a hacer cambios y listo y asi no necesitamos tener el listado fuente, modificarlo y compilarlo (en definitiva, vamos a usar tecnicas de cracking). c:\>DEBUG ;ejecutamos el DEBUG de MS-DOS -A ;escribimos el comando A: a€adir xxxx:0100 MOV AL,6A ;cargamos 6A en AL xxxx:0102 INT 10 ;int 10 (video) con funcion 6A (800x600) xxxx:0104 MOV AX,4C00 ;cargamos 4C00 en AX xxxx:0107 INT 21 ;int 21 (DOS) con func. 4C00 (salida al dos) xxxx:0109 ;cuando acabamos le damos a INTRO -RCX ;comando RCX: mostrar registro CX CX 0000 ;en el CX hay 0000 :09 ;ponemos en CX el ultimo num. (0109 == 09) -N mv8x6.com ;comando N: poner nombre al programa -W ;comando W: compila y escribe el COM Escribiendo 00009 bytes ;pues eso ... -Q ;comando Q: sale del DEBUG c:\> Ahora tenemos nuestro mv8x6.com de tan solo 9 bytes. Que bonito!! Bueno, lo pruebas y seguimos. La parida de antes nos sirve para aprender como se crackea un programa cualquiera (p. ej. un virus ... :-) ). Ahora vamos a editarlo con el editor hexadecimal y veremos de que se alimenta el PC. Esto es lo que se ve (en hex): B0 6A CD 10 B8 00 4C CD 21 Que significa: B0 6A == MOV AL,6A CD 10 == INT 10 B8 00 4C == MOV AX, 4C00 CD 21 == INT 21 Ahora es cuando ves la luz y dices : J*DER, pues claro !!!!. Efectivamente, si queremos "crackear" este fichero para que haga otra cosa tan solo tenemos que sobreescribirlo con el nuevo codigo y punto. Vamos a crear un nuevo .COM que deshaga el entuerto de antes. El cambio de instruccion sera sustituir MOV AL,6A por MOV AL,07 para volver al modo 80x25 caracteres. En este caso solo tenemos que sustituir el 6A por 07: MOV AL,6A == B0 6A MOV AL,07 == B0 07 luegorl .... B0 6A CD 10 B8 00 4C CD 21 ; viejo codigo B0 07 CD 10 B8 00 4C CD 21 ; nuevo codigo ^^ cuando no mire nadie ... cambiazo !! Lo grabamos como mv80x25.com y arreglado. Si lo ejecutas despues del mv8x6.com todo volvera a ser normal ... Ahora no hemos tenido que escribir todo el fuente y compilarlo como antes, simplemente lo hemos sobreescrito. "Tu primera colonia .... tu primer crack, CHISPAS !!" :-))) En este ejemplo tambien vemos una de las normas a respetar al crackear un programa: no a€adir ni quitar nada, el fichero modificado debe de tener el tama€o original y no debemos de tocar cosas a lo loco, hay que saber que estamos haciendo en cada momento. Generalmente solo tocaremos algunos MOV y poco mas. Tambien hemos aprendido como saber en cualquier instante la codificacion de una instrucion. Creamos un .COM con el DEBUG con una unica instruccion y luego lo editamos para ver como se ha codificado. Con el tiempo espero que depureis esta tecnica!! :-D *** PREPARATIVOS PREVIOS *** ============================== Ahora tienes que conseguir un virus vivo (el ejecutable) y lo mas dificil es conseguir una parte del listado fuente. En internet puedes encontrar virus a patadas. En este ejemplo he utilizado los listados parciales que aparecieron en un numero de PCMANIA sobre el virus BARROTES. El virus que he utilizado es, logicamente, el barrotes (BARROTES.1310.A segun el SCAN). Pasos a seguir .... 1§ Creamos con el editor hex. un fichero llamado DUMMY.COM de 256 bytes y lo llenamos de muchos 90 (instruccion NOP, No operation) y lo acabamos con B8 00 4C CD 21 (como ya hemos visto, corresponde al codigo para salir al dos [ MOV AX,4C00 // INT 21 ]). El DUMMY.COM lo usaremos para infectarlo con el virus y poder trabajar mejor (conseguiremos separar el codigo del virus del codigo del programa infectado, ya que ahora conoceremos como es el programa infectado). El hecho de que ocupe 256 bytes es porque algunos virus no infectan los .COM si tienen menos de 256 o 512 bytes. Ejemplo: DUMMY.COM ------------------------------------------------- |90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90| |90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90| |90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90| |.... | |... etc ... hasta 16 (15 de estas + la ultima) | |.... | |90 90 90 90 90 90 90 90 90 90 90 B8 00 4C CD 21| ------------------------------------------------| Este fichero no hace nada al ejecutarse, hace un monton de NOP (90) y despues sale al dos (B8 00 4C CD 21). 2§ Formateamos un diskette como disco de sistema y copiamos en el: - el fichero infectado con el virus - el editor hexadecimal - el debug - el fichero DUMMY.COM 3§ Reiniciamos el PC y entramos en el SETUP, eliminando el o los discos duros y dejamos solo la disketera. Salimos del SETUP. Desde este momento *SOLO* usaremos la DISKETERA !!. Asi evitaremos infectar todo el disco duro. 4§ Reiniciamos el PC con el disco metido y nos aseguramos de que no exista ningun disco duro. 5§ Ahora es un buen momento para ejecutar el fichero infectado para cargar el virus en memoria y despues ejecutar el DUMMY.COM para infectarlo. En nuestro caso el barrotes tambien intentara infectar el C:\COMMAND.COM pero ahora no podra ... Si eres valiente usa el comando DATE para poner la fecha del PC a 5 de enero y vuelve a ejecutar algun programa ... Veras los famosos BARROTES y tu HD no se enterara (puedes hacerlo, el HD ahora no existe). Despues resetea y seguimos. *** EMPEZAMOS CON EL VIRUS *** ================================ Si hemos seguido bien los pasos veremos que nuestro DUMMY.COM ha engordado un poquito, algo asi como 1310 bytes ... Lo editamos y como sabemos como era el DUMMY.COM original, el codigo del virus se queda en pelotas, lo tenemos delante de nuestras narices. Todo lo que no sean los 90's y el codigo de salida al dos, sera parte del virus. Veras que los 3 primeros bytes (90 90 90) han sido sustituidos por (XX XX XX) que equivale a JMP XXXX que es la direccion en la que empieza el codigo del virus. En definitiva, los virus (los de sobreescritura NO, claro) generalmente hacen todos lo mismo, cogen el fichero a infectar y le a€aden al principio una instruccion de JMP que apunta al final del fichero, donde se a€ade el codigo del virus. Los bytes que se sobreescriban al principio del fichero para meter el JMP se copian en el area de datos del virus. Al ejecutar el fichero lo primero que se ejecuta es el JMP que salta al final, donde esta el codigo del virus, se ejecuta el virus que comprueba si esta residente en memoria y demas y cuando acaba vuelve al area de datos, ejecuta los 3 bytes sustituidos del inicio y luego salta al 4§ byte del programa donde se sigue ejecutando el fichero con normalidad. Fichero DUMMY.COM infectado --------------------------------------------------- | XX XX XX 90 90 90 90 90 90 90 90 90 90 90 90 90 | | . | | . (esto es nuestro dummy original) | | . | | 90 90 90 90 90 90 90 90 90 90 90 B8 00 4C CD 21 | | | | (datos del barrotes ... aqui encontraremos los 3| | 90's que nos faltan y otras cosas) | | | | (codigo del barrotes ...) | | | | (al final de todo, marca de identificacion) | | (del virus (SO)) -----------------------> 53 4F | --------------------------------------------------- *** PRIMEROS RETOQUES *** =========================== Vamos a empezar por algo sencillito, no hace falta saber nada especial para hacer esto. Cambiaremos la marca de identificacion del virus. El barrotes (y casi todos los virus) marcan el final de los ficheros que infectan con un par de bytes (el barrotes: SO == 534F hex) para evitar infectarlos mas de una vez, ya que si no lo hicieran el fichero iria creciendo y creciendo hasta explotar :-) Ademas, dentro del codigo del virus encontraremos mas veces la susodicha cadena ya que, por ejemplo, cuando el virus esta residente en memoria y ejecutamos cualquier programa, el virus compara los 2 ultimos bytes del fichero con la cadena 'SO' para ver si esta infectado y si no es el caso infectarlo. Por lo tanto un fichero infectado contiene la cadena varias veces: 1 al final, que es la marca en si y otras dentro del codigo del virus. Vamos alla: - editamos el DUMMY.COM y buscamos los 2 ultimos bytes. Si no es un BARROTES modificado, la cadena sera 'OS'. La cambiamos por otra, p. ej. 'ZX'. - buscamos en el resto del DUMMY la cadena 'SO' y la sustituimos por 'ZX' (la encontraremos 2 veces). (pista: 'XZ' es '5A 58' en hex) Pues yasta!. Hemos superado la primera prueba con exito. Los antivirus mas pobres ya no detectaran nuestra nueva version del Barrotes. Si, si como lo lees, algunos antivirus basan su busqueda en las marcas de identificacion de los virus!!. *** SEGUNDOS RETOQUES *** =========================== Una de las cosillas que hace el barrotes al ejecutarse es comprobar cual es la fecha del PC y, si por esas cosas de la vida es 5 de enero, ZASSS!, tabla de particion del disco duro a toma pol culo. Todo esto lo hace con el siguiente codigo: MOV AH,2A ;carga 2A en el registro AH INT 21 ;la int 21 (DOS) con funcion 2A devuelve la fecha CMP DX,105 ;comparamos reg. DX con 0105 (5 del 1) JNE noes5del1 ;si no es 5 del 1 se va a otra parte ... ;si es 5 del 1 sigue por aqui y ZASSS! ... Si metemos las tres primeras lineas en el debug y lo compilamos, no saldra un fichero con lo siguiente: B4 2A CD 21 81 FA 05 01 donde, como ya habras adivinado: B42A == MOV AH,2A CD21 == INT 21 81FA0501 == CMP DX,105 Vamos a fijarnos en la parte del CMP. La funcion 2A del DOS devuelve la fecha en : el registro AL, el dia de la semana (0==dom, 1==lunes, ...) el registro CX, el a€o el registro DX, el mes y el dia, es decir : el mes en DH el dia en DL El barrotes compara DH con 01 y DL con 05, o lo que es lo mismo, CX con 0105. Pues, de nuevo, yasta!! : - Si lo que queremos es que nuestro nuevo barrotes solo joda el dia del cumplea€os de la suegra, que fue un mal dia para la humanidad, cambiaremos: CMP DX,105 por ... CMP DX,mmdd donde 'mm' es el mes en que nacio la maldita y 'dd' es el dia clave ... - Si eres de los que odia la navidad, pondras : CMP DX,1225 pero no tendra mucho exito ya que el dia de navidad es fiesta y poca gente enciende el PC ... :-) Como encontrar esta parte del codigo ?. Facil. - 1Š forma : simplemente coge la cadena que hemos sacado con el debug y buscala por todo el DUMMY. - 2Š forma : como ya habras visto todas las instrucciones INT se codifican como 'CD XX' donde XX es el numero de la interrupcion. Pues busca en el DUMMY todas las cadenas 'CD21' y, si estas utilizando el editor XED, pones el cursor encima de la 'C' y con SHIFT+F10 se desensambla a partir de esa instruccion. Si la siguiente es la CMP DX,105 (o CMP DX,0105), eureka, ya lo tenemos. (pista: en el codigo hay muchos CD21, el que nos interesa es el ultimo de todos). Ahora sobreescribimos ... donde pone : .. B4 2A CD 21 81 FA 05 01 .. ponemos : .. B4 2A CD 21 81 FA 25 12 .. si odias la navidad :-) ^^ ^^ ozu, que cambiazo . :-) Ahora bien, si quisieramos que infecte el dia 13 de *cada* mes la cosa se complica y me explico: ahora queremos cambiar : CMP DX,105 por CMP DL,13 ... y el problema ?? CMP DX,105 se codifica como '81 FA 05 01' pero CMP DL,13 se codifica como '80 FA 13' ... caguenla, me falta un byte!!. No problemo. Para eso tenemos la instruccion NOP, que no hace na de na y ademas, ocupa 1 byte! Resumiendo, lo que vamos a hacer es sustituir: CMP DX,105 ;es 5 de enero ? por : NOP ;no hago na de na y relleno 1 byte CMP DL,13 ;es dia 13 ? Hala, a sobreescribir ... cambiemos pues '81 FA 05 01' por '90 80 FA 13' ^^ NOP Nuestro cada vez mas querido barrotes hace + cosas distintas. Ya le habiamos cambiado la personalidad (el cree que se llama ZX y no SO) y ademas ahora toca las pelotas el dia 13 de todos los meses. *** LA COSA VA EN SERIO ! *** =============================== El barrotes es conocido precisamente por eso, porque el dia que te casca el disco duro salen unos barrotes en pantalla y te vacilan con una frase que dice: Virus BARROTES por OSoft Esta cadena se encuentra encriptada en la zona de datos del virus de forma que con un simple type o con un edit no se vea. (La zona de datos empieza donde acaba nuestro DUMMY; justo antes de la cadena encriptada puedes encontrar la cadena 'c:\command.com'). El metodo de encriptacion es muy sencillo y consiste en sumar 50 (decimal) a cada caracter. Cuando es el momento de sacarla en pantalla, el virus la desencripta (resta 50) y la muestra. (Ojo: 56hex + 50dec == 88hex) (Ojo bis: los espacios de la cadena (32dec o 20hex) no estan encriptados y por lo tanto NO los desencripta...) La cadena en hexadecimal (sin encriptar): V i r u s B A R R O T E S p o r O S o f t 56 69 72 75 73 20 42 41 52 52 4F 54 45 53 20 70 6F 72 20 4F 53 6F 66 74 La cadena en hexadecimal (encriptada) [recuerda que sumamos 50d == C2h]: (V i r u s B A R R O T E S p o r O S o f t) 88 9B A4 A7 A5 20 74 73 84 84 81 86 77 85 20 A2 A1 A4 20 81 85 A1 98 A6 ^^ ^^ ^^ (Atencion a los espacios, siguen *igual* con 20h) Supongamos que queremos cambiar el texto por eso de vacilar un poco mas a los amiguetes ... ya que nuestro nuevo virus se activa el dia 13 de CADA mes y odiamos a nuestra suegra MARUJA podemos utilizar la siguiente cadena: "Virus LA REGLA de MARUJA" Pues a trabajar ... Nuevo texto sin encriptar: V i r u s L A R E G L A d e M A R U J A 56 69 72 75 73 20 4C 41 20 52 45 47 4C 41 20 64 65 20 4D 41 52 55 4A 41 Y ahora lo encriptamos siguiendo los pasos de antes: (V i r u s L A R E G L A d e M A R U J A) 88 9B A4 A7 A5 20 7E 73 20 84 77 79 7E 73 20 96 97 20 7F 73 84 87 7C 73 Ya lo tenemos!. Resumiendo, sustituimos en el virus la cadena: 889BA4A7A520747384848186778520A2A1A4208185A198A6 por la nueva cadena encriptada: 889BA4A7A5207E73208477797E73209697207F7384877C73 Si quieres poner una cadena distinta debes de tener en cuenta 2 cosas: - 1§ La nueva cadena debe de tener como maximo 24 caracteres ya que el bucle de desencriptado tiene solo 24 pasos (si metes mas no saldra) Virus BARROTES por OSoft XXXXXXXXXXXXXXXXXXXXXXXX nueva cadena (MAX) - 2§ Los espacios no los encriptes, dejalos con el 20h ya que el bucle de desencriptado los deja tal cual. Si tienes dudas mira el ejemplo de la suegra Maruja. Como siempre, al final de la leccion vienen los deberes para hacer en casa. :-). Como tenemos varias pistas, a saber, que el bucle consta de 24 pasos, que resta 50 decimal (C2 hex) a cada caracter y que "pasa" de los 20h, podemos buscar la parte del codigo del bucle y cambiar el n§ de encriptado para que en vez de restar 50 reste 10 o sume 15, cambiando logicamente el encriptado del texto para que la cosa salga bonita, claro. *** Y AHORA QUE ? *** ======================= Ahora se pueden hacer 1000 cosas con nuestro Maruja-barrotes: - Guardarlo en un diskete y ense€arlo a los amigos en los guateques. - Pasarle todo tipo de antivirus, te llevaras buenas sorpresas. - Enviarlo a los se€ores de McAfee y demas para que se coman el coco, lo desensamblen y trabajen un poco. Entre las 1000 cosas tambien esta, por supuesto, la opcion de que salga de paseo, pero ojo, que conste que yo no incito a nadie. (Como un dia me infecte un tal 'maruja virus' me lio a leches con tolmundo, eh!). :-D Ufff, por fin. Peazo rollo. Bueno, no seais tarugos y aprended que por ahi se empieza. X-) @1997 by +NetBuL ++++++++++++++++ 456E20 6D656D6F72696120 646520 416E64726577 ++++++++++++++++