Ya hace más de una semana que prometí subir esta segunda parte, pero
me han surgido algunos problemas personales y demás preparativos para el
próximo curso y demás cosas que me han retrasado un poco pero ya
regreso sin problemas.
Este capítulo lo llamaremos “comenzando con el desarrollo del virus”
Desde ahora empezaremos con el desarrollo de nuestro malware, pero
vamos, que no podemos iniciar sin antes explicar cosas muy básicas para
empezar a programar, les explicare algunas cosas básicas de la
programación en Radasm y dejare algunas referencias sobre programación
en este IDE
Iniciamos abriendo radasm, como ya vimos en la primer parte, al crear un nuevo proyecto teníamos la opción de elegir una plantilla, pero en este caso no queremos usarla..
Bien Lo siguiente es tener la pantalla limpia y empezaremos por
copiar ahí dentro, el siguiente código que solo lanzara un mensaje pero
es ideal para comenzar a explicarles..
Copien lo siguiente:
Algunos se preguntaran porque no escribo el texto, pero lo ideal es
que lo transcriban lo que se ve en la imagen y eso les ayudara para
entender para que se sirve cada parte, les explicare a detalle:
.386
Esto le dice al ensamblador que vamos a usar el conjunto de
instrucciones del 80386, también podemos usar .486, .586., .486p, etc.
.model flat, stdcall
Esto indica el modelo de memoria, en Win32 hay un solo tipo de memoria, la plana (flat).
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 relaciona secciones 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 para pasar parámetros, ‘izquierda a derecha’ o ‘derecha a izquierda’
option casemap:none
Su función es indicarle al compilador que distinga entre mayúsculas y minúsculas.
includelib
Sirve para indicarle al compilador que librerías necesitamos que nos importe para poder ejecutar nuestro programa.
Dentro de nuestros programas en Windows, nos ofrece una serie de
funciones llamadas APIs (Application Programming Interface), que
significa ‘Interface de Programación de Aplicaciones’. Estas funciones
residen en librerías de enlace dinámico (DLLs) como son kernel32.dll,
user32.dll, etc.
Este proceso se realiza por medio de las famosas IT (Import Table) e
IAT (Import Address Table) las cuales veremos mas adelante.
.data
.data nos sirve para declarar variables.
.code
code es donde se encuentra el código ejecutable de nuestro programa.
El IDE nos facilita algunas cosas por ejemplo al escribir alguna API,
en el caso de MessageBox, nos ayuda indicándonos que parámetros ubicar,
el handle, el offset del texto, el caption,etc
Ahora bien, en el menú podemos configurar la ruta donde se encuentra
nuestro debugger, por ejemplo, hacemos click en “opciones”, seguidamente
“fijar rutas” :
Y únicamente en la casilla debug buscamos la carpeta y listo,
guardamos los cambios, para posteriormente presionar el método abreviado
“Control + D” y automáticamente nos abrirá el programa dentro de
nuestro debugger:
Si vemos con atención los parámetros empiezan a empujar con PUSH a la
pila (stack) desde el último parámetro al primero, desde style,
terminando en Howner que es el hWnd o handle de la ventana.
La pila o stack es un área de memoria usada por el programa para guardar variables
Temporales, argumentos de funciones, direcciones de memoria, etc.
Se basa en una metodología denominada LIFO (last in, first out), o
sea que el último en entrar será el primero en salir. Para entender
mejor 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.
¿Cómo podemos conocer un poco mas sobre las apis y descripción sobre
su funcionamiento?, así como los parámetro que debemos usar?
sencillo, podemos buscar en google, lo cual microsoft nos ofrece mucha ayuda:
Como ven, la información que nos brindan es muy detallada, podemos apoyarnos siempre de esta manera.
Lo mismo podríamos buscar la API ExitProcess y ver una descripción de sus parámetros y como funciona.
Ahora bien ya que hayan absorbido esta información, los siguientes
donde entraremos directo a las tecnicas de programacion del bicho serán
mas sencillos, pero igual me gustaría dejarles enlace a unos tutoriales
de programación en este entorno por si alguien quiere practicar antes de
comenzar con la parte mas interesante! Que es lo que a completa este capítulo!, sin más les dejo el enlace :
http://uppit.com/dv2h7cowgatg/Programacion_MASM+RADASM.rar
No hay comentarios:
Publicar un comentario