• Crackme v2 en visual basic

 #248300  por linkgl
 30 Nov 2010, 05:46
Fue más fácil que el anterior xDD pss no pondré el pass pero para sacarlo:

Buscamos las strings en el olly


Encontramos la cadena que nos dice cuando sacamos correcto el crackme, entonces la seguimos en el dissambler y buscamos la primera comparación que está en 00401FCB en mi caso y colocamos un breakpoint mas arribita de la comparación donde toma los valores yo lo coloqué en 00401FC9


Luego corremos el programa con F9 ponemos un password cualquiera como linkgl en mi caso y cuando llegamos al breakpoint trazamos con F8 y vemos que mueve la cadena del pass que pusimos de EDX a EAX y luego a ECX y luego seguimos traceando y en 00401FBD nos tira el password en EDX XDD! y listo:

Pista: la pass es de 4 carácteres

 #248361  por linkgl
 30 Nov 2010, 15:39
Pues como te había mencionado, puedes encriptar la string y hacer una rutina confusa sumandole restandole y multiplicandole valores a la string y al momento de compararla no concactenar toda la cadena en una variable por que si no ahí tirará el password.! Lo ideal sería que pusieras no solo una contraseña para todas las PC si no que pusieras un campo para escribir un nombre y abajo el campo para el serial, así tomas el nombre y le sumas valores o los restas y con el nombre generas un serial único ;) Esa es la idea pues y no uses msgbox es fácil identificar las llamadas a las APIS con ollydbg! xD son un par de sugerencias de un novato(yo) en esto jeje
 #248365  por ap0calypt0
 30 Nov 2010, 16:07
Código: [ Debe registrarse para ver este enlace ]
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Sub cmdPulsador_Click()
Dim texto As String
Dim crackme As String
Dim mas As String
mas = 10
crackme = 1024 / 2 * mas
texto = (txtContraseña.Text)
If texto = crackme Then
Call MsgBox("Correcto. Me has crackeado", vbExclamation, Me.Caption)
x = ShellExecute(Me.hwnd, "Open", "www.indetectables.net", &O0, &O0, SW_NORMAL)
Else
Call MsgBox("Intentalo de nuevo", vbCritical, Me.Caption)
End If
End Sub
Este es el source. Dividi y multiplique pero parece que hay que hacerlo mas complejo aun...

Pd: Gracias por la respuesta. Hare lo que dijiste...
 #248371  por PeterPunk
 30 Nov 2010, 16:24
ap0calypt0 escribió:Eres muy bueno en eso. Entonces como podria ponerle mas seguridad para que no salga tan facil....
linkgl escribió:Pues como te había mencionado, puedes encriptar la string y hacer una rutina confusa sumandole restandole y multiplicandole valores a la string y al momento de compararla no concactenar toda la cadena en una variable por que si no ahí tirará el password.! Lo ideal sería que pusieras no solo una contraseña para todas las PC si no que pusieras un campo para escribir un nombre y abajo el campo para el serial, así tomas el nombre y le sumas valores o los restas y con el nombre generas un serial único ;) Esa es la idea pues y no uses msgbox es fácil identificar las llamadas a las APIS con ollydbg! xD son un par de sugerencias de un novato(yo) en esto jeje
Y a poder ser, nunca hagas una comparación directa como en este caso ya que con poner un breakpoint en __vbaStrCmp ya puedes ver en la pila (en el ollydbg lo que aparece abajo a la derecha) el serial introducido y el válido.
Ejemplo:
Código: [ Debe registrarse para ver este enlace ]
Private Sub Command1_Click()
Dim szNombre As String
Dim szSerial As String
Dim i As Byte
Dim valido As Boolean
  If Text1.Text = "" Or Text2.Text = "" Then
    valido = False
  Else
    szNombre = Text1.Text
    szSerial = Text2.Text
    For i = 1 To Len(szNombre)
      Mid(szNombre, i, 1) = Chr(Asc(Mid(szNombre, i, 1)) + 1)
    Next i
    For i = 1 To Len(szSerial)
      Mid(szSerial, i, 1) = Chr(Asc(Mid(szSerial, i, 1)) - 1)
    Next i
    If szNombre = szSerial Then
      valido = True
    End If
  End If
  If valido Then
    MsgBox "Bien"
  Else
    MsgBox "Mal"
  End If
End Sub
En este caso aunque pongas un breakpoint en __vbaStrCmp no vas a ver el serial bueno.

Saludos.
 #248898  por ap0calypt0
 02 Dic 2010, 00:39
Muchas gracias por la respuesta.
Pd: tengo una pregunta para el nombre "ap0calypt0" que serial seria? ya que no se que da si le sumo dos valores a la Y "cr2ecn?rv2"
 #248902  por ap0calypt0
 02 Dic 2010, 00:44
Bueno. Ya he encontrado la respuesta. Sería "cr2ecn{rv2" para "ap0calypt0".
Para la proxima hare uno tan dificil que espero que te cueste sacarlo hasta a ti ya que eres muy bueno en eso...
Gracias a los dos por responderme...
 #302603  por RoLyxRoLy
 08 Jun 2011, 15:37
Hola :D ayer encontre un crackme v2 y vi que tenía tu nick asique le toque un poquito y resolví el crackme.



Es de hace meses el post pero bueno, no quiero dejar pasarlo por alto. Gracias por entretenernos y te envío por MP los datos.