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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: karmany, .:UND3R:., MCKSys Argentina)
| | |-+  Problema con SetUnhandledExceptionFilter y Curso
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con SetUnhandledExceptionFilter y Curso  (Leído 2,695 veces)
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Problema con SetUnhandledExceptionFilter y Curso
« 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
En línea

.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: Problema con SetUnhandledExceptionFilter y Curso
« Respuesta #1 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
  1. 00401000 >/$  68 08114000   PUSH Sphynx.00401108                     ; /pTopLevelFilter = Sphynx.00401108

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
  1. 00401108   .  8B75 08       MOV ESI,DWORD PTR SS:[EBP+8]
  2. 0040110B   .  8B46 04       MOV EAX,DWORD PTR DS:[ESI+4]
  3. 0040110E   .  05 B8000000   ADD EAX,0B8
  4. 00401113   .  8BF0          MOV ESI,EAX
  5. 00401115   .  8B00          MOV EAX,DWORD PTR DS:[EAX]
  6. 00401117   .  83C0 0E       ADD EAX,0E
  7. 0040111A   .  8906          MOV DWORD PTR DS:[ESI],EAX
  8. 0040111C   .  A1 53314000   MOV EAX,DWORD PTR DS:[403153]
  9. 00401121   .  33C9          XOR ECX,ECX
  10. 00401123   .  33D2          XOR EDX,EDX
  11. 00401125   .  33FF          XOR EDI,EDI
  12. 00401127   >  0FBEB9 543040>MOVSX EDI,BYTE PTR DS:[ECX+403054]
  13. 0040112E   .  81C2 78563412 ADD EDX,12345678
  14. 00401134   .  D1D2          RCL EDX,1
  15. 00401136   .  13D7          ADC EDX,EDI
  16. 00401138   .  81C2 21436587 ADD EDX,87654321
  17. 0040113E   .  41            INC ECX
  18. 0040113F   .  3BC8          CMP ECX,EAX
  19. 00401141   .^ 75 E4         JNZ SHORT Sphynx.00401127
  20. 00401143   .  81FA 382AB4C3 CMP EDX,C3B42A38
  21. 00401149   .  75 32         JNZ SHORT Sphynx.0040117D
  22. 0040114B   .  33C9          XOR ECX,ECX
  23. 0040114D   .  33D2          XOR EDX,EDX
  24. 0040114F   .  BE 07304000   MOV ESI,Sphynx.00403007
  25. 00401154   .  BF 63314000   MOV EDI,Sphynx.00403163
  26. 00401159   .  8A56 12       MOV DL,BYTE PTR DS:[ESI+12]
  27. 0040115C   >  8A0431        MOV AL,BYTE PTR DS:[ECX+ESI]
  28. 0040115F   .  32C2          XOR AL,DL
  29. 00401161   .  880439        MOV BYTE PTR DS:[ECX+EDI],AL
  30. 00401164   .  41            INC ECX
  31. 00401165   .  83F9 31       CMP ECX,31
  32. 00401168   .^ 75 F2         JNZ SHORT Sphynx.0040115C
  33. 0040116A   .  6A 00         PUSH 0                                   ; /Style = MB_OK|MB_APPLMODAL
  34. 0040116C   .  68 63314000   PUSH Sphynx.00403163                     ; |Title = ""
  35. 00401171   .  68 76314000   PUSH Sphynx.00403176                     ; |Text = ""
  36. 00401176   .  6A 00         PUSH 0                                   ; |hOwner = NULL
  37. 00401178   .  E8 19000000   CALL <JMP.&user32.MessageBoxA>           ; \MessageBoxA
  38. 0040117D   >  33C0          XOR EAX,EAX
  39. 0040117F   .  48            DEC EAX
  40. 00401180   .  C9            LEAVE
  41. 00401181   .  C2 0400       RETN 4

*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
  1. 00401084   > \68 FF000000   PUSH 0FF                                 ; /Count = FF (255.)
  2. 00401089   .  68 54304000   PUSH Sphynx.00403054                     ; |Buffer = Sphynx.00403054
  3. 0040108E   .  68 E9030000   PUSH 3E9                                 ; |ControlID = 3E9 (1001.)
  4. 00401093   .  FF75 08       PUSH DWORD PTR SS:[EBP+8]                ; |hWnd
  5. 00401096   .  E8 F5000000   CALL <JMP.&user32.GetDlgItemTextA>       ; \GetDlgItemTextA
  6. 0040109B   .  83F8 01       CMP EAX,1
  7. 0040109E   .  A3 53314000   MOV DWORD PTR DS:[403153],EAX
  8. 004010A3   .  7D 02         JGE SHORT Sphynx.004010A7
  9. 004010A5   .  EB 57         JMP SHORT Sphynx.004010FE
  10. 004010A7   >  E8 02010000   CALL <JMP.&kernel32.IsDebuggerPresent>   ; [IsDebuggerPresent
  11. 004010AC   .  83F8 00       CMP EAX,0
  12. 004010AF   .  75 2B         JNZ SHORT Sphynx.004010DC
  13. 004010B1   .  A1 53314000   MOV EAX,DWORD PTR DS:[403153]
  14. 004010B6   .  33C9          XOR ECX,ECX
  15. 004010B8   .  33D2          XOR EDX,EDX
  16. 004010BA   .  33FF          XOR EDI,EDI
  17. 004010BC   >  0FBEB9 543040>MOVSX EDI,BYTE PTR DS:[ECX+403054]
  18. 004010C3   .  13D7          ADC EDX,EDI
  19. 004010C5   .  D1D2          RCL EDX,1
  20. 004010C7   .  41            INC ECX
  21. 004010C8   .  3BC8          CMP ECX,EAX
  22. 004010CA   .^ 75 F0         JNZ SHORT Sphynx.004010BC
  23. 004010CC   .  8915 04114000 MOV DWORD PTR DS:[401104],EDX
  24. 004010D2   .  81FA 72930100 CMP EDX,19372
  25. 004010D8   .  74 09         JE SHORT Sphynx.004010E3
  26. 004010DA   .  EB 22         JMP SHORT Sphynx.004010FE
  27. 004010DC   >  E8 BB000000   CALL <JMP.&kernel32.DebugBreak>          ; [DebugBreak

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
  1. 004010AF   . /75 2B         JNZ SHORT Sphynx.004010DC

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

« Última modificación: 9 Octubre 2012, 03:29 am por .:UND3R:. » En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
PeterPunk77

Desconectado Desconectado

Mensajes: 77



Ver Perfil
Re: Problema con SetUnhandledExceptionFilter y Curso
« Respuesta #2 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
00401005  |. E8 AA010000    CALL <JMP.&kernel32.SetUnhandledExceptio>; \SetUnhandledExceptionFilter
por lo que veo que intuyo que el programa va a generar una excepción para ejecutar el código que se encuentra a partir de 0x401108. Así que:
Código:
BPX 401108
Y como me suena que el UnhandledExceptionFilter no funciona igual mientras estás debuggeando al programa debido al uso de ZwQueryInformationProcess, le pongo un punto de ruptura:
Código:
BP UnhandledExceptionFilter
También aprovecho para "nopear":
Código:
004010AF     75 2B          JNZ SHORT Sphynx.004010DC
porque como he dicho no tengo ningún plugin y debo que evitar el IsDebuggerPresent.
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
769976F9   68 18789976      PUSH kernel32.76997818
769976FE   E8 ED9EFDFF      CALL kernel32.769715F0
76997703   C745 E0 06000000 MOV DWORD PTR SS:[EBP-20],6
7699770A   33F6             XOR ESI,ESI
7699770C   8975 E4          MOV DWORD PTR SS:[EBP-1C],ESI
7699770F   8975 DC          MOV DWORD PTR SS:[EBP-24],ESI
76997712   8975 D8          MOV DWORD PTR SS:[EBP-28],ESI
76997715   8B5D 08          MOV EBX,DWORD PTR SS:[EBP+8]
76997718   8B03             MOV EAX,DWORD PTR DS:[EBX]
7699771A   F640 04 10       TEST BYTE PTR DS:[EAX+4],10
7699771E   0F85 40020000    JNZ kernel32.76997964
76997724   C745 D4 01000000 MOV DWORD PTR SS:[EBP-2C],1
7699772B   8138 090400C0    CMP DWORD PTR DS:[EAX],C0000409
76997731   0F84 3F0A0000    JE kernel32.76998176
76997737   53               PUSH EBX
76997738   E8 AC010000      CALL kernel32.769978E9
7699773D   83F8 FF          CMP EAX,-1
76997740   0F84 25020000    JE kernel32.7699796B
76997746   E8 16010000      CALL kernel32.76997861
7699774B   85C0             TEST EAX,EAX
7699774D   0F85 11020000    JNZ kernel32.76997964
He copiado hasta ahí, porque en este último salto ya me iría por mal camino (vamos, que EAX tendría que estar a 0 y yo lo tengo a 1). Así que cambio el Z Flag para que no salte y le doy a F9, con lo que ya consigo que el Olly se me pare con "Breakpoint at Sphynx.00401108".

Saludos.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Curso ASP
Tutoriales - Documentación
el-brujo 0 22,321 Último mensaje 28 Agosto 2002, 15:58 pm
por el-brujo
Curso Ethical Hacker, opiniones sobre un curso Online « 1 2 »
Foro Libre
jpmo4 17 25,725 Último mensaje 8 Julio 2010, 14:56 pm
por unixgeek
Curso web :: IA
Foro Libre
Hadess_inf 1 1,743 Último mensaje 4 Junio 2010, 03:22 am
por @synthesize
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines