CREANDO MALWARED DESDE CERO 2

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..
1

2


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:


3

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

4
Ahora bien, en el menú podemos configurar la ruta donde se encuentra nuestro debugger, por ejemplo, hacemos click en “opciones”, seguidamente “fijar rutas” :


5

6

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


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:

8 9 10


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