02 Introducción a la programación de virus en ASM
Temas básicos de Windows
En este capítulo vamos a ver algunos conceptos que hay que tener bien claros antes de comenzar a programar nuestro código. Vamos a ver como hace Windows para ejecutar un programa y como sería el formato básico de un programa en MASM.
Como siempre vamos a ver lo básico y le dejo a cada uno la tarea de profundizar cada tema. Aunque 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 explicar todo sobre el.
Lo que va a hacer nuestro programa es simplemente mostrar un mensaje en una ventana.
Para esto vamos a abrir el RadASM y seleccionamos Archivo -> Nuevo archivo y nos va a dejar una pantalla vacía para quecomencemos a escribir nuestro código.
Dentro de esta ventana copiamos lo siguiente:
.386
.model flat, stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
.data
mensaje db "Primer programa de prueba", 0
titulo db "Sector Virus", 0
.code
codigo:
push MB_OK + MB_ICONINFORMATION
push offset titulo
pushoffset mensaje
push 0
call MessageBox
push 0
call ExitProcess
end codigo
Antes que nada vamos a guardarlo, para esto hacemos clic en Archivo -> Guardar archivo y seleccionamos donde guardarlo. Podemos crear una carpeta donde iremos poniendo nuestro código generado, por ejemplo yo creé la carpeta C:\Laboratorio, y le ponemos algún nombre. Yo le puse asm001.asm.
Ahora hay que compilarlo yluego generar el ejecutable para poder correrlo, para esto hacemos clic primero en el icono que dice ‘Ensamblar’ y luego sobre el que dice
‘Estructurar’ (prefiero como se dice en inglés, ‘Link’ y ‘Build’).
Por último le damos a ejecutar y voilá, nos muestra la famosa ventanita con el mensaje que le pusimos.
Ahora veamos rápidamente que es cada cosa:
.386
Esto le dice al ensamblador que vamosa usar el conjunto de instrucciones del 80386, también podemos usar .486, .586., .486p, etc.
.model flat, stdcall
.model especifica el modelo de memoria del programa, en Win32 hay un solo tipo de memoria, la plana (flat). Con este modelo de memoria es como si tuviéramos 4 Gb de memoria disponible para nuestro programa (2^32 = 4294967296, ya que estamos trabajando en 32 bits).
Cuandoejecutemos nuestro programa vamos a ver esos 4 Gb de memoria, lo cual no significa que tengamos 4 Gb de memoria RAM disponible. Windows utiliza parte de la RAM y parte del disco rígido para ejecutar los programas de acuerdo al requerimiento de memoria que tenga, a este método se lo denomina ‘memoria virtual’, obviamente no utiliza disco rígido a menos que sea absolutamente necesario ya que la velocidadde acceso es mucho menor.
El SO (sistema operativo), para optimizar el proceso de manejo de memoria la fragmenta en bloques, a los cuales llama ‘páginas de memoria’, esta ‘pagina’ representa el bloque mínimo de memoria a leer o a escribir, normalmente en Windows es de 4Kb.
Para poder manejar este esquema utiliza unas tablas denominadas ‘tablas de páginas’ por medio de las cuales relacionasecciones de esa memoria que nosotros utilizamos con memoria física real.
Cuando referenciamos una dirección de memoria, Windows traduce la dirección virtual en una real, luego verifica si está cargada en memoria. En caso de que no sea así genera lo que se llama un ‘fallo de página’ y la carga en memoria RAM para que la podamos utilizar.
stdcall Indica al ensamblador el orden que debe seguirse parapasar parámetros, ‘izquierda a derecha’ o ‘derecha a izquierda’
option casemap:none
Esto simplemente le indica al compilador que sea sensible a mayúsculas y minúsculas, o sea que no es lo mismo poner messagebox que MessageBox. Cuidado con esto que a veces nos olvidamos y nos genera varios dolores de cabeza.
include
Este comando sirve para adjuntar dentro de nuestro código otros archivos...
Regístrate para leer el documento completo.