Problemas SEH

Iniciado por byebye, 19 Agosto 2008, 22:22 PM

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

byebye

aunque se que tendria que ir en programacion lo pongo aqui ya que necesito esto para modificar el comportamiento de un programa externo.

si instalo un manejador de excepciones desde una dll este solo se ejecuta si alguna se produce dentro de la dll, si se produce en el programa ni caso. he probado a modificar el puntero al manejador del programa principal y cuando se produce la excepcion tampoco para donde tendria y no puedo depurarlo. ¿alguno tiene una idea de como poder controlar las excepciones del programa y todas sus dlls?

apuromafo CLS

hay un plugin llamado safe seh (que es para que si tienes que usar un seh seguro pues este plugin te ayuda a encontrar las direcciones)
pero igual el tema es complejo debido a que quizas desconozco de  donde se crean las excepciones, mm te sugiero que investigues las apis de raise exeption y comienzes por ahi, en caso de ser lo que creo, kill user dispach exeption o algo asi

si la idea esta en hacer algo, pues quizas intenta el  IDA para complementar depuraciones.
que realmente desconozco si maneja mejor las excepciones que el olly, pero siempre dicen que es una buena herramienta
intenta complementar entre los 2
saludos Apuromafo
espero sirva el dato

byebye

Citar(que es para que si tienes que usar un seh seguro pues este plugin te ayuda a encontrar las direcciones)

si las direcciones las tengo, el problema es que el programa sale sin pasar por las funciones.

el caso es que quiero redireccionar codigo con excepciones, voy poniendo PAGE_NOACCESS a las direcciones que necesito para cuando se ejecuten salte una excepcion "access violation", y redireccionar el codigo sin modificar un solo byte. la cosa es que dentro del mismo ejecutable haciendo pruebas funciona perfecto, pero dentro de la dll no hace ni caso.

karmany

Es un tema complicado que requiere que pruebes y pruebes...

Podrías hacer un manejador de excepciones en el .exe que cada vez que se produjese una excepción en el .exe te mandara a una dirección de una función de tu .dll y allí hacer lo que quieras y redireccionar el código. Puedes incluso en esta función generar una excepción y de este modo puedes llegar al manejador de excepciones de tu dll desde tu exe. Tendrías que tener cuidado con los retornos y restaurar los registros.

Sobre SEH ya sabes que hice un tute que te puede servir:
http://foro.elhacker.net/programacion_general/structured_exception_handling_seh_por_karmany-t173855.0.html;msg823053

Estoy seguro que darás con una solución ya que tienes experiencia.
Si no consigues nada intentaremos hacer un ejemplo.
Un saludo
karmany

byebye

#4
gracias karmany, la cosa es que el exe no es mio jeje. como ya comente es para hookear funciones sin tener que modificar nada por el tema de crc's. el problema es que tengo todo implementado, el manejador de excepciones y todo lo que necesito. como comento en los otros posts, el problema es que si instalo el SEH de toda la vida usando el registro fs el manejador saltara solo cuando una excepcion ocurra dentro de la dll que lo instala. probe entonces a usar SetUnhandledExceptionFilter que si no estoy confundido instala un manejador para el proceso y todos los hilos, el problema es que esto no deja una cola de manejadores, directamente el que llama a la funcion sobreescribe el puntero anterior y ya nunca mas se llama. para intentar que nadie llame mas a esa funcion desde dentro del proceso le puse PAGE_NOACCESS a la direccion de la api para que genere una excepcion al llamarla y en teoria vendria a mi manejador (digo en teoria pq en este caso no viene).

ahora todo esto que te cuento haciendo pruebas en un ejecutable propio me funciona de maravilla, pongo PAGE_NOACCESS a las funciones o direcciones de memoria que necesito controlar y directamente salta mi manejador. te explico mas claramente lo que hace el codigo, funciona 100% el problema es al intentar hacerlo en otro proceso desde una dll.

Pongo PAGE_NOACCESS  para la direccion/es que me interesan, esto generara un access violation al intentar ejecutar y saltara a mi manejador. en mi manejador cambio la eip por la direccion de mi codigo y modifico en este la direccion de retorno    a otra funcion mia para poder volver a proteger la direccion y que salten excepciones cada vez que se llame.

asi de simple logro hookear sin tener que modificar un solo byte, pero.... tengo el problema que te digo tengo si o si que hacerlo desde una dll y no puedo tocar nada del ejecutable.

saludos.

--------------------------------------------------------------------------------------------------
Bueno al final no queria, pero lo mas sencillo es depurar el proceso y ahi si podre enterarme de las excepciones y modificar lo que necesite. saludos y gracias.