como encontrar y usar LoadLibrary y Getprocaddress usando PEB?

Iniciado por Belial & Grimoire, 26 Junio 2012, 22:05 PM

0 Miembros y 1 Visitante están viendo este tema.

Belial & Grimoire

Hola tengo unas dudas sobre PEB

bueno, ya entendi como se encuentra PEB gracias al blog de Nox donde te explica sobre eso

estuve haciendo pruebas para verificar si lo que hacia estaba bien, perdon por poner una mezcla de ASM y C pero no encontre otra manera de verificar que realmente la comparacion de PE fuera exacto

#include <windows.h>
#include <stdio.h>

int main()
{

__asm{

xor eax, eax
mov eax, fs:[0x30]
mov eax, [eax+0x0C]
mov eax, [eax+0x1C]
mov eax, [eax]
mov eax, [eax+0x08]
mov ebx, eax
add ebx, [eax + 0x3C]
cmp ebx, 'PE'
je bien


}
bien:
MessageBox(0, "bien hecho", "mensaje", 0 );
getchar();

}


ahora, lo que sabia es que despues de esto tenia que llegar a IMAGE DATA DIRECTORY, donde se encuentra RVA o VirtualAddress

aqui no se dos cosas, cual es el tamaño de IMAGE_OPTIONAL_HEADER?

acaso son 0x78?

entonces seria 0x76 y 0x78 empieza IMAGE_DATA_DIRECTORY?

y lo que tendria que seguir en el codigo para llegar a EAT seria?
Citar
mov ebx, [ebx + 0x78]

y bueno, de aqui que mas tendria que hacer para encontrar por ejemplo, LoadLibraryA y Getprocaddress?

e visto que buscan direccion de nombres [0x20] y numero de nombres [0x18] e incluso veo que se saltan eso y van directo a [0x24] que seria numero de funciones

me gustaria hacer un ejercicio para mostrar un MessageBox cargando user32.dll con LoadLibrary y mostrando MessageBoxA con GetprocAddress y ponerle algun mensaje, todo usando PEB

espero me puedan ayudar

P.D. Nox, me podrias decir que compilador usaste para compilar el ejemplo de tu blog, porfavor?

salu2
.                                 

Иōҳ

Eso lo hice en la sintaxys de masm32, para el mismo ensamblador.

Mira aquí te dejo esto, zeropad ha vuelto y está terminando su trabajo:
http://ricardonarvaja.info/WEB/OTROS/PROGRAMACION%20DE%20VIRUS/

Él obtiene el módulo del kernel32 a través del stack, que sería lo "mismo" que lo hagas con el PEB, entonces sitúate en el momento donde ya encontró el módulo de kernel y se dispone a obtener la función getproceaddress, que ahí lo explica detallado.

También te recomiendo que leas sobre sobre el Formato PE.

Saludos,
Nox.
Eres adicto a la Ing. Inversa? -> www.noxsoft.net

x64core

Accediendo al PEB no es necesaria ninguna API para usar las DLL's. con obtener la direccion base de un modulo ya reemplazas
la LoadLibrary/GetModuleHandle y luego con esa direccion vas recorriendo la estructura del modulo hasta llegar a la tabla de
exportaciones y simular la Getprocaddress, leer los documentos de la estructura PE

zu-zu

Cita de: RHL en 27 Junio 2012, 10:57 AM
Accediendo al PEB no es necesaria ninguna API para usar las DLL's. con obtener la direccion base de un modulo ya reemplazas
la LoadLibrary/GetModuleHandle

Técnicamente, sólo se evita el uso de GetModuleHandle(). ¿O es que acaso podemos cargar librerías sólo leyendo la PEB? (?).

Citaraqui no se dos cosas, cual es el tamaño de IMAGE_OPTIONAL_HEADER?

acaso son 0x78?

Lamentablemente no tengo memoria fotográfica, sin embargo, ¿no sería mejor definir las estructuras correspondientes para evitar esta clase de complicaciones?.