Título: Problema con SetUnhandledExceptionFilter y Curso Publicado por: x64core en 8 Octubre 2012, 21:29 pm saludos a todos tengo ya algunos dias de seguir el curso de ricardo narvaja, así no me sido dificil ni un poco seguirlo por la experiencia que ya tenia pero tengo algunos problemas con la leccion 22, con el crackme "Sphynx", donde enseña a saltarse el
truco de las exceptiones, bueno estaba en windows 7 y estaba siguiendo los pasos y como que el olly no hace o se va hacia otra direccion y/o termina. luego pense que quiza era porque tendria que ser en XP, ok lo probe en windows XP pero tampoco funciono. pongo un bp en SetUnhandledExceptionFilter y UnhandledExceptionFilter run, captura la direccion de la excepcion, pongo el bp: 00401108 . 8B75 08 MOV ESI,DWORD PTR SS:[EBP+8] 0040110B . 8B46 04 MOV EAX,DWORD PTR DS:[ESI+4] 0040110E . 05 B8000000 ADD EAX,0B8 00401113 . 8BF0 MOV ESI,EAX 00401115 . 8B00 MOV EAX,DWORD PTR DS:[EAX] 00401117 . 83C0 0E ADD EAX,0E (misma direccion) todo bien. luego run, carga el programa, escribo algo, check, y para en 7C8645AA UnhandledExceptionFilter 68 48020000 PUSH 248 7C8645AF 68 8850867C PUSH kernel32.7C865088 luego run, y se detiene en 004010CC . 8915 04114000 MOV DWORD PTR DS:[401104],EDX 004010D2 . 81FA 72930100 CMP EDX,19372 004010D8 . 74 09 JE SHORT Sphynx.004010E3 004010DA . EB 22 JMP SHORT Sphynx.004010FE 004010DC > E8 BB000000 CALL <JMP.&kernel32.DebugBreak> ; [DebugBreak 004010E1 . EB 13 JMP SHORT Sphynx.004010F6 004010E3 > 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL 004010E5 . 68 63314000 PUSH Sphynx.00403163 ; |Title = "" 004010EA . 68 76314000 PUSH Sphynx.00403176 ; |Text = "" 004010EF . 6A 00 PUSH 0 ; |hOwner = NULL 004010F1 . E8 A0000000 CALL <JMP.&user32.MessageBoxA> ; \MessageBoxA con: debbugged program was unable to process exception en seven es peor porque para en DebugBreak y luego termina con TerminateProcess osea no captura nada. alguien puede hecharle un ojo por favor? aqui esta el programa del curso: http://www.mediafire.com/?3cmxaa81bxs8ec8 Título: Re: Problema con SetUnhandledExceptionFilter y Curso Publicado por: .:UND3R:. en 9 Octubre 2012, 03:27 am No recuerdo muy bien este tutorial pero intentaré hacer un análisis rápido de lo que puedo ver, al iniciar el crackme se logra visualizar a simple vista que no posee ningún tipo de protección de packer, además:
OEP: Código
además de eso vemos que lo primero que intenta hacer el programa es instalar un manejador de excepciones (destacamos dos tipos de manejadores de excepciones, uno utilizado comúnmente llamando a SetUnhandledExceptionFilter (esta API recibe un puntero a la función o dirección encargada de manejar las excepciones) o instalando un manejador por hilos (thread) alterando la estructura ERR (exception registration record) ubicada en dentro del TIB (thread information block) Si nos dirigimos a dirección encargada de manejar las excepciones veremos lo siguiente: Código
*Colocamos un BP al inicio Sin indagar supongo que el ejecutable tiende a generar una excepción intencionalmente con la finalidad de pasar por algún tipo de validación. Ahora tu posible falencia: si ponemos un BP en 00401108 y damos run(F9) OllyDbg se detiene y nos avisa lo siguiente: DebugBreak Called from 004010DC si nos dirigimos ahí veremos lo siguiente: Código
Como puedes ver la API IsDebugPresent detectó que el proceso estaba siendo debugeado (FS:[30] + 2 bytes) ya detectado llamó a la API DebugBreak, por lo que deberíamos nopear el salto: Código
Luego si sigues traceando podrás ver el punto en donde se genera la excepción, si la saltas con Shift + F8, verás que OllyDbg se detiene justo al inicio del manejador de excepciones, en donde mostrará un mensaje si es que hemos acertado. Saludos Título: Re: Problema con SetUnhandledExceptionFilter y Curso Publicado por: PeterPunk77 en 9 Octubre 2012, 18:12 pm Buenas RHL,
a ver, yo no he hecho nunca el curso de Ricardo Narvaja :silbar: pero acabo de ver el crackme por encima y parece resoluble en W7 64 bits sin ningún plugin. Arranco el programa con el Olly y veo: Código: 00401000 >/$ 68 08114000 PUSH Sphynx.00401108 ; /pTopLevelFilter = Sphynx.00401108 Código: BPX 401108 Código: BP UnhandledExceptionFilter Código: 004010AF 75 2B JNZ SHORT Sphynx.004010DC Corro el programa, introduzco algo en el serial, y al probar el Olly me para con "Breakpoint at kernel32.UnhandledExceptionFilter : Código: 769976F7 > 6A 5C PUSH 5C Saludos. |