API GetProcAddress « Devthisblog

Devthisblog Desarrollo .net, Diseño Web, Seguridad… Y todo lo que se me vaya ocurriendo…

julio 10, 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.

 C# | 
 
 copy code |
?

1
FARPROC WINAPI GetProcAddress(
2
  _In_  HMODULE hModule,
3
  _In_  LPCSTR lpProcName
4
);

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:

 C# | 
 
 copy code |
?

01
       
02
        [DllImport("kernel32.dll", SetLastError = true)]
03
        public static extern IntPtr GetProcAddress(IntPtr hModule, string lpProcName);
04
 
05
        [DllImport("kernel32.dll", SetLastError = true)]
06
        public static extern IntPtr GetModuleHandle(string lpModuleName);
07
 
08
        [StructLayout(LayoutKind.Sequential)]
09
        private struct SYSTEMTIME
10
        {
11
            public ushort wYear;
12
            public ushort wMonth;
13
            public ushort wDayOfWeek;
14
            public ushort wDay;
15
            public ushort wHour;
16
            public ushort wMinute;
17
            public ushort wSecond;
18
            public ushort wMilliseconds;
19
        }
20
 
21
        private delegate int GetHora(out SYSTEMTIME lpSystemTime);
22
 
23
        public Form1()
24
        {
25
            InitializeComponent();
26
        }
27
 
28
        private void button1_Click(object sender, EventArgs e)
29
        {
30
            IntPtr DireccionFuncion = GetProcAddress(GetModuleHandle("kernel32.dll"), "GetSystemTime");
31
            GetHora LaHora = (GetHora)Marshal.GetDelegateForFunctionPointer(DireccionFuncion, typeof(GetHora));
32
 
33
            SYSTEMTIME stHora = new SYSTEMTIME();
34
            int theResult = LaHora(out stHora);
35
        }
36

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.

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 by Inyeccion DLL. Mostrando un ejemplo | Devthisblog — noviembre 11, 2014 @ 11:43 pm

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress