Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: Serial de Calendario Roasoft

752 views
Skip to first unread message
Message has been deleted

M4N010

unread,
Apr 7, 2006, 9:50:23 PM4/7/06
to
"patuchi" <patu...@latinmail.com> escribió en el mensaje
news:1144416228.6...@v46g2000cwv.googlegroups.com...
> Este es la direccion para descargarse el programa
>
>
> http://www.roasoft.com/descarga.htm?aplic=CALEN6
>
> es un poco cabrona la proteccion que tiene, aunque solo sea averiguar
> un serial, el programita esta mas protegido que la White jouss.
> Si alguien es capaz de averiguarlo, que lo cuelgue en la red.

Evidentemente no lo has mirado mucho ya que de protegido tiene poco. Ni
empaquetado ni comprobaciones de integridad ni nada. Se puede depurar
directamente y con parchear un salto ya está arreglado. Si lo que se quiere
es el código de registro (se obtiene del nombre de usuario introducido) se
encuentra en la memoria tras la comparación. Tras comprobar el código de
registro el programa se conecta a Internet y te proporciona otro código de
usuario que utiliza para activar el soporte web.

Saludos.
M4N010.


Message has been deleted

M4N010

unread,
Apr 8, 2006, 3:55:09 PM4/8/06
to
"patuchi" <patu...@latinmail.com> escribió en el mensaje
news:1144498683.2...@i39g2000cwa.googlegroups.com...
>Gracias por responder, intentaré buscar la línea del salto que me
>comentas, pero como estoy un poco verde en esto, no sé si lo
>conseguiré.

Visto lo positivo de tu respuesta, te amplío información. Te facilitará
mucho las cosas y además resultará instructivo:

Ejecutas el programa desde el OllyDbg e intentas registrarlo con un nombre
de usuario y cualquier clave numérica y en cuanto te sale la ventana de
registro incorrecto detienes la ejecución y con el Olly buscas en la memoria
los últimos cuatro dígitos de la clave que has puesto y en una de sus
apariciones encontrarás una clave alfanumérica de 24 dígitos cuyos 10
últimos coinciden con los que has puesto mientras que los anteriores no. Si
vuelves a intentar registrarte con esa nueva clave te conectará a Internet
para darte una nueva clave para acceso al soporte, la guardará y te dirá que
el registro ha sido correcto, pero al reiniciar el programa la volverá a
comprobar y seguirá estando sin registrar correctamente.

Resulta que hay un punto del código que figura tal que así:

004D767D |. 807E 01 00 CMP BYTE PTR DS:[ESI+1],0
004D7681 74 56 JE SHORT CALENDAR.004D76D9
004D7683 |. 68 AC774D00 PUSH CALENDAR.004D77AC ;
ASCII "Calendario "
004D7688 |. A1 AC2D4E00 MOV EAX,DWORD PTR DS:[4E2DAC]
004D768D |. FF30 PUSH DWORD PTR DS:[EAX]
004D768F |. 68 C0774D00 PUSH CALENDAR.004D77C0
004D7694 |. 8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8]
004D7697 |. 8B46 10 MOV EAX,DWORD PTR DS:[ESI+10]
004D769A |. E8 61A2F2FF CALL <JMP.&rtl60.@Sysutils@IntToStr$qqri>
004D769F |. FF75 F8 PUSH DWORD PTR SS:[EBP-8]
004D76A2 |. 68 E4774D00 PUSH CALENDAR.004D77E4 ;
ASCII " de "
004D76A7 |. 8D55 F4 LEA EDX,DWORD PTR SS:[EBP-C]
004D76AA |. A1 18304E00 MOV EAX,DWORD PTR DS:[4E3018]
004D76AF |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
004D76B1 |. E8 4AA2F2FF CALL <JMP.&rtl60.@Sysutils@IntToStr$qqri>
004D76B6 |. FF75 F4 PUSH DWORD PTR SS:[EBP-C]
004D76B9 |. 68 F4774D00 PUSH CALENDAR.004D77F4
004D76BE |. 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
004D76C1 |. BA 07000000 MOV EDX,7
004D76C6 |. E8 9D9BF2FF CALL <JMP.&rtl60.@System@@LStrCatN$qqrv>
004D76CB |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
004D76CE |. 8B83 AC030000 MOV EAX,DWORD PTR DS:[EBX+3AC]
004D76D4 |. E8 1FB1F2FF CALL <JMP.&vcl60.@Controls@TControl@SetT>
004D76D9 |> 803E 00 CMP BYTE PTR DS:[ESI],0
004D76DC 74 2C JE SHORT CALENDAR.004D770A
004D76DE |. 68 AC774D00 PUSH CALENDAR.004D77AC ;
ASCII "Calendario "
004D76E3 |. A1 AC2D4E00 MOV EAX,DWORD PTR DS:[4E2DAC]
004D76E8 |. FF30 PUSH DWORD PTR DS:[EAX]
004D76EA |. 68 00784D00 PUSH CALENDAR.004D7800
004D76EF |. 8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10]
004D76F2 |. BA 03000000 MOV EDX,3
004D76F7 |. E8 6C9BF2FF CALL <JMP.&rtl60.@System@@LStrCatN$qqrv>
004D76FC |. 8B55 F0 MOV EDX,DWORD PTR SS:[EBP-10]
004D76FF |. 8B83 AC030000 MOV EAX,DWORD PTR DS:[EBX+3AC]
004D7705 |. E8 EEB0F2FF CALL <JMP.&vcl60.@Controls@TControl@SetT>
004D770A |> 807E 02 00 CMP BYTE PTR DS:[ESI+2],0
004D770E 74 0D JE SHORT CALENDAR.004D771D

donde hay tres comparaciones (de DS: ESI-2, ESI y ESI+2) con 0 y a
continuación sendos saltos JE que se realizan si el valor es 0 y no si es 1.
El primero define el modo de funcionamiento shareware, el segundo el
freeware (cuando han pasado más de 30 días de uso del programa) y el tercero
el modo registrado. Para que el programa quede registrado habremos de
conseguir que el byte ESI+2 que se usa en el tercer salto siempre valga 1 y
para ello ponemos breakpoints en memoria en ese byte y miramos dónde escribe
en él el valor 0 (sin registrar) o 1 (registrado). Encontramos:

0048CDD8 . FF52 44 CALL DWORD PTR DS:[EDX+44]
0048CDDB . 84C0 TEST AL,AL
0048CDDD . 74 2C JE SHORT CALENDAR.0048CE0B
0048CDDF . A1 142E4E00 MOV EAX,DWORD PTR DS:[4E2E14]
0048CDE4 . 8378 18 04 CMP DWORD PTR DS:[EAX+18],4
0048CDE8 . 7E 21 JLE SHORT CALENDAR.0048CE0B
0048CDEA . A1 142E4E00 MOV EAX,DWORD PTR DS:[4E2E14]
0048CDEF . 8378 18 09 CMP DWORD PTR DS:[EAX+18],9
0048CDF3 . 7D 16 JGE SHORT CALENDAR.0048CE0B
0048CDF5 . A1 142E4E00 MOV EAX,DWORD PTR DS:[4E2E14]
0048CDFA . 8378 20 3B CMP DWORD PTR DS:[EAX+20],3B
0048CDFE . 7E 0B JLE SHORT CALENDAR.0048CE0B
0048CE00 . A1 142E4E00 MOV EAX,DWORD PTR DS:[4E2E14]
0048CE05 . 8378 20 46 CMP DWORD PTR DS:[EAX+20],46
0048CE09 . 7C 04 JL SHORT CALENDAR.0048CE0F
0048CE0B > 33C0 XOR EAX,EAX
0048CE0D EB 02 JMP SHORT CALENDAR.0048CE11
0048CE0F > B0 01 MOV AL,1

Y aquí vemos que si caemos en el XOR, EAX quedará valiendo 0 y estará sin
registrar mientras que si pasamos por MOV AL,1, EAX valdrá 1 (AL son los
bytes menos significativos del registro EAX) y estaremos registrados (el
valor de EAX en este momento es el que luego se grabará en el ESI+2 que
encontramos antes). Pues aquí vemos que si parcheamos el programa cambiando
el último JMP de modo que no se salte el MOV AL,1, pues el programa quedará
registrado y cogerá la clave que se nos mostró en el primer párrafo de este
tutorial, si no habíamos metido ninguna pues aparecerá registrado con el
nombre "SHAREWARE" y el código 0000000000 (0L).

Pero es mejor ir un poco más allá y encontraremos un número de registro que
funcione correctamente sin parchear el ejecutable:

En el trozo del codigo que acabo de reproducir más arriba vemos que después
del CALL hay cuatro saltos condicionales que nos mandan a poner EAX a 0 con
el XOR de los cuales dos de ellos comprueban que el número formado por las
cifras que pusimos en la posición 21 y 22 de nuestro serial inicial esté
entre 4 y 9, y otros dos comprueban que el número formado por las cifras de
las posiciones 15 y 16 esté entre 59 (3B en hexadecimal) y 70 (46 en hexa).
Si nuestro número de prueba inicial hubiera cumplido estas condiciones (por
ejemplo fuera del tipo XXXX-XXXX-XXXX-XX65-XXXX-05XX) realizando el proceso
de búsqueda en la memoria descrito en el primer párrafo del tutorial
habremos encontrado un serial perfectamente válido.

Por último, observemos que la clave más reducida que el programa nos
proporciona tras conectarse a Internet al registrarnos correctamente (y que
es la que aparece en la ventana de About del programa) contiene las diez
últimas cifras de nuestro serial inicial, que resultaron sin modificar en el
serial localizado en la memoria: son las cifras de las posiciones 21 y 22,
seguidas de "01" y a continuación las cifras de las posiciones
15,16,17,18,19 y 20, para finalizar con (ya entre paréntesis) las cifras de
las posiciones 23 y 24 y una letra.

Con toda esta información es fácil desarrollar un patcher o incluso un
keygen para el programa, pero mejor comprarlo que 12 euritos tampoco van a
ninguna parte.

Saludos.
M4N010.


M4N010

unread,
Apr 9, 2006, 4:02:27 PM4/9/06
to
"M4N010" <midir...@estano.es> escribió en el mensaje
news:xyUZf.1222491$kp.77...@telenews.teleline.es...

> donde hay tres comparaciones (de DS: ESI-2, ESI y ESI+2) con 0 y a

Un lapsus. Aquí debería de poner "donde hay tres comparaciones (de DS:
ESI+1, ESI y ESI+2) con 0 y a".

Saludos.
M4N010.


patuchi

unread,
Apr 14, 2006, 5:21:11 AM4/14/06
to
Gracias M4010, he tenido problemas con la conexión y no he podido
responder antes. Miraré esto que me has reportado, te estoy muy
agradecido.

Saludos.

0 new messages