Página 1 de 1

Cargando Librerias en runtime

Publicado: 22 Mar 2009, 04:58
por leos_79
bueno esto ya es algo viejito pero capaz alguno le de algun uso.
se trata de cargar las librerias y las funciones , en el runtime.

por ejemplo:

si usamos la funcion VirtualProtectEx() , del kernel32.dll

basta con declararla dependiendo el lenguaje

por ejemplo normalmente hariamos:
function VirtualProtectEx(hProcess: THandle; lpAddress: Pointer;
dwSize, flNewProtect: DWORD; lpflOldProtect: Pointer): BOOL;
external 'kernel32.dll' name 'VirtualProtectEx';

y la usamos normalmente

VirtualProtectEx(blabablab);

y en los imports figurara , la funcion y su dll.





pero si la queremos cargar en el runtime y que no aparesca en la Iat


program loaddll;
uses windows;

type
TProtegeme = function VirtualProtectEx(hProcess: THandle; lpAddress: Pointer;
dwSize, flNewProtect: DWORD; lpflOldProtect: Pointer): BOOL;



var
protegeme : TProtegeme;
kernelhnd: Thandle;


begin

kernelhnd := LoadLibrary('kernel32.dll');
@protegeme := GetProcAddress(kernelhnd,'VirtualProtectEx');

protegeme(y aca la llamamos normalmente);

end.

primero declaramos un TIPO de funcion. despues declaramos una variable de ese tipo.
y un handle que va a ser usado para la libreria que queremos cargar, en este caso el famoso kernel

primero , llamamos a loadlibrary() , que nos devuelve un manejador/handle a el kernel32.dll
luego , con ese handle , le asignamos a nuestra variable de función, la direccion de la función que precisamos.

y listo estamos listo para usar nuestra funcion cargada en runtime.





bueno podemos encriptar tmb los string kernel32 y , virtualprotectex
con algun bonito algoritmo.

nota: el codigo es de explicacion y obvie ciertas comprobaciones para hacer mas limpio y entendible el codigo



espero que les sirva , un abrazo!

Re: Cargando Librerias en runtime

Publicado: 22 Mar 2009, 12:21
por Thor
Y ya si se quieren cargar APIs sin ni siquiera usar directamente estas dos funciones (hallando la dll en memoria, y buscando en la export table)
[Enlace externo eliminado para invitados] ... 0Solid.rar
[Enlace externo eliminado para invitados] ... 0Solid.rar

Me los pasaron de [Enlace externo eliminado para invitados], gran grupo.

Re: Cargando Librerias en runtime

Publicado: 22 Mar 2009, 20:27
por leos_79
excelente Thor , es la forma de hacerlo , con el PEB , no?

Re: Cargando Librerias en runtime

Publicado: 22 Mar 2009, 20:54
por Thor
No, no usa el PEB para nada. El manual está explicado muy muy bien, te animo a que lo ojees.

Re: Cargando Librerias en runtime

Publicado: 23 Mar 2009, 01:22
por leos_79
ahora lo veo , gracias! :D

Re: Cargando Librerias en runtime

Publicado: 23 Mar 2009, 14:34
por QuoRuS
Thor Se agradece

Yo habia encontrado algo similar pero algo mas antiguo

[Enlace externo eliminado para invitados]


Gracias por el aporte


Salu2

Re: Cargando Librerias en runtime

Publicado: 23 Mar 2009, 17:37
por leos_79
muy buenos sus aportes QuoRuS y Thor, yo habia puesto algo basico y ustedes saltaron con esos
aportazos! :D

en especial muy buena la parte de buscar la direccion del GetProcAddress , en la dll , manualmente.
se me habia ocurrido ,pero supuse q iba a estar en algun paper.

saludos!!