martes, 23 de octubre de 2012

Como cargar los binarios

Como cargar los binarios

A continuación veremos los metodos comunes para cargar un binario y poder examinarlo, que existen varias formas para hacer, pero en concreto trabajaremos desde la consola, para mi es mas practico que estar creando una interfaz y eso pero es a gusto de cada quien, bueno yo les muestro una forma la de cargarlos desde la consola, primero tienen que tener un binario ya creado anteriormente, yo tengo uno de un carro no hace mucho pero es una buena victima para examinar asi que tengo mi binario Car.dll, ah algo que se me pasaba la reflexión nos ayuda a examinar binarios .exe y librerias .dll claro compiladas con .Net Framework, asi que en mi caso es una dll.


Primero entenderemos las clases que nos ayudaran a cargar nuestro binario y como lo hacen!

Abrimos un proyecto de tipo Console Application y le ponen como mas les guste en mi caso le puse Evilcode! =)


Importamos la libreria System.Reflection

Para cargar un binario usaremos la clase Assembly esta nos ayudara a cargar el binario en memoria y en un propio AppDomain, que es esto?, bueno digamos que por seguridad cuando cargamos un binario en otro con Assembly esta crea un AppDomain en la cual se encargara de cargar al binario en cierto espacio de memoria el cual estara destinado solo para el y no en el mismo AppDomain de nuestro programa, en otras palabras cada binario, nuestro programa y el que hemos de cargar estaran en diferentes partes de memoria, y esto para que sirve?, como decia anteriormente por seguridad asi que si ocurre un error en la aplicación que cargamos solo se afecta ella y no nuestra aplicación, ya que tenemos una idea de donde se carga el binario ahora si cuales son las intrucciones para cargarlos?, son las siguientes:

(a)  Assembly bin=Assembly.Load("binario.exe");

(b)  Assembly bin=Assembly.LoadFrom("C:\Users\Evilcode\Visual\Projects\binario.exe");

hay otras 2 pero no las veremos aun, solo las boy a mencionar

ReflectionOnlyLoad y ReflectionOnlyLoadFrom

Ahora los analizaremos la forma (a) es la que vamos a ocupar ya que este recibe directamente al binario que en cambio a la forma (b) se tiene que especificar el string del directorio donde se encuentra y es mas vueltas, ahora que tenemos definido como vamos a cargar el binario, necesitamos ver la forma en que le vamos a extraer los datos, para eso tambien vamos a ocupar la System.Type que no es necesario importarla, para extraer todos lo Types de nuestro binario creamos la siguiente instrucción:

Type [] tipos=bin.GetTypes();

Con esto obtendremos el array de Types que tiene el binario cargado, bien ahora que sabemos la forma en que vamos a cargar nuestro binarios tendremos que hacer un poco de codigo para aceptar binarios desde consola para esto hice este pequeño programa:

static void main(string [] args)
{                                                
      if(args == null || args == 0)
      {                                          
            Console.WriteLine("No ah introducido ningun binario");
            Enviroment.Exit(1);
      }                                          
      else
      {
            Assembly bin=Assembly.Load (args[0]);
            Type[] tipos=bin.GetTypes();
      }
}                                               


Esta sera la forma en que vamos a cargar los binarios, le dejamos por el momento aqui, practiquen no hagan copy paste =). Salu2!.

No hay comentarios:

Publicar un comentario