Sie sind auf Seite 1von 9

Introduccin a la programacin de virus en ASM zeroPad

captulo 2

Captulo 2 Temas bsicos de Windows


En este captulo vamos a ver algunos conceptos que hay que tener bien claros antes de comenzar a programar nuestro cdigo. Vamos a ver como hace Windows para e ecutar un programa y como sera el !ormato b"sico de un programa en #$%#. Como siempre vamos a ver lo b"sico y le de o a cada uno la tarea de pro!undizar cada tema. $unque parezca menos importante& si realmente queremos programar virus de calidad es necesario que se entiendan determinadas cosas. Empecemos. Vamos a realizar nuestro primer programa en assembler para e'plicar todo sobre el. (o que va a hacer nuestro programa es simplemente mostrar un mensa e en una ventana. )ara esto vamos a abrir el *ad$%# y seleccionamos $rchivo +, -uevo archivo y nos va a de ar una pantalla vaca para que comencemos a escribir nuestro cdigo. .entro de esta ventana copiamos lo siguiente/ .012 .model !lat& stdcall option casemap/none include windows.inc include user02.inc include 3ernel02.inc includelib user02.lib includelib 3ernel02.lib .data mensa e titulo .code codigo/ push push push push call #6789 : #67;C8-;-<8*#$=;8o!!set titulo o!!set mensa e 5 #essage6o' db 4)rimer programa de prueba4& 5 db 4%ector Virus4& 5

push 5 call E'it)rocess end codigo

zeroPad2000@gmail.com

pg 1

Introduccin a la programacin de virus en ASM zeroPad

captulo 2

$ntes que nada vamos a guardarlo& para esto hacemos clic en $rchivo +, >uardar archivo y seleccionamos donde guardarlo. )odemos crear una carpeta donde iremos poniendo nuestro cdigo generado& por e emplo yo cre? la carpeta C/@(aboratorio& y le ponemos algAn nombre. Bo le puse asm55C.asm. $hora hay que compilarlo y luego generar el e ecutable para poder correrlo& para esto hacemos clic primero en el icono que dice DEnsamblarE y luego sobre el que dice DEstructurarE Fpre!iero como se dice en ingl?s& D(in3E y D6uildEG.

)or Altimo le damos a e ecutar y voil"& nos muestra la !amosa ventanita con el mensa e que le pusimos.

$hora veamos r"pidamente que es cada cosa/ .386 Esto le dice al ensamblador que vamos a usar el con unto de instrucciones del 15012& tambi?n podemos usar .H12& .I12.& .H12p& etc.

.model flat, stdcall .model especi!ica el modelo de memoria del programa& en Win02 hay un solo tipo de memoria& la plana F!latG. Con este modelo de memoria es como si tuvi?ramos H >b de memoria disponible para nuestro programa F2J02 K H2LHL2M2L2& ya que estamos traba ando en 02 bitsG. Cuando e ecutemos nuestro programa vamos a ver esos H >b de memoria& lo cual no signi!ica que tengamos H >b de memoria *$# disponible. Windows utiliza parte de la *$# y parte del disco rgido para e ecutar los programas de acuerdo al requerimiento de memoria que tenga& a este m?todo se lo denomina Dmemoria virtualE& obviamente no utiliza disco rgido a menos que sea absolutamente necesario ya que la velocidad de acceso es mucho menor.

zeroPad2000@gmail.com

pg 2

Introduccin a la programacin de virus en ASM zeroPad

captulo 2

El %8 Fsistema operativoG& para optimizar el proceso de mane o de memoria la !ragmenta en bloques& a los cuales llama Dp"ginas de memoriaE& esta DpaginaE representa el bloque mnimo de memoria a leer o a escribir& normalmente en Windows es de H9b. )ara poder mane ar este esquema utiliza unas tablas denominadas Dtablas de p"ginasE por medio de las cuales relaciona secciones de esa memoria que nosotros utilizamos con memoria !sica real. Cuando re!erenciamos una direccin de memoria& Windows traduce la direccin virtual en una real& luego veri!ica si est" cargada en memoria. En caso de que no sea as genera lo que se llama un D!allo de p"ginaE y la carga en memoria *$# para que la podamos utilizar. stdcall ;ndica al ensamblador el orden que debe seguirse para pasar par"metros& Dizquierda a derechaE o Dderecha a izquierdaE option casemap:none Esto simplemente le indica al compilador que sea sensible a mayAsculas y minAsculas& o sea que no es lo mismo poner messagebo' que #essage6o'. Cuidado con esto que a veces nos olvidamos y nos genera varios dolores de cabeza. include Este comando sirve para ad untar dentro de nuestro cdigo otros archivos Fgeneralmente con e'tensin .incG que incluyen variables& estructuras y de!iniciones de !unciones para luego poder utilizarlas& por e emplo/ #67;C8-ENC($#$=;8equ 05h

#essage6o'$ )*8=8 /.W8*.&/.W8*.&/.W8*.&/.W8*. En el primer caso se trata de la declaracin de una constante& el segundo caso es la de!inicin del prototipo de una $);. includelib %irve para indicarle al compilador que libreras necesitamos que nos importe para poder e ecutar nuestro programa. Veamos un poco m"s que es esto de libreras y !unciones. )ara que podamos e ecutar nuestros programas& Windows nos provee una coleccin de !unciones que se denominan $);s F$pplication )rogramming ;nter!aceG& o sea D;nter!ace de )rogramacin de $plicacionesE. Estas !unciones residen en libreras de enlace din"mico F.((sG como son 3ernel02.dll& user02.dll& etc. Estas !unciones no se incluyen directamente en nuestro programa& sino que en el mismo se generan referencias para que en el momento de su e ecucin las pueda utilizar y sepa donde encontrarlas. Esto proceso se realiza por medio de unas tabla que se incluyen en nuestros programas denominadas ;= F;mport =ableG e ;$= F;mport $ddress =ableG.

zeroPad2000@gmail.com

pg 3

Introduccin a la programacin de virus en ASM zeroPad

captulo 2

6"sicamente& cuando Windows carga nuestro programa para e ecutarlo lo que hace es ver esas tablas para saber que !unciones necesita y llena las mismas con las direcciones en memoria donde residen estas !unciones. Esto es as para que nuestro programa pueda ser e ecutado en distintas )Cs o con distintos sistemas operativos& e incluso con distintas versiones del mismo %8& las cuales a veces cargan las !unciones en distintas zonas de memoria. Esta mec"nica garantiza la compatibilidad entre los distintos %8. #as adelante vamos a ver esto con un poco m"s de pro!undidad& ya que es un tema b"sico para la creacin de nuestros especimenes. .data / .code Esto determina las secciones que va a tener nuestro programa. (o que hace esto es dividir nuestro cdigo en segmentos lgicos& cada uno de los cuales va a tener un !in espec!ico& por e emplo .data es para declarar variables y .code para alo ar el cdigo e ecutable de nuestro programa. )odemos tener varias secciones mas como puede ser .const para las constantes o .dataO para las variables no inicializadas Fse reserva un espacio de memoria pero no se determina su valor inicialG. )ara ver esto un poco me or e ecutemos el 8lly.6> y abramos el programa que acabamos de crear. (uego presionamos sobre el icono que nos muestra la memoria F#G/

8lly nos muestra un mapa de memoria en donde veremos los segmentos que tiene asignado nuestro programa.

$c" vamos a distinguir/ . . . . la la la la primera indica la direccin a partir de la cual comienza ese bloque de memoria segunda indica el tamaPo que ocupa tercera el nombre del programa que la est" utilizando cuarta el nombre de la seccin& ac" vemos las dos que de!inimos m"s una tercera llamada .rdata donde tenemos el detalle de las !unciones importadas& y una que dice )E header& esto lo vamos a ver luego mas detalladamente db "Primer pro rama de prueba", !

mensaje

%eguimos con el programa& esta lnea lo que hace es de!inir una variable llamada Dmensa eE del tipo byte Fdb K data byteG inicializada como Q)rimer programa de pruebaR y terminada en 5& a estas cadenas se las denomina asciiz& son strings terminados en cero& para indicar donde terminan. $parte de datos del tipo byte FdbG& tenemos/ dw/ data word FC2 bytesG dd/ data double word F02 bytesG

zeroPad2000@gmail.com

pg 4

Introduccin a la programacin de virus en ASM zeroPad

captulo 2

codi o: ...... ...... end codi o Esto indica donde comienza y termina nuestro cdigo& el nombre es arbitrario& y le podramos haber puesto virus.....end virus o lo que quisi?ramos. pus" ! call #$itProcess Esta es una llamada tpica a una $);& primero se empu an a la pila los par"metros necesarios Fya vamos a ver de que se trata esto de la pila mas detalladamenteG y luego se llama a la !uncin. En este caso la !uncin es E'it)rocess con el par"metro cero& la cual termina nuestro programa Fy le devuelve el control al %8G con el valor que queremos que retorne& en este caso cero. Veamos algo& cuando instalamos los programas ba amos un archivo llamado W;-02.S()& bueno en ?l est"n las de!iniciones de las $);s. Veamos un e emplo. $brimos *ad$%#& y presionamos $yuda +, Win02 $pi/

En la bAsqueda tipeamos #essage6o' y presionamos el botn D#ostrarE. -os mostrar" el detalle de la !uncin& los par"metros que hay que pasarle y los valores que devuelve/ The MessageBox function creates, displays, and operates a message box. The message box contains an application-defined message and title, plus any combination of predefined icons and push buttons. int MessageBox( HWN hWnd, !! handle of o"ner "indo" #$%T&T' lpText, !! address of text in message box #$%T&T' lp%aption, !! address of title of message box ()NT uType !! style of message box *+ .............. ..............

zeroPad2000@gmail.com

pg 5

Introduccin a la programacin de virus en ASM zeroPad

captulo 2

)ara usarla en nuestro cdigo tenemos que poner en la pila Fstac3G los par"metros y luego llamamos a la !uncin con el comando call/

push push push push call

MB,-. / MB,)%-N)N0-'M1T)-N offset titulo offset mensa2e 3 MessageBox

MB,-. y MB,)%-N)N0-'M1T)-N son dos constantes que est"n de!inidas en el archivo windows.inc que inclumos anteriormente. %i quieren verlo est" dentro de C/@masm02@include. %tac& (a pila o stac3 es un "rea de memoria usada por el programa para guardar variables temporales& argumentos de !unciones& direcciones de memoria& etc. %e basa en una metodologa denominada (;<8 Flast in& !irst outG& o sea que el Altimo en entrar ser" el primero en salir. )ara entender me or esto imaginemos una pila de libros& donde vamos poniendo uno encima del otro y cuando queremos sacar uno empezamos siempre por el que tenemos en la parte superior. )or este motivo los par"metros que empu amos a la pila antes de llamar a la !uncin se colocan en orden inverso a como lo vemos en la ayuda Fo o con estoG. $lgo m"s que vemos en el cdigo que generamos es el operador offset& el cual es usado para pasar la direccin de una etiqueta a una !uncin& o o& no el valor& sino la direccin donde se encuentra en memoria. $bramos el 8lly y carguemos el programa.

Vemos que el 8lly detecta autom"ticamente la llamada a #essage6o' y nos pone un detalle de los par"metros que le pasamos. Veamos en el segundo push& lo que hace es empu ar en la pila el valor H505C$ Tqu? es estoO -ada m"s ni nada menos que la direccin de nuestra variable DtituloE en memoria& esto lo podemos ver en la ventana dump. -os paramos sobre la ventana de dump Fvolcado de memoriaG y presionamos Ctrl+>& este comando es para buscar una direccin de memoria. ;ntroducimos H505C$ y le damos D89E.

Vemos que nos muestra el mensa e que habamos puesto. =engamos bien presente esto ya que es b"sico& no pasamos el mensa e en s& sino una re!erencia al mismo.

zeroPad2000@gmail.com

pg 6

Introduccin a la programacin de virus en ASM zeroPad

captulo 2

$ntes de continuar veamos unos conceptos que tambi?n son importantes. Cuando nuestro programa est" en disco no puede realizar ninguna accin& para que esto suceda el %8 operativo tiene que De ecutarloE& b"sicamente lo que hace el %8 como vimos antes es crear un espacio de memoria para alo arlo y crea tambi?n unas estructuras para poder correrlo. *ecordemos que estamos en un entorno multiproceso por eso Windows debe mantener varios procesos e ecut"ndose a la vez Fpara de!inir proceso digamos que es un programa en e ecucinG. El %8 lleva una tabla por cada proceso en e ecucin llamada )E6 F)rocess Environment 6loc3G donde contiene datos del proceso para luego retomar su e ecucin. $dem"s de procesos tenemos algo llamado threads& esto b"sicamente signi!ica Uhilo de e ecucinE. )or cada proceso tenemos por lo menos uno. (os hilos permiten dividir un programa en m"s de una tarea para que corran simult"neamente FmultiprogramacinG. )ara mane ar esta in!ormacin el %8 mantiene una estructura llamada =;6 F=hread ;n!ormation 6loc3G. (os threads comparten la C)V de la misma !orma que lo hacen los procesos& sin embargo los threads de un proceso no son independientes ya que todos comparten el mismo espacio de direcciones& las mismas variables globales& el mismo con unto de archivos abiertos& los procesos hi os& etc. $bramos nuestro querido 8lly.6> y llamemos nuevamente a nuestro programa. )resionemos sobre la opcin D%how threadsE F=G/

B veremos los hilos de e ecucin de nuestro proceso. En este caso tenemos solo un proceso con un Anico hilo pero segAn el programa ac" podemos tener varios.

=ambi?n podemos ver todos los procesos en e ecucin en este momento en nuestra computadora& si en Windows presionamos Ctrl+$lt+%upr y elegimos la opcin D$dministrador de tareasE& y luego vamos a la solapa que dice D)rocesosE/

zeroPad2000@gmail.com

pg 7

Introduccin a la programacin de virus en ASM zeroPad

captulo 2

)ara terminar& veamos que son los DmdulosE de un programa. Cuando Win02 carga el programa para ser e ecutado necesita de ciertos recursos que el %8 pone a su disposicin. Estos recursos son los mdulos& y van a estar compuestos por el propio programa y todas las libreras que necesite F3ernel02.dll& user02.dll& etc.G. Cada mdulo en memoria se correlaciona directamente con un archivo en alguna parte del disco. Vn ENE o un .(( por s mismo no es un mdulo& el cargador FloaderG lo tiene que cargar primero en memoria. Como siempre& veamos esto en 8lly. $bramos nuevamente nuestro programa y presionemos sobre el icono D%how modulesE FEG/

Vamos a ver los mdulos que utiliza nuestro programa/

(a in!ormacin que nos muestra es la siguiente/ . . . . . . base de la memoria a partir de la cual es cargado tamaPo punto de entrada FE) K entry pointG& esto lo vamos a ver mas adelante nombre versin del archivo ruta en el disco y nombre del programa

zeroPad2000@gmail.com

pg 8

Introduccin a la programacin de virus en ASM zeroPad

captulo 2

6ueno& esto es todo por ahora. %e que la introduccin se est" haciendo larga& pero es importante ver estos temas y tenerlos bien claros para que luego se entienda lo que viene.

*e!erencias

. )rogramacin con #$%#:*$.$%# de $lan #oreno y *edSWw3 Fcaptulo 2G . =utorial de $%# de ;czelion Fparte C y 2G

6ueno& se !ue la segunda entrega& nos vemos en la pr'ima. // zero)ad // $bril de 255M

zeroPad2000@gmail.com

pg 9

Das könnte Ihnen auch gefallen