CitarCita de: kaltorak en Ayer a las 19:39Citarhttp://foro.elhacker.net/ingenieria_inversa/retos_junio_2013_de_reversing-t391311.0.html
Un saludo
Kaltorak.
eres un...precisamente tu, por favor no pongas más payasos, y explica lo del md5!!!!
EIN ????
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes MenúCitarCita de: kaltorak en Ayer a las 19:39Citarhttp://foro.elhacker.net/ingenieria_inversa/retos_junio_2013_de_reversing-t391311.0.html
Un saludo
Kaltorak.
eres un...precisamente tu, por favor no pongas más payasos, y explica lo del md5!!!!
Private Sub Form_Load()
Dim Valor As Integer
Dim Nombre As String
Dim Serial As String
Dim RegCode As String
Dim ID As String
Nombre = InputBox("Nombre:", "Arkantos Crackme5 *KeyGen*")
Serial = vbNullString
RegCode = vbNullString
ID = vbNullString
If Len(Nombre) <= 4 Then MsgBox "Nombre demasiado corto", 16, "": End: Exit Sub
Nombre = StrReverse(Nombre)
For x = 1 To Len(Nombre)
Valor = Asc(Mid(Nombre, x, 1))
Serial = Serial & Hex(Valor)
Next x
RegCode = "210579ioO-avB-pM"
ID = "ua921N" & Serial & "pnqVTm"
MsgBox "Nombre: " & StrReverse(Nombre) & vbNewLine & "Serial: " & Serial & vbNewLine & _
"RegCode: " & RegCode & vbNewLine & "ID: " & ID, 64, "Done!"
End
End Sub
Citarvamos 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í:00401000 >/$ 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL
00401002 |. 68 00304000 PUSH YourFirs.00403000 ; |Title = "YourFirstCrackme"
00401007 |. 68 43304000 PUSH YourFirs.00403043 ; |Text = "I'm an ugly nag screen. REMOVE ME!"
0040100C |. 6A 00 PUSH 0 ; |hOwner = NULL
0040100E |. E8 0D020000 CALL <JMP.&user32.MessageBoxA> ; \MessageBoxA
00401013 |. 6A 00 PUSH 0 ; /pModule = NULL
00401015 |. E8 42020000 CALL <JMP.&kernel32.GetModuleHandleA> ; \GetModuleHandleA
No tenemos que esforzarnos mucho verdad? para eliminar la nag aplicamos NOP's en: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 aqui00401178 . 68 22304000 PUSH YourFirs.00403022 ; |Text = "Debugger found!"
Subimos lineas mas arriba y analizamos el codigo00401119 . E8 44010000 CALL <JMP.&kernel32.IsDebuggerPresent> ; [IsDebuggerPresent
0040111E . 83F8 01 CMP EAX,1
00401121 . 74 4E JE SHORT YourFirs.00401171
00401123 . 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
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:00401119 E8 44010000 CALL <JMP.&kernel32.IsDebuggerPresent> ; [IsDebuggerPresent
o aqui: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 desensamblado004011A7 > 6A 10 PUSH 10 ; /Style = MB_OK|MB_ICONHAND|MB_APPLMODAL
004011A9 . 68 00304000 PUSH YourFirs.00403000 ; |Title = "YourFirstCrackme"
004011AE . 68 11304000 PUSH YourFirs.00403011 ; |Text = "CD check failed!"
Lineas mas arriba vemos el código y observamos desde donde salta00401188 E8 C9000000 CALL <JMP.&kernel32.GetDriveTypeA>
0040118D . 83F8 05 CMP EAX,5
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.00401188 E8 C9000000 CALL <JMP.&kernel32.GetDriveTypeA>
Cambiar por:00401188 B8 05000000 MOV EAX,5
--------------------------------------------------------------------------------------
2.0040118D 83F8 05 CMP EAX,5
Cambiar por:0040118D 3BC0 CMP EAX,EAX
0040118F 90 NOP
--------------------------------------------------------------------------------------
3.
Aplicar NOP's Aqui: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:004011A5 . EB 4E JMP SHORT YourFirs.004011F5
salta donde no debe asi que Redireccionamos quedando asi:004011A5 EB 48 JMP SHORT YourFirs.004011EF
y listo eso seria todo!