Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: w0nt0n en 18 Julio 2010, 14:10 pm



Título: Ayuda con un Crackme
Publicado por: w0nt0n en 18 Julio 2010, 14:10 pm
Buenas,

Estoy jugando un poco con unos crackmes y estoy con uno que no sé resolver. Me explico:

Llego a la rutina que calcula el serial y es como sigue:
Código:
004013C0  /$ 60             PUSHAD
004013C1  |. C1C0 02          ROL EAX,2
004013C4  |. A3 6D314000   MOV DWORD PTR DS:[40316D],EAX
004013C9  |. 05 79740000    ADD EAX,7479
004013CE  |. 35 33323100    XOR EAX,313233
004013D3  |. C1E0 06         SHL EAX,6
004013D6  |. A3 72314000    MOV DWORD PTR DS:[403172],EAX
004013DB  |. 61             POPAD

Hasta donde entiendo, lo que hace es (en decimal):

Multiplico por 4 (en realidad se añaden al final del número en binario dos ceros lo que es lo mismo que multiplicar por 4)
Le sumo 29.817
Hago un XOR con 3.224.115
Multiplico por 64 (técnicamente no es esto pero el resultado que obtengo es el mismo, no?)

Cuando acaba la rutina, lo compara con 3.272.071.856 y en función de eso decide si es válido o no. Por lo que entiendo, la solución a este problema es:

Código:
x = {XOR [(3.272.071.856/64) , 3.224.115] - 29.817}/4

El resultado que obtengo de esto es 13.577.784 (o 13.577.783 si hago las operaciones en hexadecimal). En cualquier caso cuando introduzco el serial, el resultado después de las operaciones el 3.272.071.691.

Haciendo todas las operaciones en hexadecimal el número con el que se compara es el C307DA80 y el que obtengo usando mi serial C307DA0B, siendo la diferencia entre estos dos números en hexadecimal de 75 (117 en decimal), que es distinto de la diferencia si hago todos los cálculos en decimal.

No tengo muy claro el porqué de esto y quería saber si alguien me lo podría explicar.

Un saludo


Título: Re: Ayuda con un Crackme
Publicado por: MCKSys Argentina en 19 Julio 2010, 14:35 pm
No confundas ROL con SHL.

La multiplicacion es la emulación (?) de SHL. Pero ROL ROTA los bytes, osea, los bytes que "salen" por la izquierda se van agregando por la derecha.

Al menos, me parece que ese es el error... :P

Saludos!


Título: Re: Ayuda con un Crackme
Publicado por: Иōҳ en 19 Julio 2010, 17:19 pm
Cierto lo que dice MCKSys

ROL hace un desplazamiento de manera logica, y como dice "Los que se salen por la izquierda", entran por la derecha.

y sobre SHL y su contrapartida ellos hacen un desplazamiento de manera aritmetica, en particular SHL hace lo mismo que ROL con la diferencia que los bytes "que salen por la izquierda, se pierden", y no entran por la derecha como en ROL