Developer's Diary

10 julio, 2013

API GetProcAddress

Filed under: .net, API, Programación, Uncategorized — Etiquetas: , , , , , — jnavero @ 4:17 PM

Esta api es sencilla de utilizar, además se puede complementar con la anteriormente vista GetModuleHandle. Paso a explicar esta API que usaremos en el futuro 🙂

API GetProcAddress: Esta Api, carga una función dinámicamente de una dll para llamarla posteriormente.

Tipo de Función: Funciones de gestión de DLLs.

FARPROC WINAPI GetProcAddress(
_In_ HMODULE hModule,
_In_ LPCSTR lpProcName
);

Parametros:

hModule: Indica el manejador del modulo (la dll en cuestión) donde se encuentra la función que llamaremos posteriormente. Este manejador lo podemos obtener usando la API GetModuleHandle

lpProcName: Es la función propiamente dicha que llamaremos posteriormente

Retorna nulo (null) si la función no tiene éxito y una dirección de memoria donde se encuentra la función a la que llamaremos.

Ejemplo:

[DllImport("kernel32.dll", SetLastError = true)]
public static extern IntPtr GetProcAddress(IntPtr hModule, string lpProcName);

[DllImport("kernel32.dll", SetLastError = true)]
public static extern IntPtr GetModuleHandle(string lpModuleName);

[StructLayout(LayoutKind.Sequential)]
private struct SYSTEMTIME
{
public ushort wYear;
public ushort wMonth;
public ushort wDayOfWeek;
public ushort wDay;
public ushort wHour;
public ushort wMinute;
public ushort wSecond;
public ushort wMilliseconds;
}

private delegate int GetHora(out SYSTEMTIME lpSystemTime);

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
IntPtr DireccionFuncion = GetProcAddress(GetModuleHandle("kernel32.dll"), "GetSystemTime");
GetHora LaHora = (GetHora)Marshal.GetDelegateForFunctionPointer(DireccionFuncion, typeof(GetHora));

SYSTEMTIME stHora = new SYSTEMTIME();
int theResult = LaHora(out stHora);
}

En el ejemplo declaramos un delegado para poder llamar a la función posteriormente. Con la API GetModuleHandle recoge la dirección de memoria del modulo (DLL) kernel32.dll y con GetProcAdderss recupera la dirección de memoria de la función GetSystemTime. Aunque no he tratado esta función esta recupera la fecha del sistema en una estructura que he definido previamente. Con Marshal.GetDelegateForFunctionPointer convertimos el puntero no manejado a un delegado del tipo que nos interesa. y por ultimo llamamos al delegado “LaHora” con los parámetros que requiere la función GetSystemTime. Una vez ejecutado Obtendremos los resultados deseados.

Anuncios

1 comentario »

  1. […] la chicha. Dicha función usa OpenProcess para abrir el proceso (Victima). Posteriormente se usa GetProcAddress que carga LoadLibraryA de forma dinámica esta funcion junto con VirtualAllocEx nos servirán […]

    Pingback por Inyeccion DLL. Mostrando un ejemplo | Devthisblog — 11 noviembre, 2014 @ 11:43 PM


RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: