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!