Foro de elhacker.net

Seguridad Informática => Análisis y Diseño de Malware => Mensaje iniciado por: Belial & Grimoire en 26 Junio 2012, 22:05 pm



Título: como encontrar y usar LoadLibrary y Getprocaddress usando PEB?
Publicado por: Belial & Grimoire en 26 Junio 2012, 22:05 pm
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

Código
  1. #include <windows.h>
  2. #include <stdio.h>
  3.  
  4. int main()
  5. {
  6.  
  7. __asm{
  8.  
  9. xor eax, eax
  10. mov eax, fs:[0x30]
  11. mov eax, [eax+0x0C]
  12. mov eax, [eax+0x1C]
  13. mov eax, [eax]
  14. mov eax, [eax+0x08]
  15. mov ebx, eax
  16. add ebx, [eax + 0x3C]
  17. cmp ebx, 'PE'
  18. je bien
  19.  
  20.  
  21. }
  22. bien:
  23. MessageBox(0, "bien hecho", "mensaje", 0 );
  24.  
  25. }

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


Título: Re: como encontrar y usar LoadLibrary y Getprocaddress usando PEB?
Publicado por: Иōҳ en 27 Junio 2012, 01:25 am
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.


Título: Re: como encontrar y usar LoadLibrary y Getprocaddress usando PEB?
Publicado por: x64core 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 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


Título: Re: como encontrar y usar LoadLibrary y Getprocaddress usando PEB?
Publicado por: zu-zu en 30 Junio 2012, 03:21 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? (?).

Citar
aqui 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?.