Keygenning Md5

download Keygenning Md5

of 46

description

Un pequeño articulo para una revista, donde se enseña a romper una encriptacion md5 solo de manera educativa

Transcript of Keygenning Md5

  • Keygenning MD5

    2015

    Registration Spy Emergency 17.0.205

    Autor: Luis Tllez N.

  • Keygenning MD5

    Keygenning MD5 Contenido Declaraciones... 3 Herramientas.... 4 Conociendo a la vctima... 5 Analizando a la vctima.... 7 Hablando de MD5....10 Keygenning Spy Emergency11 Programando Keygen...................................................42

    Autor: Luis Tllez N. 2

  • Keygenning MD5

    Declaraciones

    Todo el cdigo incluido en este tutorial es libre de usar y modificar, solo le pedimos que usted mencin, al autor y donde se le encontr. Este tutorial es tambin libre para distribuirse en su forma original sin alteraciones, con todos los suplementos incluidos con la condicin de hacer siempre mencin del autor.

    Todos los programas comerciales utilizados en este tutorial de han utilizado nicamente para el fin de demostrar las teoras y mtodos descritos. No hay distribucin de aplicaciones de parches que se haya hecho en cualquier medio de comunicacin. Las aplicaciones utilizadas en este tutorial fueron en la mayora de las veces crackeadas o reventadas por otros compaeros, y las versiones de grietas estaban disponibles desde mucho tiempo. Los autores de los documentos no deben ser considerados responsables por daos y perjuicios a las empresas que tienen derechos sobre dichos programas. El enlace de este documento, as como cualquier otro tutorial es de compartir el conocimiento y la enseanza de cmo se puede eludir las protecciones y en general la forma de mejorar la tcnica de protecciones. No estamos liberando cualquier aplicacin agrietada. Si ests buscando el crack, keymaker, keygen o patch en este tutorial no es el lugar recomendado para hacerlo ya que lo nico que encontraras ser conocimiento de ciertos tipos de protecciones.

    Atte.:

    Luis Tllez

    Autor: Luis Tllez N. 3

  • Keygenning MD5

    Herramientas Bueno antes de especificar que herramientas utilizaremos, me gustara aclarar que este tutorial no pretende utilizar trminos tcnicos ms bien tratare de explicarlo de una forma sencilla y clara sin embargo tampoco pretende ser un tutorial de nivel bsico, se espera que se tenga algo de conocimiento sobre lenguaje ensamblador y algunos mtodos de cracking. Bueno las herramientas que utilizaremos son las siguientes: 1.- Ollydbg de SnD http://www.mediafire.com/download/2ycped4az6cwj05/OllyDbg_20v1.10_20SnD.rar 2.- Un detector de packer o analizador de programas ejecutables en este caso usare Die 0.64 www.mediafire.com/download/wnqoyzjz2tm/die.rar 3.- Plugin Kanal v2.92 incluido con el Die en caso de descargarlo de otra parte necesitaran el plugin versiones actuales del Die no soportan plugins de peid 4.- Calculadora de hash Md5 en este caso utilizare uno programado por m www.mediafire.com/download/v2bubcwvzi5k8i5/MD5+Calculator.exe 5.- Spy Emergency versin 17.0.205.0 www.netgate.sk/ 6.- Masm32 http://www.masm32.com/ Por ultimo quiero aclarar que estar utilizando como sistema operativo Windows XP Service Pack 3 montado en una mquina virtual.

    Autor: Luis Tllez N. 4

  • Keygenning MD5

    Conociendo a la victima El programa que utilizaremos en esta ocasin se llama Spy Emergency como dice en la pgina del creador es un anti-spyware, anti-trojan y anti-spam. Una vez instalado vamos a hacernos una idea general de la proteccin del programa para poder registrarlo. Asi que abrimos el programa y podemos ver que en la seccin de comprar encontramos dos opciones:

    Escogemos la opcin de escribir un nmero y se abre una ventana emergente:

    Autor: Luis Tllez N. 5

  • Keygenning MD5

    En esta nueva ventana encontramos que nos pide primero un nombre a quien se le otorgara la licencia, segundo un correo electrnico y tercero se pide un nmero de serie dividido en 3 bloques de 7 y uno de 8 adems que estn separados con guiones esto quiere decir que necesitamos un nmero de serie de 29 dgitos. Ahora la interrogante es descubrir que requisitos debe cumplir el nmero de serie para ser vlido, lo cual ser nuestro trabajo as que continuemos.

    Autor: Luis Tllez N. 6

  • Keygenning MD5

    Analizando a la victima Una vez que tenemos una idea de cmo es el programa, es necesario que lo analicemos ms a profundidad, para saber a lo que nos estamos enfrentando; Para eso utilizaremos el Die 0.64 que como dijimos es un analizador de ejecutables y que nos puede brindar mucho datos adicionales Para eso abrimos en Die y cargamos nuestro ejecutable con el botn Open PE y buscaremos nuestro ejecutable, en mi caso se encuentra en la siguiente ruta C:\Archivos de programa\NETGATE\Spy Emergency pero hay que tener en cuenta algo, en esa ruta se encuentran muchos .exe asi que nos centraremos en el ejecutable principal que es el que podemos ver en la siguiente imagen:

    Una vez cargado el programa el Die arroja los siguientes datos:

    Autor: Luis Tllez N. 7

  • Keygenning MD5

    Como vemos es un programa hecho en Visual c ++ esto es muy importante saberlo ya que de esto depender la forma en que atacaremos al programa, es decir no es lo mismo revertir un programa hecho en Delphi, visual c ++ o inclusive visual .net.

    Otra razn para usar el Die o un analizador de ejecutables, es para saber si este esta empacado con algn packer como themida, armadillo, asprotect, upx; que el nico objetivo es hacernos ms difcil el trabajo.

    En este caso no est empacado con ningn otro programa sin embargo podemos obtener ms informacin, para esto arriba del botn Open PE encontramos otro botn con los smbolos esto nos abrir un men desplegable y seleccionaremos la opcin que dice Peid Plugins como se observa en la imagen:

    Esto nos mandara a la siguiente ventana donde encontraremos el Plugin Krypto Analizer o comunmente conocido como Kanal v2.92 este plugin sirve para detectar algn tipo de proteccin criptogrfica asi que lo seleccionamos y damos clic en el botn start

    Autor: Luis Tllez N. 8

  • Keygenning MD5

    Ahora Kanal nos muestra lo siguiente:

    Como podemos observar ahora este plugin nos informa que nuestro ejecutable oculta varios mtodos de encriptacin como por ejemplo base 64, crc 32, crc 32b y el que nos interesa y resalto en color amarillo que es la encriptacin MD5. Terminado este anlisis sabemos que en nuestras manos tenemos un programa creado en visual c ++, que no est empacado con ningn packer, pero que si cuenta con rutinas criptogrficas. Pero antes de poder revertir la proteccin es importante que comprendamos como est compuesto la rutina del MD5 y que necesitamos para poder identificarlo en nuestro desensamblado.

    Autor: Luis Tllez N. 9

  • Keygenning MD5

    Hablando de MD5 Voy a tratar de no abordar mucho sobre el origen de este hash, ms bien vamos a centrarnos en lo que nos sea til, para esto tomaremos informacin de Wikipedia y esta nos dice lo siguiente:

    La codificacin del MD5 de 128 bits es representada tpicamente como un nmero de 32 dgitos hexadecimal. El siguiente cdigo de 28 bytes ASCII ser tratado con MD5 y veremos su correspondiente hash de salida: MD5("Generando un MD5 de un texto") = 5df9f63916ebf8528697b629022993e8 Un pequeo cambio en el texto (cambiar '5' por 'S') produce una salida completamente diferente. MD5("Generando un MDS de un texto") = e14a3ff5b5e67ede599cac94358e1028 Que queremos a dar a entender, si recordamos el nmero de serie que peda nuestro programa, estaba dividido en 3 bloques de 7 y uno de 8 separado por 3 guiones que en total sera una cadena de 32 dgitos, es decir un hash md5 Algoritmo: En este punto hablaremos de algunos pasos que se dan para generar el hash md5. Por ejemplo el hash md5 est conformado por lo siguiente:

    MD5Init, MD5Update y MD5Final.

    En el paso nmero 3 que menciona Wikipedia, dice que se da inicio a lo que conocemos como MD5Init el cual utiliza un buffer de 4 palabras y estas a su vez tienen un registro con valores hexadecimales que serian:

    Palabra A: 01 23 45 67 Palabra B: 89 ab cd ef Palabra C: fe dc ba 98 Palabra D: 76 54 32 10

    En ensamblador quedara as:

    Autor: Luis Tllez N. 10

  • Keygenning MD5

    Es importante que conozcamos estas 4 variables ya que siempre sern las mismas, a estas se le conocen como, Chainnig variables. Esto nos ensea: que estamos ante una estructura md5, estamos en la parte MD5Init y por ultimo lo ms importante que estamos ante un md5 original o puro; es decir que si estas variables son diferentes, quiere decir que es un md5 modificado, como se observa en la siguiente imagen:

    Sigamos con el proceso del algoritmo, el siguiente paso dice que se declaran cuatro funciones auxiliares que toman como entrada tres palabras de 32 bits y su salida es una palabra de 32 bits, estas seran las siguientes:

    Tambin hace mencin que en este paso usa una tabla de 64 elementos construida con la funcin seno. Todo esto se realiza en MD5Update, esto lo podemos ver en ensamblador de la siguiente manera:

    Autor: Luis Tllez N. 11

  • Keygenning MD5

    Si observamos se hace una llamada a MDTransform, que es donde se encuentra la tabla de elementos, es decir las 4 funciones auxiliares que mencionamos y lo podemos ver en la siguiente imagen para entender un poco mejor el cdigo:

    Autor: Luis Tllez N. 12

  • Keygenning MD5

    En cada funcin se realizan 16 operaciones y como son 4 funciones seran los 64 elementos necesarios para formar el hash. El ltimo paso sera la salida o el MDFinal que seran las ltimas operaciones para mandarnos el hash md5 de 32 dgitos. En resumen: programado en ensamblado se vera el proceso de la encriptacin md5: Es importante conocer esto para saber en dnde nos encontramos al momento de estar revirtiendo alguna proteccin.

    Autor: Luis Tllez N. 13

  • Keygenning MD5

    Keygenning Spy Emergency Es el momento de empezar a trabajar con nuestra aplicacin y con las dems herramientas. Primero cerremos el spy mergency desde el icono al lado del reloj de windows, despus vamos a abrir nuestro ollydbg y cargamos el programa, una vez cargado lo ejecutamos con F9 y abrimos la ventana donde nos pide nuestros datos para la licencia a m me quedo de esta forma:

    Cuando damos click en aceptar veremos una hermosa Nag que nos dira lo siguiente:

    Autor: Luis Tllez N. 14

  • Keygenning MD5

    Nos informa que el nmero de serie no es vlido. Algo que me gustara aclarar es que por lo regular los programas vienen en ingles as que para poder trabajar con los mensajes que nos mande, vamos a cambiar el idioma en caso de que lo hayan instalado en ingls. Esto lo aremos yendo a la seccin de opciones y posteriormente escogemos el lenguaje en ingls. Volvemos a cargar todo en ollydbg y ahora nuestro mensaje dira: Invalid serial number! Plase enter correct serial number. Ahora en olly vamos a buscar esa string, lo hacemos dando click derecho sobre el desensamblado despus Search for all referenced text strings Con esto se nos abrir una nueva ventana donde podremos buscar todas las cadenas de texto que nos muestre el programa. Ahora en la nueva ventana, subimos al inicio de las string y damos click derecho seleccionando Search for text, en esta ventana emergente ingresamos la cadena de texto que estamos buscando quedando de esta manera:

    Autor: Luis Tllez N. 15

  • Keygenning MD5

    Cuando damos click en ok nos encontrara justamente la cadena de texto que nos muestra la ventana cuando ingresamos datos falsos como observamos la imagen siguiente:

    Ahora estando posicionados en esa direccin donde se encuentra la string, vamos a dar doble click y caemos justamente aqu:

    Como vemos en la imagen una direccin antes en 004340BD encontramos un salto condicional el cual va a determinar si nos muestra la nag con el mensaje de serial incorrecto o salta al mensaje de que nuestro software se ha registrado:

    Regresando a la imagen anterior podemos ver que antes del salto condicional encontramos una llamada en la direccin 004340A5 la que va a

    Autor: Luis Tllez N. 16

  • Keygenning MD5

    determinar si se ejecuta el salto o no. Asi que posicionados en esa direccin ponemos un breackpoint con F2 para que el programa se pare antes de ejecutar el salto. Como vemos el programa para en la direccin donde pusimos el breakpoint, sin embargo olly queda debajo de la ventana y esto lo arreglamos pulsando alt+F5 para pasar a olly en primer plano. Ahora entraremos en la call con f7 y caemos en esta direccin:

    Ahora lo que nos queda es ir recorriendo lnea por lnea con f8 para poder conocer que hace el programa antes del salto. Podemos observar muchas llamadas a varias direcciones offset entre esas llamadas vemos que utiliza un archivo llamado SpyEmergency.pfa y tambin un mensaje que hace referencia a una infiltracin de serial:

    Autor: Luis Tllez N. 17

  • Keygenning MD5

    Si bajamos unas lneas ms en la direccin 0042FDBA encontramos una llamada interesante; ah agregue un comentario, dentro de esa llamada se hace una compara del serial que metimos con algn otro que este en la lista de seriales que se hayan filtrado.

    Si entramos en esa llamada con F7 observamos el siguiente cdigo:

    Cuando sigamos avanzando hasta la direccin 00490292, encontramos un TEST EAX,EAX hace un testeo a los registros, si son iguales entonces se ejecuta el salto a la direccin 004902A4, as que vemos que hay en los registros:

    Como vemos se encuentra nuestro nmero de serie y uno de la lista de seriales filtrados, como no son iguales entonces no se ejecuta el salto, pero si hubieran sido iguales se ejecutara el salto y nos mandara el mensaje de nmero de serie invalido, como no se ejecut nos permite continuar.

    Autor: Luis Tllez N. 18

  • Keygenning MD5

    Cuando salimos de esa rutina caemos en la direccin siguiente de la call a la que ingresamos que sera en la direccin 0042FDBF donde nuevamente se hace un test EAX,EAX y como en este momento nuestro nuestro registro de estado Zero Flag est en 1 entonces se ejecuta el salto:

    Y caemos justamente aqu donde podemos observar que unas lneas ms abajo encontramos un salto incondicional, que nos regresara a la direccin donde se empieza a comparar nuestro nmero de serie con alguno de la lista. Para agilizar esto vamos a poner un BP (Break Point) en la direccin siguiente al salto, esta es en 0042FE3C y una vez puesto el BP damos F9 para continuar analizando:

    Cuando lleguemos unas lneas ms abajo vamos a ver unas llamadas interesantes donde se van a tomar nuestro nombre y nuestro correo:

    En esas llamadas les agregue el comentario para identificarlos, y sabemos que esas llamadas toman esos datos por que antes de iniciar la siguiente llamada hacen un PUSH EAX esto quiere decir que los datos los mete en la pila, y si observamos la pila podemos ver nuestro correo:

    Autor: Luis Tllez N. 19

  • Keygenning MD5

    Seguimos bajando unas lneas ms hasta que lleguemos a esta direccin:

    Esta direccin es muy importante as que entremos con F7 y vemos lo que hay adentro:

    Como pueden observar nuevamente encontramos ms llamadas y como se dan cuenta les he agregado nuevamente comentarios. As que vallamos a esa llamada y entremos con F7:

    Autor: Luis Tllez N. 20

  • Keygenning MD5

    Observamos otras dos llamadas, en la segunda de ellas, es donde a nuestro nombre se le agrega un digito. Cuando pasemos esa llamada con F8 podemos observar en el registro EAX lo siguiente:

    Se le agrego el primer digito que es el numero 8, seguimos traceando hasta salir de la call a la que habamos entrado. Cuando salimos de ah podemos ver que las dems call llaman a la misma direccin:

    Si entramos en cada call veremos cmo se va agregando cada uno de los dgitos que ya tengo comentados en el desensamblado. Voy a entrar en la ltima call que sera en la direccin 0046FBF8, para observar cmo quedara nuestro nombre:

    Como vemos a nuestro nombre se le agrega la cadena 8b3zo. Ahora sigamos traceando con F8 y pasamos los dos saltos que estn ms abajo:

    Autor: Luis Tllez N. 21

  • Keygenning MD5

    Ahora nos encontramos otra llamada interesante en la direccin 0046FC44, as que entramos y vemos lo siguiente:

    Primero mete en la pila el registro EBP despus mueve lo que hay en ESP A EBP la siguiente rutina dice que mueve a ECX el argumento 2 en este caso el registro ECX se queda igual, en este momento vale esto:

    Como vemos es el largo de nuestro nombre concatenado con 8b3zo que en total suman nueve. La siguiente lnea hace un XOR EAX,EAX para limpiarlo, anteriormente tenia nuestro nombre y despus del xor queda en 0000 para utilizar el registro.

    Autor: Luis Tllez N. 22

  • Keygenning MD5

    Ahora encontramos un MOV EDX,[ARG,1] es decir que mueve al registro EDX el argumento 1, en otras palabras como podemos ver, ese argumento es nuestro nombre:

    Ahora nos encontramos en una rutina importante que es:

    XOR BYTE PTR DS: [EAX+EDX],4

    Esto quiere decir que va a hacer un XOR digito por digito del registro EDX y el segundo operando seria 4. Cmo se hace esto? Primero necesitamos saber la tabla del XOR que es la siguiente:

    1 xor 1 = 0 1 xor 0 = 1 0 xor 1 = 1 0 xor 0 = 0

    En otras palabras nmeros iguales dan 0 y nmeros diferentes dan 1 Ahora basta con convertir el primer digito de nuestro nombre a Hexadecimal y despus a Binario; y aremos lo mismo con el segundo operando que sera 4 pero solo lo pasaremos a binario quedando asi:

    L = 4Ch = 00110010

    4h = 0010 Si aplicamos Xor quedara: 01001000 Si el resultado (01001000) lo convertimos en hexadecimal quedara, 48h y si lo convertimos a ascii seria la letra H. Este mismo proceso lo va a realizar con cada uno de los dgitos que componen nuestro nombre.

    Autor: Luis Tllez N. 23

  • Keygenning MD5

    Para agilizar el proceso vamos a poner un BP justo en el POP EBP y damos F9 para ejecutar el loop o bucle ms rpido. Cuando hagamos esto podemos ver en nuestros registros que ahora nuestro nombre pasa a ser el siguiente:

    Ahora lleguemos hasta el Ret que est a continuacin y salimos a de la llamada a la que ingresamos. Una vez fuera, seguimos traceando hasta llegar a la llamada que se encuentra en 0046FC68 que sera la segunda llamada despus de la ltima a la que habamos ingresado. Entramos ahora a esta llamada con F7 y encontramos esto:

    Vamos a seguir recorriendo lnea por lnea hasta llegar a la llamada 0046F960, quesera la llama que esta seleccionada en color verde. Aclaro: en algunas llamadas no estamos entrando ya que no encontramos alguna rutina importante para nuestro cdigo, adems para no hacer tan grande el escrito solo estamos entrando en las llamadas importantes. Cuando entremos a la llamada que hacamos mencin hace un momento veremos el siguiente cdigo:

    Autor: Luis Tllez N. 24

  • Keygenning MD5

    Vamos a recorrer el cdigo lnea por lnea pero cuando lleguemos en la direccin 004095B0 que la estoy sealando con la flecha, entonces puede que su olly les mande el siguiente error:

    Eso lo arreglamos, como dice el mensaje, yendo a optiones Security una vez ah tildamos la opcin que subrayo de color naranja, esto permitir poder agregar una excepcin a comandos indefinidos y nos permitir continuar:

    Autor: Luis Tllez N. 25

  • Keygenning MD5

    Vamos ahora recorriendo lnea por lnea hasta la primer call encontrada en la direccin 004095BA y entramos con la tecla enter solo para ver el contenido de esa llamada y encontramos lo siguiente:

    Como vemos encontramos las cuatro variables de la estructura md5, esto quiere decir que estamos en el MD5Init que es donde se llaman a esas variables. Continuamos con F8 para no entrar en la llamada y seguimos bajando unas lneas ms, cuando lleguemos en la tercera llamada:

    Autor: Luis Tllez N. 26

  • Keygenning MD5

    Posicionados en esa llamada apretamos la tecla enter solo para ver el contenido y vemos esto:

    Vemos otras llamadas ms, ahora con el cursor seleccionamos la segunda llamada que estoy apuntando con la flecha y una vez que esta seleccionada esa llamada damos enter y vemos lo siguiente:

    Autor: Luis Tllez N. 27

  • Keygenning MD5

    Tal vez a simple vista no entendamos que es lo que estamos viendo, pero si ponemos atencin y ms al cdigo que resalto en color amarillo que es: D76AA478 Vemos que es el mismo primer elemento de la tabla de 64 elementos que mencionamos en la seccin Hablando de MD5:

    Quiere decir que en esas llamadas encontramos la rutina de MDUpdate que es donde se utiliza esa tabla para generar el hash. Continuemos con F8 para no entrar a la llamada principal y cuando pasamos las siguientes llamadas:

    Autor: Luis Tllez N. 28

  • Keygenning MD5

    Podemos ver en los registros dos cosas, primero nuestro nombre de usuario cuando se le paso por el Xor, 4 y tambin una cadena de 32 dgitos que sera el hash md5 de nuestro nombre de usuario:

    Corroboramos con nuestra calculadora de hash md5:

    Como vemos el texto que pasa por la rutina criptogrfica es nuestro nombre de usuario. Sigamos traceando con F8 hasta el RETN para salir de esa llamada y llegamos aqu:

    Autor: Luis Tllez N. 29

  • Keygenning MD5

    En las dems rutinas no encontramos nada interesante asi que bajamos hasta el RETN nuevamente para salir de esa rutina caemos en esta direccin:

    Vamos a bajar nuevamente con F8 hasta la llamada que se puede ver en la imagen y entramos en esa llamada con F7 y vemos lo siguiente:

    Autor: Luis Tllez N. 30

  • Keygenning MD5

    Caemos nuevamente en la rutina anterior donde a nuestro nombre se le agregaba un digito vamos a ir bajando con F8 hasta pasar la llamada que tengo comentada y vemos en el registro lo siguiente:

    Ahora va a empezar a trabajar con nuestro correo de la misma forma que nuestro nombre, pero ahora el primer digito a agregar es la letra c. Sigamos con F8 hasta salir de la llamada a la que entramos y caemos en la siguiente lnea despus de la llamada:

    Como vemos las dems llamadas son a la misma direccin 0046F890 lo que quiere decir que va a hacer el mismo proceso asi que ya no vamos a entrar en esas llamadas, solo vamos a ir bajando hasta la direccin 0046FCF6 cuando estemos en esa direccin podremos ver el resultado de nuestro correo:

    Autor: Luis Tllez N. 31

  • Keygenning MD5

    Ahora vemos que los dgitos que se agregaran sern c6ete seguiremos bajando hasta la llamada que se encuentra despus de esos dos saltos:

    Entramos con F7 y encontramos nuevamente otra Bucle que hace lo mismo que hizo con nuestro nombre:

    Es decir va a volver a hacer un Xor,4 , asi que pongamos nuevamente un BP en la instruccin POP EBP para ver el resultado de este bucle en el registro EDX:

    Ahora el resultado de nuestro correo despus del xor queda asi:

    Autor: Luis Tllez N. 32

  • Keygenning MD5

    "Gvegoav~ahpDciemh*gkig2apa"

    Vamos a seguir troceando hasta el ret y caemos en este lugar:

    Si bajamos hasta la llamada que se hace en la direccin 0046FD2E y entramos con la tecla enter veremos que donde caemos en esta IMAGEN Es decir si continuamos ese mismo proceso ya descrito, veremos que ahora se pasa por el MD5 nuestro correo. As que no entremos en esa llamada solo pasmosla con F8 y cuando la pasemos podremos ver en la pila dos cadenas md5:

    La primera sabemos que corresponde a nuestro nombre y la segunda debera corresponder a nuestro correo as que corroboramos:

    Autor: Luis Tllez N. 33

  • Keygenning MD5

    Como vemos ya tenemos el md5 de nuestro correo, lo que vamos a hacer es seguir bajando y vamos a ver muchas call, la mayora nos manda a la rutina que iba agregando un digito a nuestro nombre y correo, asi que vamos a ir bajando con F8 sin necesidad de entrar. Cuando lleguemos a la direccin offset 0046FEA1 podremos ver que el resultado final es un 3001400191krx5l

    Esa string va a ser constante al igual que los dgitos que se le iban agregando a nuestros nombres. Si entramos en la llamada que se encuentra en la direccion 0046FE2C, vemos la siguiente rutina:

    Como vemos nuevamente hay un Xor,4 pero en este caso sera a la nueva cadena de texto que se gener y el resultado de esto sera: 7445045=5ov|1h Ahora vamos a seguir bajando y pasando algunas llamadas y despus de esta:

    Autor: Luis Tllez N. 34

  • Keygenning MD5

    Podemos ver que en la pila encontramos un nuevo hash md5:

    Este hash pertenece la nueva cadena de texto. Podemos corroborar con nuestra calculadora y nos dar la misma string. Vamos a seguir bajando y pasando por muchas llamadas y si observamos en la pila se van a empezar a llamar el hash de nuestro nombre y correo, cuando pasemos esta llamada:

    Observamos cmo se empieza a concatenar todos nuestros hash, como se ve en la siguiente imagen:

    Vamos a seguir troceando con F8 y conforme vayamos bajando en la pila veremos un nuevo hash:

    Si rectificamos veremos que estamos en lo correcto:

    Autor: Luis Tllez N. 35

  • Keygenning MD5

    Hasta aqu al parecer tenemos parte de lo que ser nuestro serial ya que son solo 32 dgitos. Sigamos analizando el programa y veamos que ms encontramos, las lneas de cdigo que estn a continuacin son muy importantes que seran las siguientes:

    Vamos a entender el cdigo que est en la imagen: Primero testea lo que hay en el registro eax, en este caso es el has md5 de la suma de los dems, es decir: "27787728aa90f88a6bc90d41241a28a9" Como es lo mismo no se ejecuta el salto, despus viene la siguiente lnea que es: CMP DWORD PTR DS:[EAX-8],8 que quiere decir esto que compara que en EAX tengo -8, pero como vemos en la seccin basura del olly vemos que nos dice que tiene esto:

    Si pasamos esos 20 a decimal vemos que nos da 32 es decir el tamao de dgitos que hay en EAX:

    Entonces como no es igual no se ejecuta el salto. La siguiente lnea es un PUSH 7 es decir que mete 7 dgitos en la pila.

    Autor: Luis Tllez N. 36

  • Keygenning MD5

    La siguiente lnea solo hace un movimiento despus de eso viene una llamada y dentro de la llamada encontramos esto:

    Todos esos movimientos se hacen sobre EAX es decir sobre nuestro hash md5, en resumen se van a mover el nmero de dgitos delimitados por el PUSH 7 que antecede esa llamada. Por eso cuando pasamos esa llamada vemos en el registro lo siguiente:

    Como vemos desaparecen 7 dgitos del hash, sin embargo no se eliminan, solo se recorren ya que si hacemos click derecho sobre EAX y seleccionamos Follow in Dump veremos que esta nuestro hash completo:

    La siguiente instruccin es MOV BYTE PTR DS:[EAX],2D, es decir va a cambiar el digito que este al principio del registro EAX en este caso 8 por 2D que en ascii seria - as que cuando pasamos esa lnea podemos ver el cambio. La siguiente instruccin es MOV EAX, DWORD PTR DS:[ESI+4] esto hace regresar los 7 lugares al EAX quedando as nuestro hash:

    Las dems lneas aran lo mismo es decir ms abajo encontraremos un PUSH 0F que en decimal seria 15 y en lugar 16 ser cambiado por un - lo mismo pasara con el PUSH 17 y en el lugar 24 ser cambiado por un - asi que conociendo esto vamos a poner un BP en el ltimo cambio que ara es decir en el ltimo MOV BYTE PTR DS:[EAX],2D para avanzar hasta ah.

    Autor: Luis Tllez N. 37

  • Keygenning MD5

    Despus de eso vemos una llamada a la cual vamos a entrar con F7:

    Cuando entramos vemos lo siguiente:

    Cuando bajemos algunas lneas vamos a ver en nuestro registro EAX como ha quedado nuestro nmero de serie. La siguiente rutina lo que ara ser pasar las letras que tengamos a maysculas quedando de esta manera:

    Hasta aqu vamos bien as que seguimos bajando y nos topamos con otra llamada:

    Autor: Luis Tllez N. 38

  • Keygenning MD5

    Dentro de esa llamada encontramos otro bucle que influye en nuestro serial:

    Vemos que empieza una comparacin de lo que hay en EDX y lo hace bite por bite y lo compara con 30h que en decimal seria 0 si no es 0 entonces se ejecuta el salto pero si lo es, entonces se cambia el bite por 45h es decir E. Quedando nuestro nmero de serie as: 2778772-AA9EF88-6BC9ED4-241A28A9 Despus de que salimos de ah con el RETN que hay llegamos aqu:

    Pasamos otra vez todas esas llamadas con F8 para no entrar a ninguna y salimos de ah con el RETN y volvemos a salir una lnea ms debajo de la llamada que entramos casi al principio donde agregaban dgitos a nuestro nombre, correo y se generaba la string que sera en la siguiente direccin:

    Autor: Luis Tllez N. 39

  • Keygenning MD5

    Algo interesante es que donde salimos lneas ms abajo encontramos otra llamada si entramos en ella con F7 veremos que se repite todo el proceso anterior para generar el nmero de serie. Pero en esta ocasin se genera la string constante: "300160287krx5l" y si lo pasamos por el xor, 4 quedara 7445246

  • Keygenning MD5

    Como vemos ahora nos manda el mensaje de que nos hemos registrado y si cerramos todo incluso olly y abrimos el programa vemos lo siguiente:

    Desapareci el botn de comprar y aparece el botn de About y si damos click ah aparecen nuestros datos de registro. Con esto hemos terminado nuestro objetivo. Ya tenemos los datos y proceso para programar un keygen, pero como hay que recordar, es un antivirus lo que quiere decir es que en alguna actualiacion nos mande nuestro serial a la lista negra, tal vez no inmediatamente. Asi que lo siguiente seria hacer un parche para esa verificacin pero no pienso abarcar eso en este tutorial ya que se aria ms extenso debido a que tal vez tengamos que enfrentarnos a la encriptacin CRC32. Y tambin porque si les gusta el programa, se espera que compren la licencia desde la pgina oficial ya que como dije al principio esto solo es educacional sin fines de lucro.

    Autor: Luis Tllez N. 41

  • Keygenning MD5

    Programando keygen En esta seccin nos centraremos en la programacin del keygen el cual estar hecho en ensamblador, por lo cual para poder compilar necesitamos tener instalado masm32. Necesitamos tambin la librera cryptohash para poder generar el hash md5 No explicare lnea por lnea del cdigo de ensamblador, ms bien solo abarcare el cdigo ms significativo de la programacin. Pare esto copiare el contenido del archivo .ASM el Source completo se puede descargar de la siguiente direccin https://www.mediafire.com/?2xf5020dn8xm0my Donde estar detallado igual que en este documento, y si le dedicamos tiempo para detallar la esttica podramos obtener algo como esto:

    Bien recordemos cuales son los pasos para generar un serial valido y son los 17 pasos descritos a continuacin: 1 Toma nombre = Luis 2.- Lo concatena con la string "8b3zo" = Luis8b3zo 3.- Hace un xor,4 a nuestra cadena = Luis8b3zo = "Hqmw

  • Keygenning MD5

    10.- La pasa por el xor,4 = 3001400191krx5l = "7445045=5ov|1h" 11.- Le pasa por el md5 = 7445045=5ov|1h= "0a01a25d3961ea0d0c85d2fa029599ab" 12.- Concatena todos los md5 separados con "-" 14.- Pasa por el md5 los has concatenados = "27787728aa90f88a6bc90d41241a28a9" 15.- El octavo digito es cambiado por "-" = "2778772-aa90f88-6bc90d4-241a28a9" 16.-Pasa a maysculas ="2778772-AA90F88-6BC90D4-241A28A9" 17.- Cambia "0" por "E"=2778772-AA90F88-6BC90D4-241A28A9 = "2778772-AA9EF88-6BC9ED4-241A28A9" Esos 17 pasos son necesario para que nuestro keygen funcione a la perfeccin as que a continuacin pasare a detallar el cdigo y con eso daremos fin al escrito: .386 .model flat,stdcall option casemap:none include Keygen.inc .code start: invoke GetModuleHandle,NULL mov hInstance,eax invoke DialogBoxParam,hInstance,IDD_KG,NULL,DlgProc,0 invoke ExitProcess,eax DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM .if uMsg==WM_INITDIALOG invoke SendMessage,hWin,WM_SETICON,1,eax .elseif uMsg==WM_COMMAND .if wParam == IDC_Gen invoke GetDlgItemText,hWin,IDC_Name,addr Nombre,40 ; Tomamos nombre del EditBox test eax,eax ; Comparamos si se ha ingresado algun dato en el edibox je nad ;En caso negativo hacemos un salto de esta manera evitamos que al no ingresar dato alguno Se genere un numero de serie con las cadenas que tenemos para concatenar como "8b3zo"

    Autor: Luis Tllez N. 43

  • Keygenning MD5

    invoke lstrcpy,addr Ctname,addr Nombre ;Copiamos nombre a una variable en este caso Ctname invoke lstrcat,addr Ctname,chr$("8b3zo"); Concatenamos con la string constante invoke lstrcpy,addr xorname,addr Ctname ;Lo concatenado lo copiamos a otra variable para trabajar mas comodos invoke lstrlen,addr xorname ;Calculamos el largo de nuestra string para generer el bucle mov sizename,eax ;Movemos el tamano a sizename xor eax,eax ; Limpiamos Registros a utilizar xor ecx,ecx @@: ; Iniciamos Bucle movsx ecx,byte ptr ds:[xorname+eax];movemos Byte por byte de nuestro nombre concatenado xor cl,4 ;Procedemos a hacer un xor mov byte ptr ds:[res1+eax],cl;Movemos el resultado a la variable res1 inc eax ; incrementamos eax cmp eax,sizename ;Comparamos eax con el tamamano de la string jb @b ; regresamos al inicio del bucle mov sizeres1,eax ;Aqui como ya tenemos el largo de res1 en eax procedemos solo a guardarlo a otra variable invoke MD5Init ; Iniciamos rutina de hash md5 invoke MD5Update,addr res1,sizeres1 ;Como dice el archivo cryptohash necesitamos dos argumentos MD5Update proto lpBuffer:DWORD,dwBufLen:DWORD es decir el texto a pasar por el hash y su longitud invoke MD5Final,;finalizamos hash invoke HexEncode,eax,MD5_DIGESTSIZE,addr mdname ;Convertimos hash a cadena invoke CharLower,addr mdname ;Aqui convertimos el resultado en minusculas ya que lo necesitamo asi Se sigue mismo procedimiento con el e-mail invoke GetDlgItemText,hWin,IDC_Email,addr Email,40 test eax,eax je nad invoke lstrcpy,addr Ctmail,addr Email invoke lstrcat,addr Ctmail,chr$("c6ete") invoke lstrcpy,addr xormail,addr Ctmail invoke lstrlen,addr xormail mov sizemail,eax

    Autor: Luis Tllez N. 44

  • Keygenning MD5

    xor eax,eax xor ecx,ecx @@: movsx ecx,byte ptr ds:[xormail+eax] xor cl,4 mov byte ptr ds:[res2 + eax],cl inc eax cmp eax,sizemail jb @b mov sizeres2,eax invoke MD5Init invoke MD5Update,addr res2,sizeres2 invoke MD5Final invoke HexEncode,eax,MD5_DIGESTSIZE,addr mdmail invoke CharLower,addr mdmail ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; invoke lstrcpy,addr mdtotal,addr mdname ;Concatenamos todos los hash md5 invoke lstrcat,addr mdtotal,chr$("-") invoke lstrcat,addr mdtotal,addr mdmail invoke lstrcat,addr mdtotal,chr$("-") invoke lstrcat,addr mdtotal,chr$("0a01a25d3961ea0d0c85d2fa029599ab");Escribimos directamente el hash de nuestra cadena constante es decir: "7445045=5ov|1h" invoke lstrlen,addr mdtotal ;Tomamos longitud de cadena para pasarlo por la rutina del md5 mov sizemdtotal,eax invoke MD5Init invoke MD5Update,addr mdtotal,sizemdtotal invoke MD5Final invoke HexEncode,eax,MD5_DIGESTSIZE,addr resmdtotal invoke lstrcpy,addr Serial,addr resmdtotal; Copiamos el resultado a variable para trabajar mov byte ptr ds:[Serial+7],'-' ;Empezamos los movimientos para empezar a sustituir algunos lugares mov byte ptr ds:[Serial+0fh],'-';Por los - mov byte ptr ds:[Serial+17h],'-' invoke lstrlen,addr Serial ;Tomamos la longitud de nuestra cadena

    Autor: Luis Tllez N. 45

  • Keygenning MD5

    mov sizeserial,eax xor eax,eax inicio: cmp byte ptr ds: [Serial+eax],30h;Comparamos si el primer byte es 0 jnz medio;Si no lo es salta a incrementar eax mov byte ptr ds: [Serial+eax],45h ;Si el byte es 0 es sutituido por E medio: inc eax cmp eax,sizeserial jb inicio invoke SetDlgItemText,hWin,IDC_Serial,addr Serial;Mostramos resultado en EditBox .elseif wParam== IDC_Ext invoke SendMessage,hWin,WM_CLOSE,NULL,NULL .endif .elseif uMsg==WM_CLOSE Invoke EndDialog,hWin,0 nad: invoke SetDlgItemText,hWin,IDC_Serial,addr textnad;Mensaje a mostrar en caso de no haber nada en EditBox ret .endif xor eax,eax Ret DlgProc EndP end start

    Autor: Luis Tllez N. 46