elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
25 Mayo 2012, 21:41  


Tema destacado: Deseas probar algunas mejoras a la interfaz del foro? Prueba cake! acerca de

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderador: berz3k)
| | |-+  Un sleep para windows sin hardcodear direcciones de memoria
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Un sleep para windows sin hardcodear direcciones de memoria  (Leído 1,076 veces)
servomac

Desconectado Desconectado

Mensajes: 25


Powered by Debian Sarge & Kernel 2.6.7


Ver Perfil
Un sleep para windows sin hardcodear direcciones de memoria
« en: 16 Septiembre 2004, 02:02 »

Buenas. Estoy intentando hacer un programa que haga un simple sleep en asm para funcionar en todas las versiones de windows. El procedimiento sería el siguiente :
· Obtener dirección de memoria de Kernel32.dll
· Obtener dirección de memoria de GetProcAddres()
· Obtener dirección de memoria de Sleep usando GetProcAddress()
Así que he escrito algo leyendo por allí maneras de hacerlo, pero hay una cosa que no entiendo para nada :


;Debemos encontrar la dirección de memoria de la función GetProcAddress, que encontramos
;dentro de Kernel32
;El método que uso para localizar su dirección de memoria es "Get Ordinal and calculate the
;address"

   mov esi, dword ptr [ebx+3Ch]   ;Metemos en esi la dirección de memoria del PE Header
   add esi, ebx
   mov esi, dword ptr [esi+78h]   ;Metemos la dirección de la export table
   add esi, ebx
   mov esi, dword ptr [esi+20h]   ;export table name
   add edi, ebx
   mov ecx, dword ptr [esi+14h]   ;number of exported function "GetProcAddress"
   push esi
   xor eax, eax         ;contador


Con esto conseguimos meter la dirección de memoria de GetProcAddres en ecx, correcto.
¿Porque, justo después, empujamos el registro esi a la pila?

Porque mirad, después metemos en edi esi (supongo que dentro de esi esta la dirección de memoria de GetProcAddress ...), ponemos ecx a 0 con un xor, metemos 3 en cl y llamamos a la función loadaddr ...

;Ahora que ya tenemos la dirección de memoria de GetProcAddress podemos encontrar la dirección
;de memoria de la función Sleep

   mov edi, esi         
   xor ecx, ecx
   mov cl, 3
   call loadaddr


La verdad es que no entiendo demasiado el trozo de encontrar la dirección de GetProcAddress, ¿alguien me podria decir si esta bien codeado y explicarme que es lo que hace exactamente?

Os dejo aquí el codigo entero, ¡saludos y gracias!


;programa que calcula la dirección de memoria de Kernel32 en Windows y con esta informacion
;lanza un sleep de 5 segundos
[SECTION .text]

global _start

_start:

;Vamos a encontrar la dirección de memoria de Kernel32.dll en el sistema

   mov eax, fs:[30h]      ;Tenemos la dirección de PED_BASE en eax
   mov eax, [eax+0ch]      ;Situamos eax en PEB_LDR_DATA
   mov esi, [eax+1ch]      ;first entry in InInitializationOrderModuleList
   lodsd            ;forward to next LIST_ENTRY
   mov ebx, [eax+08h]      ;Metemos en ebx la dirección de memoria de Kernel32

;Debemos encontrar la dirección de memoria de la función GetProcAddress, que encontramos
;dentro de Kernel32
;El método que uso para localizar su dirección de memoria es "Get Ordinal and calculate the
;address"

   mov esi, dword ptr [ebx+3Ch]   ;Metemos en esi la dirección de memoria del PE Header
   add esi, ebx
   mov esi, dword ptr [esi+78h]   ;Metemos la dirección de la export table
   add esi, ebx
   mov esi, dword ptr [esi+20h]   ;export table name
   add edi, ebx
   mov ecx, dword ptr [esi+14h]   ;number of exported function "GetProcAddress"
   push esi
   xor eax, eax         ;contador

;Ahora que ya tenemos la dirección de memoria de GetProcAddress podemos encontrar la dirección
;de memoria de la función Sleep

   mov edi, esi         
   xor ecx, ecx
   mov cl, 3
   call loadaddr

;Es hora de hacer el sleep ...
   
   xor eax, eax
   mov ebx, address_of_Sleep
   mov ax, 5000         ;pausa de 5000ms
   push eax
   call ebx         ;Sleep(ms)

loadaddr:
    mov al, byte ptr [esi]
   inc esi
   test al, al
   jne loadaddr
   push ecx
   push edx
   push esi
   push ebx
   call edx
   pop edx
   pop ecx
   stosd
   loop loadaddr
   ret
En línea

"Se necesita a un ladrón para atrapar a otro ladrón, y eso no lo enseña ningún catedrático." (HVC)
Kintaro

Desconectado Desconectado

Mensajes: 74



Ver Perfil
Re: Un sleep para windows sin hardcodear direcciones de memoria
« Respuesta #1 en: 1 Octubre 2004, 13:02 »

En un traduccion que hice del hooking apis de holy_father en el punto 3.2.2 lo tienes hecho :D
En línea

¡Benkyo, benkyo, benkyo!
Kintaro

Desconectado Desconectado

Mensajes: 74



Ver Perfil
Re: Un sleep para windows sin hardcodear direcciones de memoria
« Respuesta #2 en: 1 Octubre 2004, 13:04 »

http://rootkit.host.sk/knowhow/hookinges.txt

q se m olvidaba poner el link  ;D
En línea

¡Benkyo, benkyo, benkyo!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
alternativa a sleep
PHP
z_ane_666 5 1,536 Último mensaje 24 Mayo 2011, 05:35
por El As del Club Paris
Alternativa al setinterval o sleep en javascript
Desarrollo Web
WHK 0 683 Último mensaje 6 Diciembre 2011, 14:02
por WHK
Calculo direcciones de Memoria, Paginacion
Programación General
Darksythe 1 440 Último mensaje 5 Enero 2012, 21:41
por modo_senin
Funcionamiento de varias direcciones IP en Windows?
Redes
d3xf4ult 10 1,522 Último mensaje 15 Marzo 2012, 00:11
por Bulld0z3r
Sleep Timer, temporizador automático para Windows
Noticias
wolfbcn 2 450 Último mensaje 11 Marzo 2012, 00:30
por Kase
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines