Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: my_sistemas en 18 Febrero 2011, 21:29 pm



Título: Encontrar algoritmo
Publicado por: my_sistemas en 18 Febrero 2011, 21:29 pm
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"
(http://img827.imageshack.us/img827/6030/debuj.png)

ALquien me ayuda a saber que algoritmo usa?

aqui el software:

http://www.mediafire.com/?685u2bluqsf2y09


Título: Re: Encontrar algoritmo
Publicado por: MCKSys Argentina en 18 Febrero 2011, 22:43 pm
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!


Título: Re: Encontrar algoritmo
Publicado por: my_sistemas en 19 Febrero 2011, 02:09 am
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?

(http://img20.imageshack.us/img20/6038/debuj.jpg)

Ves que me Genero: 33216867761697

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

Gracias


Título: Re: Encontrar algoritmo
Publicado por: MCKSys Argentina en 21 Febrero 2011, 16:35 pm
(http://img696.imageshack.us/img696/2015/image1qxt.jpg)

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  ;)