Encontrar algoritmo

Iniciado por my_sistemas, 18 Febrero 2011, 21:29 PM

0 Miembros y 1 Visitante están viendo este tema.

my_sistemas

Hola a todos, tengo este programa que estaba paket con UPX, ya lo pude desempaquetar, ahora lo que necesito es saber que algoritmo hace para generar los IMEI del Alcatel OT 302 cuyo TAC  es 332168 y FAC 67, el programa lo que hace es TAC + FAC + SERIAL GENERADO

En el caso del Alcatel 0T 302 es 3316867XXXXXXX

Necesito saber como genera los ultimos 7 digitos.

Segun OllyDGB empieza a generarlos en el OFFSET 004731D0

Abajo del String "Please, select, phone"


ALquien me ayuda a saber que algoritmo usa?

aqui el software:

http://www.mediafire.com/?685u2bluqsf2y09
cuando uno es grande...
la calidad nunca la pierde...

MCKSys Argentina

#1
La funcion que calcula los ultimos digitos esta en 473374.

Si pones un BP en 47321B podras ver que se le pasa como parametro en EAX el codigo anterior generado.

La miro un poco mas y te cuento como me fue...

Saludos!

PD: Te aconsejo que uses IDR asi puedes identificar facilmente las funciones Estandar de Delphi 6...

Modificado

Dentro de 473374, en 47339C se llama a 472E60, la cual genera un string de 6 numeros ALEATORIOS. Estos 6 digitos van en la cadena resultante.  ;)

El ultimo digito se calcula en 47308C.

Te dejo con esta funcion (por falta de tiempo), pero hasta donde vi, va sumando en ESI segun sea cada digito calculado hasta ahora (los 8 basicos + los 6 random).

Son 2 bucles sencillos.

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


my_sistemas

#2
Tienes razon genera aleatoriamente los digitos pero el ultimo es un calculo de todos los digitos, segun lo que he leido es un codigo verificador.

http://es.wikipedia.org/wiki/D%C3%ADgito_verificador

Pero dices que es un calculo simple... yo lo veo complicado, me podrias explicar que calculo realiza, o mejor dicho la explicacion del codigo ASM como tal en ese sector?



Ves que me Genero: 33216867761697

En 4730BF es que empieza a tomar numero por numero pero que calculo les hace?

Gracias
cuando uno es grande...
la calidad nunca la pierde...

MCKSys Argentina



Con esto sale que:

El numero que se le va a agregar al serial es la cantidad que le falta a la sumatoria (mas 10) para llegar a ser multiplo de 10.

Por ejemplo, si la suma (cuyo resultado final se calcula luego de ejecutar 473109 LEA ECX, DWORD PTR DS:[ESI+A]) da 08Ah (138 decimal), entonces el valor que se le agrega al serial es 2, porque 138 + 2 = 140 el cual es multiplo de 10.

Fijate la imagen. Si traceas los bucles con varios seriales distintos, veras como trabaja todo...  :P

Saludos!

PD: Los nombres de funciones los he sacado usando IDR. Esas son funciones standar de Delphi  ;)
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."