Autor
|
Tema: Ayuda con crack (Leído 11,980 veces)
|
KJD
Desconectado
Mensajes: 314
|
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....
|
|
|
En línea
|
"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
Desconectado
Mensajes: 17
|
Al parecer no le importa a muchos este post
|
|
|
En línea
|
Buscar la verdad y la verdad los hara libres
|
|
|
Shaddy
Desconectado
Mensajes: 722
one_bit_manipulator()
|
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..
|
|
|
En línea
|
|
|
|
Shaddy
Desconectado
Mensajes: 722
one_bit_manipulator()
|
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..
|
|
|
En línea
|
|
|
|
Mintaka
Desconectado
Mensajes: 72
|
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
|
|
|
En línea
|
Si lloras por no ver el Sol tus lágrimas no te dejarán ver las estrellas.(Tagore)
|
|
|
Shaddy
Desconectado
Mensajes: 722
one_bit_manipulator()
|
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..
|
|
|
En línea
|
|
|
|
kenrhad
Desconectado
Mensajes: 17
|
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
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
|
|
|
En línea
|
Buscar la verdad y la verdad los hara libres
|
|
|
Shaddy
Desconectado
Mensajes: 722
one_bit_manipulator()
|
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). 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: 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: 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..
|
|
|
En línea
|
|
|
|
Mintaka
Desconectado
Mensajes: 72
|
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
|
|
|
En línea
|
Si lloras por no ver el Sol tus lágrimas no te dejarán ver las estrellas.(Tagore)
|
|
|
Mintaka
Desconectado
Mensajes: 72
|
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
|
|
« Última modificación: 17 Junio 2008, 13:58 pm por Mintaka »
|
En línea
|
Si lloras por no ver el Sol tus lágrimas no te dejarán ver las estrellas.(Tagore)
|
|
|
|
|