Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: kaltorak en 30 Mayo 2013, 18:47 pm



Título: Retos Junio 2013 De reversing
Publicado por: kaltorak en 30 Mayo 2013, 18:47 pm
Hola a todos.

Este mes me encargo yo de subir los retos y gestionar la lista de los participantes, así Flamer se puede relajar un poco.
Espero que participéis muchos este mes, recordar que tenéis que enviarme a mí los retos resueltos para que los poste a final de mes.

1 - cc14 --> 1- Simple CrackMe #1-Bloc.

2 - crackme#1.LightHash.

3 - Crackme5.

4 - InjectMe_#2.

5 - LeeviON__sCrackme.

6 - YourFirst.

Retos:
ultrashare.net/hosting/fl/95d86db57a (http://ultrashare.net/hosting/fl/95d86db57a)

Reglas:
http://foro.elhacker.net/ingenieria_inversa/retos_mensuales_de_reversing-t371874.0.html (http://foro.elhacker.net/ingenieria_inversa/retos_mensuales_de_reversing-t371874.0.html)


Debido a que el Crackme cc14 no puede ser resulto lo hemos cambiado por el Simple CrackMe #1-Bloc
Siento las molestias que os haya podido ocasionar el problema con el cc14
Aquí tenéis el enlace de descarga del nuevo Crackme.

Simple CrackMe #1-Bloc: http://ultrashare.net/hosting/fl/69df35b9f4 (http://ultrashare.net/hosting/fl/69df35b9f4)


Lista de Ganadores
-----------------------------------------------------------------
|  Usuario        |      Reto    |                Logro               |
-----------------------------------------------------------------
|   FaQuiVer     |       2       |                 serial               |
----------------------------------------------------------------
|   FaQuiVer     |       3       |         Tutorial y Keygen     |
----------------------------------------------------------------
|   FaQuiVer     |       6       |                Tutorial            |
----------------------------------------------------------------
| PeterPunk77  |       1       |               Serial               |
----------------------------------------------------------------
| PeterPunk77  |       2       |               Resuelto           |
----------------------------------------------------------------
| PeterPunk77  |       3       |               Resuelto           |
----------------------------------------------------------------
| PeterPunk77  |       4       |               Resuelto           |
----------------------------------------------------------------
| PeterPunk77  |       5       |               Resuelto           |
----------------------------------------------------------------
| PeterPunk77  |       6       |               Resuelto           |
----------------------------------------------------------------
| CraZy7BiTS   |       1       |               Serial               |
----------------------------------------------------------------
| CraZy7BiTS   |       6       |               Resuelto           |
----------------------------------------------------------------


Soluciones FaQuiVer

-----------------------------------------------------------
2 - crackme#1.LightHash
-----------------------------------------------------------
Name:  FaQuiVer
Serial:  227378-30-3871
-----------------------------------------------------------

-----------------------------------------------------------
3 - Crackme5.
-----------------------------------------------------------

KeyGen:

    
Código
  1.    Private Sub Form_Load()
  2.    Dim Valor As Integer
  3.    Dim Nombre As String
  4.    Dim Serial As String
  5.    Dim RegCode As String
  6.    Dim ID As String
  7.    Nombre = InputBox("Nombre:", "Arkantos Crackme5 *KeyGen*")
  8.    Serial = vbNullString
  9.    RegCode = vbNullString
  10.    ID = vbNullString
  11.    If Len(Nombre) <= 4 Then MsgBox "Nombre demasiado corto", 16, "": End: Exit Sub
  12.    Nombre = StrReverse(Nombre)
  13.    For x = 1 To Len(Nombre)
  14.    Valor = Asc(Mid(Nombre, x, 1))
  15.    Serial = Serial & Hex(Valor)
  16.    Next x
  17.    RegCode = "210579ioO-avB-pM"
  18.    ID = "ua921N" & Serial & "pnqVTm"
  19.    MsgBox "Nombre: " & StrReverse(Nombre) & vbNewLine & "Serial: " & Serial & vbNewLine & _
  20.          "RegCode: " & RegCode & vbNewLine & "ID: " & ID, 64, "Done!"
  21.    End
  22.    End Sub
   


-----------------------------------------------------------
6 - YourFirst Crackme
-----------------------------------------------------------

Citar
vamos por partes, lo que necesitamos es ollydbg 1.10 sin cambios ni plugin

los objetivos son:

- nag
- AntiDebug
- PassCdCheck

Primero la nag!

al abrir el crackme en ollydbg caemos directamente aquí:

Código
  1.    00401000 >/$ 6A 00          PUSH 0                                   ; /Style = MB_OK|MB_APPLMODAL
  2.    00401002  |. 68 00304000    PUSH YourFirs.00403000                   ; |Title = "YourFirstCrackme"
  3.    00401007  |. 68 43304000    PUSH YourFirs.00403043                   ; |Text = "I'm an ugly nag screen. REMOVE ME!"
  4.    0040100C  |. 6A 00          PUSH 0                                   ; |hOwner = NULL
  5.    0040100E  |. E8 0D020000    CALL <JMP.&user32.MessageBoxA>           ; \MessageBoxA
  6.    00401013  |. 6A 00          PUSH 0                                   ; /pModule = NULL
  7.    00401015  |. E8 42020000    CALL <JMP.&kernel32.GetModuleHandleA>    ; \GetModuleHandleA


No tenemos que esforzarnos mucho verdad?  para eliminar la nag aplicamos NOP's en:


Código
  1.    0040100E  |. E8 0D020000    CALL <JMP.&user32.MessageBoxA>           ; \MessageBoxA


Con esto nos libramos de la nag, guardamos cambios y seguimos con el Antidebug

Al correr el crackme nos salta un mensaje con este texto:

---------------------------
YourFirstCrackme
---------------------------
Debugger found!
---------------------------
Aceptar  
---------------------------

que hacemos? pues... buscamos todas las referencias de texto, ubicamos "Debugger found!"

ENTER en la cadena para caer en el desensamblado

Caemos directamente aqui



Código
  1.    00401178   . 68 22304000    PUSH YourFirs.00403022                   ; |Text = "Debugger found!"


Subimos lineas mas arriba y analizamos el codigo


Código
  1.    00401119   . E8 44010000    CALL <JMP.&kernel32.IsDebuggerPresent>   ; [IsDebuggerPresent
  2.    0040111E   . 83F8 01        CMP EAX,1
  3.    00401121   . 74 4E          JE SHORT YourFirs.00401171
  4.    00401123   . 8B45 0C        MOV EAX,DWORD PTR SS:[EBP+C]
  5.    00401126   . 3D 10010000    CMP EAX,110
   



Observamos IsDebuggerPresent que es una funcion de windows para detectar debugeo

ese call nos devuelve 0 si no hay y 1 si hay un debugger presente

0040111E   . 83F8 01        CMP EAX,1 <--- aqui la condición

EAX almacena el resultado ( 0 o 1 ) y compara, si se cumple salta directamente al msgbox de "Debugger found!"

00401121   . 74 4E          JE SHORT YourFirs.00401171

Solucion!

NOP's Aqui:


Código
  1.    00401119     E8 44010000    CALL <JMP.&kernel32.IsDebuggerPresent>   ; [IsDebuggerPresent

o aqui:


Código
  1.    00401121   . 74 4E          JE SHORT YourFirs.00401171


Cualquiera de las dos opciones es valida, guardamos cambios y listo!

------------------------------------------------------------------------------------

Ahora PassCdCheck

Igual para este vemos que nos muestra un mensaje con este texto:

---------------------------
YourFirstCrackme
---------------------------
CD check failed!
---------------------------
Aceptar  
---------------------------

Buscamos referencias, ubicamos CD check failed! ENTER para caer en el desensamblado


Código
  1.    004011A7   > 6A 10          PUSH 10                                  ; /Style = MB_OK|MB_ICONHAND|MB_APPLMODAL
  2.    004011A9   . 68 00304000    PUSH YourFirs.00403000                   ; |Title = "YourFirstCrackme"
  3.    004011AE   . 68 11304000    PUSH YourFirs.00403011                   ; |Text = "CD check failed!"

Lineas mas arriba vemos el código y observamos desde donde salta


Código
  1.    00401188     E8 C9000000    CALL <JMP.&kernel32.GetDriveTypeA>
  2.    0040118D   . 83F8 05        CMP EAX,5
  3.    00401190   . 75 15          JNZ SHORT YourFirs.004011A7


Al tracear observo que esta función "GetDriveTypeA" me devuelve un valor de 3 el cual se almacena en EAX y se compara con 5. Obviamente no se cumple asi que salta al mensaje de error

3 Soluciones! aplicar cualquiera da el mismo resultado.

1.
Código
  1.    00401188     E8 C9000000    CALL <JMP.&kernel32.GetDriveTypeA>

Cambiar por:

Código
  1.    00401188     B8 05000000    MOV EAX,5

--------------------------------------------------------------------------------------

2.

Código
  1. 0040118D     83F8 05        CMP EAX,5

Cambiar por:


Código
  1.    0040118D     3BC0           CMP EAX,EAX
  2.    0040118F     90             NOP

--------------------------------------------------------------------------------------

3.
Aplicar NOP's Aqui:

Código
  1. 00401190   . 75 15          JNZ SHORT YourFirs.004011A7


--------------------------------------------------------------------------------------


Guardamos cambios utilizando cualquiera de las 3 soluciones y ya se nos muestra el mensaje bueno! aun que observo un detalle, luego de aceptar el mensaje bueno el Crackme rompe o crashea!


vuelvo al olly y luego del mensaje bueno observo esto:


Código
  1.   004011A5   . EB 4E          JMP SHORT YourFirs.004011F5


salta donde no debe asi que Redireccionamos quedando asi:


Código
  1.    004011A5     EB 48          JMP SHORT YourFirs.004011EF


y listo eso seria todo!


Soluciones PeterPunk77

-----------------------------------------------------------
1 - Simple CrackMe #1-Bloc.
-----------------------------------------------------------
User:  |Usuario|
Pass:  |J5L2C-K4B8L-D2K9S|

-----------------------------------------------------------

-----------------------------------------------------------
2 - crackme#1.LightHash.

3 - Crackme5.

4 - InjectMe_#2.

5 - LeeviON__sCrackme.

6 - YourFirst.
-----------------------------------------------------------

Soluciones: http://ultrashare.net/hosting/fl/a6bdccb84c (http://ultrashare.net/hosting/fl/a6bdccb84c)
pass: "elhackerforum" (sin comillas).

-----------------------------------------------------------

Soluciones CraZy7BiTS

-----------------------------------------------------------
1 - Simple CrackMe #1-Bloc.
-----------------------------------------------------------

User:  |Usuario|
Pass:  |J5L2C-K4B8L-D2K9S|

-----------------------------------------------------------



Un Saludo
Kaltorak.


Título: Re: Retos Junio 2013 De reversing
Publicado por: karmany en 31 Mayo 2013, 20:37 pm
Gran trabajo y gracias por tu tiempo. Tal vez me apunte a alguno.

Vamos, que es fin de semana!! echarles un vistazo!!


Título: Re: Retos Junio 2013 De reversing
Publicado por: kaltorak en 4 Junio 2013, 06:11 am
Muchas Gracias karmany, si tienes un hueco adelante aquí te esperamos.

Sé que es difícil sacar un ratito pero animo chicos que no son muy difíciles, veréis que se resuelven en nada de tiempo.






Título: Re: Retos Junio 2013 De reversing
Publicado por: EscritoEstáSatanás en 6 Junio 2013, 08:05 am
YourFirst -> Listo.

INT3

Una pista : cuando vayan a nopear o cambiar el salto para pasar el cd-check.

Va a ver un problema con un comando arriba mencionado.

Tienen que buscar los Jumps Que van a dar hacia "INT3"

y cambiarlos donde hay un "XOR EAX,EAX".

Bueno pueden resolverlo de otra manera, pero es la que me funciono a la perfección a mí.

El nag esta facil, eso se los dejo a ustedes.

Gracias por la colección.
 ;-)

Se que este es el mas facil de todos, pero como soy novato tambien quiero ayudar.


Título: Re: Retos Junio 2013 De reversing
Publicado por: kaltorak en 17 Junio 2013, 08:55 am
Hola a todos

Debido a que el Crackme cc14 no puede ser resulto lo hemos cambiado por el Simple CrackMe #1-Bloc.
Siento las molestias que os haya podido ocasionar el problema con el cc14
Aquí tenéis el enlace de descarga del nuevo Crackme.

Simple CrackMe #1-Bloc: http://ultrashare.net/hosting/fl/69df35b9f4

Y de paso actualizo la lista con los participantes que han enviado los retos resueltos.

Un saludo
kaltorak..



Título: Re: Retos Junio 2013 De reversing
Publicado por: Flamer en 17 Junio 2013, 16:08 pm
balla peterpunk esta partisipando me sorprende

saludos flamer


Título: Re: Retos Junio 2013 De reversing
Publicado por: kaltorak en 1 Julio 2013, 18:54 pm
Hola a todos

Como ya ha terminado el mes actualizo la lista y coloco las respuestas enviadas.

Un saludo
Kaltorak.