elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Structured Exception Handler
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Structured Exception Handler  (Leído 3,360 veces)
Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Structured Exception Handler
« en: 13 Mayo 2020, 18:56 pm »

Hola,

pongo el tema aqui porque me refiero precisamente a su programacion en ensamblador.

Estoy intentando modificar el SEH para especificar la rutina de manejo de exception. Sin embargo lo hice de esta manera:

Código
  1. MOV ESI, OFFSET handler
  2. MOV DWORD PTR FS:[0], ESI
  3. ;...
  4.  

Y no funciono. Luego busque un poco en internet y encontre esto:

Código
  1. MOV ESI, OFFSET handler
  2. PUSH ESI
  3. PUSH DWORD PTR FS:[0] ;supongo que esto se utiliza como algun tipo de firma
  4. MOV DWORD PTR FS:[0], ESP
  5. ;...
  6.  

Este si funciona. Lo que no entiendo es por que.
¿alguien sabe por que, o en donde podria encontrar una explicacion?

Saludos y gracias de antemano.


En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.935


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Structured Exception Handler
« Respuesta #1 en: 13 Mayo 2020, 19:51 pm »

Es que no se pone un puntero a funcion ahi sino un puntero a una estructura que apunta a la estructura que estaba ahi anteriormente en su primer campo y tiene otro campo mas que es el puntero al manejador. Y asi es como se construye la cadena de manejadores.

Mas informacion en el archivo:
https://web.archive.org/web/20041011152640fw_/http://www.spiff.tripnet.se/~iczelion/Exceptionhandling.html

Y si depuramos con el WinDbg el siguiente ejemplo:
Código
  1. .386
  2. .model flat, stdcall
  3.  
  4. includelib kernel32.lib
  5. ExitProcess PROTO stdcall :DWORD
  6.  
  7. .code
  8. main:
  9. int 3
  10. assume fs:nothing
  11.  
  12. MOV ESI, OFFSET handler
  13. PUSH ESI
  14. PUSH DWORD PTR FS:[0]
  15. MOV DWORD PTR FS:[0], ESP
  16.  
  17. xor eax, eax
  18. mov eax, dword ptr [eax]
  19. ret
  20.  
  21.  
  22. handler:
  23. invoke ExitProcess, 1
  24. ret
  25. end main

Podemos ver que al principio:
dd fs:0 l1
0053:00000000  006ff930

dd 006ff930 l2
006ff930  006ff948 77a788c0

u 77a788c0 l1
ntdll!_except_handler4:
77a788c0 8bff            mov     edi,edi

dd 006ff948 l2
006ff948  ffffffff 77a853d2

u 77a853d2 l1
ntdll!FinalExceptionHandlerPad50:
77a853d2 90              nop

Y no seguimos que ffffffff debe ser el señalador de fin de cadena.

Ahora ejecutamos nuestro programa hasta MOV DWORD PTR FS:[0], ESP

dd fs:0 l1
0053:00000000  006ff8d0

 dd 006ff8d0 l2
006ff8d0  006ff930 008d101a ;en rojo la ultima estructura que existia hasta entonces

u 008d101a
seh+0x101a:
008d101a 6a01            push    1
008d101c e801000000      call    seh+0x1022 (008d1022)
008d1021 c3              ret


u 008d1022
seh+0x1022:
008d1022 ff2500208d00    jmp     dword ptr [seh+0x2000 (008d2000)]

dps 008d2000 l1
008d2000  754a4f20 KERNEL32!ExitProcessImplementation


« Última modificación: 13 Mayo 2020, 19:59 pm por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Re: Structured Exception Handler
« Respuesta #2 en: 13 Mayo 2020, 20:32 pm »

Podemos ver que al principio:
dd fs:0 l1
0053:00000000  006ff930

dd 006ff930 l2
006ff930  006ff948 77a788c0

u 77a788c0 l1
ntdll!_except_handler4:
77a788c0 8bff            mov     edi,edi

dd 006ff948 l2
006ff948  ffffffff 77a853d2

u 77a853d2 l1
ntdll!FinalExceptionHandlerPad50:
77a853d2 90              nop

Y no seguimos que ffffffff debe ser el señalador de fin de cadena.

Ahora ejecutamos nuestro programa hasta MOV DWORD PTR FS:[0], ESP

dd fs:0 l1
0053:00000000  006ff8d0

 dd 006ff8d0 l2
006ff8d0  006ff930 008d101a ;en rojo la ultima estructura que existia hasta entonces

u 008d101a
seh+0x101a:
008d101a 6a01            push    1
008d101c e801000000      call    seh+0x1022 (008d1022)
008d1021 c3              ret


u 008d1022
seh+0x1022:
008d1022 ff2500208d00    jmp     dword ptr [seh+0x2000 (008d2000)]

dps 008d2000 l1
008d2000  754a4f20 KERNEL32!ExitProcessImplementation

De esto puedo intentar deducir un monton de cosas aunque no se utilizar WinDbg.

Citar
Podemos ver que al principio:
dd fs:0 l1
0053:00000000  006ff930

¿Entonces existe un solo manejador de excepcion el cual se encuentra en 053h:0?
(supongo que dd es un comando y tendra que ver con dump)

Código:
dd 006ff930 l2
006ff930  006ff948 77a788c0

u 77a788c0 l1
ntdll!_except_handler4:
77a788c0 8bff            mov     edi,edi

dd 006ff948 l2
006ff948  ffffffff 77a853d2

Imagino que esta es la estructura... ¿por que termina en 0ffffffffh? es decir ¿no deberia tener un tamano fijo?  :huh:

Código:
u 008d101a
seh+0x101a:
008d101a 6a01            push    1
008d101c e801000000      call    seh+0x1022 (008d1022)
008d1021 c3              ret

Bueno este debe ser el manejador... esto explica por que no podia repetirlo las veces que queria sin utilizar la pila.

Gracias por responder y disculpa mi ignorancia (jaja).
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.935


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Structured Exception Handler
« Respuesta #3 en: 13 Mayo 2020, 20:37 pm »

De esto puedo intentar deducir un monton de cosas aunque no se utilizar WinDbg.

Si vas a trabajar en Windows es el depurador por excelencia.

¿Entonces existe un solo manejador de excepcion el cual se encuentra en 053h:0?

No, es una cadena, por eso se usa la estructura, lee el enlace que deje antes. Si el primero de la lista retorna que no manejo el error entonces el proceso de la cadena continua llamando al siguiente.

Imagino que esta es la estructura... ¿por que termina en 0ffffffffh? es decir ¿no deberia tener un tamano fijo?  :huh:

La estructura tiene un tamaño fijo, son dos campos, el primero es un puntero a una estructura de su mismo tipo (para hacer la cadena; es una simple lista) y el segundo es el puntero al manejador, como decia el tamaño es fijo, dos punteros, dos DWORDs, 8 bytes (todo esto en 32 bits).

Bueno este debe ser el manejador... esto explica por que no podia repetirlo las veces que queria sin utilizar la pila.

Si, ese es el manejador de mi ejemplo (el que llama a ExitProcess), si simplemente lo pusiera en fs:[0] el codigo de Windows lo usaria como un puntero a la estructura y por eso fallaria.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Re: Structured Exception Handler
« Respuesta #4 en: 15 Mayo 2020, 18:31 pm »


Voy a leer esto antes de hacer las preguntas que tengo acerca de lo que dijiste en el ultimo mensaje.

Si vas a trabajar en Windows es el depurador por excelencia.

Hablando de depuradores... no se si sea mas adecuado hacer un nuevo tema pero ¿existe una manera de que un depurador -o un depurador en si que- tenga permisos de ring 0? (me refiero a acceder a la memoria, escribir en puertos, etc...).

Gracias por responder.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.935


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Structured Exception Handler
« Respuesta #5 en: 15 Mayo 2020, 18:41 pm »

Hablando de depuradores... no se si sea mas adecuado hacer un nuevo tema pero ¿existe una manera de que un depurador -o un depurador en si que- tenga permisos de ring 0? (me refiero a acceder a la memoria, escribir en puertos, etc...).

Si pero se necesitan dos maquinas (con una sola penas podes ver), la depurada puede ser virtual, y configurar el SO de la maquina depurada para que habilite el depurador de modo Kernel:
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/setting-up-kernel-mode-debugging-in-windbg--cdb--or-ntsd

No hay codigo para depurar pero si simbolos (PDBs en un servidor publico de Microsoft).
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Structured Exception Handling (SEH) por karmany
Programación General
karmany 3 6,228 Último mensaje 22 Agosto 2010, 17:47 pm
por jackgris
Proyecto Image Handler
Java
Mr.LInk 3 3,185 Último mensaje 17 Septiembre 2009, 22:38 pm
por Debci
[SOLUCIONADO] Handler vb net
.NET (C#, VB.NET, ASP)
Rudy21 2 4,079 Último mensaje 23 Septiembre 2011, 20:28 pm
por Rudy21
Tutorial - Stack overflow bypassing SEH "Structured Exception Handler"
Bugs y Exploits
soez 5 5,395 Último mensaje 10 Marzo 2012, 17:02 pm
por jackgris
kali handler
Bugs y Exploits
legion 5 3,295 Último mensaje 22 Noviembre 2018, 16:03 pm
por bl4ckdr4g0n
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines