Ayuda con crack

Iniciado por kenrhad, 6 Junio 2008, 17:39 PM

0 Miembros y 3 Visitantes están viendo este tema.

KJD

Exactamente eso era lo que te decia , si no pones el ascii de eax, directamente te manda al mensaje malo en cambio si lo pones hace otra comprobacion en 004883C5 , hay que analizar ahi que es lo que hace con la cadena introducida, o si simplemente no ahce nada.....

PD: Por no estar protegido este programa es bastante dificil de sacar un serial valido, almenos para mi....



"Solo hay 10 tipos personas que saben leer binario, los que si y los que no"

"Keyboard not Found, press F1 To Continue" WTF???

kenrhad

Al parecer no le importa a muchos este post
Buscar la verdad y la verdad los hara libres

Shaddy

GetTickCount simplemente te da el tiempo trascurrido desde que se inició windows, y se utiliza para generar valores aleatorios, como muchas API... Así que dudo que esa tenga que ver mucho en un número de serie.

Salu2..
"Si buscas resultados diferentes, no hagas siempre lo mismo" (Albert Einstein)

http://abssha.reversingcode.com
http://www.reversingcode.com

Shaddy

Bueno como vi que dijiste que no te hacían caso, lo miré por encima, no os centréis siempre en la verificación de User & Pass, cualquier tipo de limitación es condicionada... prueba dejando esto así:

00455A20      C646 26 01    mov byte ptr ds:[esi+26],1

con ese byte registras el programa.

Salu2..
"Si buscas resultados diferentes, no hagas siempre lo mismo" (Albert Einstein)

http://abssha.reversingcode.com
http://www.reversingcode.com

Mintaka

Cita de: kenrhad en 16 Junio 2008, 14:57 PM
Al parecer no le importa a muchos este post

Hola.
No suelo meterme en los post que ya han contestado otros kolegas, pero en esta ocasion me ha picado la curiosidad.
Aparte de hacer lo que te ha dicho Shadow si quieres que te quede wapo el menu Help añades estos dos cambios más:

00455A75      807B 26 01    CMP BYTE PTR DS:[EBX+26],1
0049765C      8078 26 01    CMP BYTE PTR DS:[EAX+26],1

Lo del serial y el keygen lo dejo para otros.
Saludos,

Mintaka
Si lloras por no ver el Sol tus lágrimas no te dejarán ver las estrellas.(Tagore)

Shaddy

joer, pero si es el byte ese XD, pro no se porque lo pone a 0 xD, mañana lo miro, pro amos, los cambios esos son pa lo mismo al fin y al cabo :).

Salu2..
"Si buscas resultados diferentes, no hagas siempre lo mismo" (Albert Einstein)

http://abssha.reversingcode.com
http://www.reversingcode.com

kenrhad

Cita de: Mintaka en 17 Junio 2008, 00:10 AM
Hola.
No suelo meterme en los post que ya han contestado otros kolegas, pero en esta ocasion me ha picado la curiosidad.
Aparte de hacer lo que te ha dicho Shadow si quieres que te quede wapo el menu Help añades estos dos cambios más:

00455A75      807B 26 01    CMP BYTE PTR DS:[EBX+26],1
0049765C      8078 26 01    CMP BYTE PTR DS:[EAX+26],1

Lo del serial y el keygen lo dejo para otros.
Saludos,

Mintaka

Cita de: ShadowDark en 16 Junio 2008, 21:53 PM
Bueno como vi que dijiste que no te hacían caso, lo miré por encima, no os centréis siempre en la verificación de User & Pass, cualquier tipo de limitación es condicionada... prueba dejando esto así:

00455A20      C646 26 01    mov byte ptr ds:[esi+26],1

con ese byte registras el programa.

Salu2..

Perdon por no saberme expresar, pero en verdad no queria que me crackearan el programa, solo queria que me orientaran sobre como buscar y eso, dado que ustedes ya crackearon el programa pero yo por ejemplo estoy en blanco, no se como buscar, ni como llegaron a esa cadena o direccion.

Espero me ayan entendido esta ves.
Gracias por todas sus respuestas
Buscar la verdad y la verdad los hara libres

Shaddy

Es fácil, si te das cuenta el mismo dialogo que te pide el password se encuentra aquí:

00455A93  |.  FF53 28       call ds:[ebx+28]

¿como lo encontramos?, pues yo por ejemplo cuando aparece, paro el flujo directamente (F12), y luego voy retornando hasta ver el bucle de la ventana (en este caso por ser delphi es fácilmente reconocible).

Citar
004487E1  |> /8B03          /mov eax,ds:[ebx]
004487E3  |. |E8 D42D0000   |call Rubik.0044B5BC
004487E8  |. |8B03          |mov eax,ds:[ebx]
004487EA  |. |80B8 8C000000>|cmp byte ptr ds:[eax+8C],0
004487F1  |. |74 0F         |je short Rubik.00448802
004487F3  |. |8B45 FC       |mov eax,[local.1]
004487F6  |. |C780 34020000>|mov dword ptr ds:[eax+234],2
00448800  |. |EB 14         |jmp short Rubik.00448816
00448802  |> |8B45 FC       |mov eax,[local.1]
00448805  |. |83B8 34020000>|cmp dword ptr ds:[eax+234],0
0044880C  |. |74 08         |je short Rubik.00448816
0044880E  |. |8B45 FC       |mov eax,[local.1]
00448811  |. |E8 26FDFFFF   |call Rubik.0044853C
00448816  |> |8B45 FC       |mov eax,[local.1]
00448819  |. |8B80 34020000 |mov eax,ds:[eax+234]
0044881F  |. |85C0          |test eax,eax
00448821  |.^\74 BE         \je short Rubik.004487E1

entonces metes un BP justo debajo del JE y parará cuando termines con la ventana.. de ésta manera irás retornando hasta llegar justo debajo del CALL que te dije.

Entonces si te fijas ves que hay varias comparaciones:

Citar
00455A69  |.  807B 30 00    cmp byte ptr ds:[ebx+30],0
00455A6D  |.  74 43         je short Rubik.00455AB2
00455A6F  |.  F643 20 10    test byte ptr ds:[ebx+20],10
00455A73  |.  75 21         jnz short Rubik.00455A96
00455A75      807B 26 00    cmp byte ptr ds:[ebx+26],0
00455A79  |.  75 1B         jnz short Rubik.00455A96
00455A7B  |.  66:837B 2A 00 cmp word ptr ds:[ebx+2A],0
00455A80  |.  74 14         je short Rubik.00455A96

tomando como referencia ésta:

00455A75      807B 26 00    cmp byte ptr ds:[ebx+26],0

pones un BP ahi reinicias y verás que compara un solo byte de una direccion. Que si le metes un HBP on access al inicio te darás cuenta que hay una línea que mueve un 00 al principio y le pones un 1 y queda registrado..

otra manera de llegar sería:

Citar
0049765C      8078 26 00    cmp byte ptr ds:[eax+26],0
00497660  |.  75 5F         jnz short Rubik.004976C1
00497662  |.  8D55 E8       lea edx,[local.6]
00497665  |.  A1 F4C04900   mov eax,ds:[49C0F4]
0049766A  |.  E8 915DF9FF   call Rubik.0042D400
0049766F  |.  8D45 E8       lea eax,[local.6]
00497672  |.  BA E8784900   mov edx,Rubik.004978E8                   ;  ASCII "  *UNREGISTERED*"

ahi se hace la misma comparacion.


Salu2..



"Si buscas resultados diferentes, no hagas siempre lo mismo" (Albert Einstein)

http://abssha.reversingcode.com
http://www.reversingcode.com

Mintaka

Cita de: ShadowDark en 17 Junio 2008, 01:15 AM
joer, pero si es el byte ese XD, pro no se porque lo pone a 0 xD, mañana lo miro, pro amos, los cambios esos son pa lo mismo al fin y al cabo :).

Salu2..

Lo pone otra vez a cero porque, el muy gay, coge el primer byte del fichero WINSPOOL.CRC y se lo mete en la variable aquí:

0012FA90   00409001  /CALL to ReadFile from Rubik.00408FFC
0012FA94   00000064  |hFile = 00000064 (window)
0012FA98   00AB434A  |Buffer = 00AB434A
0012FA9C   00000001  |BytesToRead = 1
0012FAA0   0012FAA8  |pBytesRead = 0012FAA8
0012FAA4   00000000  \pOverlapped = NULL

Handles, item 7
Handle=00000064
Type=File
Name=\Device\HarddiskVolume2\WINDOWS\SYSTEM32\WINSPOOL.CRC

Saludos,

Mintaka
Si lloras por no ver el Sol tus lágrimas no te dejarán ver las estrellas.(Tagore)

Mintaka

#19
Cita de: kenrhad en 17 Junio 2008, 05:35 AM

Perdon por no saberme expresar, pero en verdad no queria que me crackearan el programa, solo queria que me orientaran sobre como buscar y eso, dado que ustedes ya crackearon el programa pero yo por ejemplo estoy en blanco, no se como buscar, ni como llegaron a esa cadena o direccion.

Espero me ayan entendido esta ves.
Gracias por todas sus respuestas


A ver una cosita.No se si te habrá quedado clara la explicación que te acaba de dar Shadow de cómo encontró el lugar idóneo para simular estar registrado.Si es que sí esta explicación más extendida de lo que hice yo, igual te sobra...o no.
Tú deberías saber que esto del cracking es como el cuento del gato y el ratón.El programador intenta esconder el punto débil de su protección.Hace ya un tiempo que están aprendiendo a despistarnos.Cada vez vemos menos direcciones de memoria fijas, claramente visualizadas en el desensamblado y por eso usan el direccionar posiciones de memoria "calientes" de manera indirecta, con lo cual aparecen relacionadas con registros más un desplazamiento.
Debemos acostumbrarnos a esta "nueva" situación.
La zona que más "canta" es en la que se ve claramente como nos proclama *UNREGISTERED*, aqui:

00497672  mov edx,Rubik.004978E8 ; ASCII " *UNREGISTERED*"

Si nos lo pone es porque sabe que no estamos registrados.¿Y cómo lo sabe?.Pues muy fácil.Lo descubre un poco mas arriba en el código, aqui:

0049765C cmp byte ptr ds:[eax+26],0
00497660 jnz short Rubik.004976C1

Si es diferente de cero, el valor que hay dentro de [eax+26], es que estamos registrados y no nos saldrá el *UNREGISTERED* en la barra del título, porque saltará a 004976C1.
¿Y que hay dentro de [eax+26]?.Pues en este caso hay escrita esta dirección de memoria 00AB434A.El valor que contiene esa dirección es lo único que tenemos que vigilar, que en principio, como te dijo Shadow, lo pone a cero.Nosotros debemos hacer lo imposible para que valga siempre 1, porque consulta lo que hay dentro de esa dirección en varios lugares del código (disfrazada con otros nombres de registro) y en este caso nos la cambia en un momento determinado.
Lógicamente has de saber usar el Olly u otro debugger, con cierta soltura.
Que te sirva de consuelo que todos hemos empezado como tú; es decir, haciendo preguntas después de estrellarnos una y otra vez.
Sigue preguntando, que no nos molestas para nada.
Saludos,

Mintaka
Si lloras por no ver el Sol tus lágrimas no te dejarán ver las estrellas.(Tagore)