Hace unos días publiqué una entrada del blog sobre la ingeniería reversa del proceso de registro del antivirus fraudulento MacOSX. El propósito era ver si el producto se comportaba como legítimo al registrarlo. El programa se comportó con normalidad, y fingió que había limpiado el ordenador, como también hace su homólogo de Windows. También era posible acceder al servicio técnico del producto cuando se lo registraba.
Hoy revisé una nueva variante para ver si el algoritmo de registro era similar.
Los números de serie ya no están en texto simple, pero siguen siendo fáciles de conseguir. Se hace así:
La función de registro sigue siendo igual: __RegEngine_CheckKey__.
Veámosla con más profundidad para ver qué diferencias existen.
En la imagen de arriba hay algo importante. MOV EDX, 55h. Después de eso, EAX apunta a un código de caracteres ascii. Este es _s_port:
La cadena de caracteres completa es:
1 2 |
dmfbxadcaxgldfngebfxgdmgxebganmffaxmlgmxld`fncgadxladgxfeganabfaxdagbxlbaanb `lfx`ccgxmfgfnlbfmxfagcxdmaenfgamxgag`x``bbn`af`xgcamxagfgnd`d`xmafaxbb`c |
Se inician EDX y EAX antes de llamar a la función __decodestring; ahora veamos lo que hay dentro de esta función de decodificación:
Seguro que has notado que resalté dos líneas en naranja y agregué una flecha roja.
La flecha está frente a la instrucción de decodificación, un simple XOR con un reemplazo de 8 bits ubicado en CL. Como estamos viéndolo por razones de estadística y sin ningún depurador, tratemos de ver qué CL se utiliza durante la decodificación.
Aquí es donde entra lo marcado en naranja. CL son los 8 bits más bajos del registro ECX, así que veamos dónde se modifica ECX.
La primera parte resaltada (estamos yendo de atrás para adelante, así que es la de abajo) dice: MOV ECX, EDI, mientras que la segunda parte resaltada (la de arriba) dice: MOV EDI, EDX.
Esto nos muestra que EDX es el registro con la llave cuando ingresamos la función __decodestring.
Si recuerdas lo que dije al principio del blog, sabrás que EDX tenía 0x55.
Eso es todo. Hemos conseguido nuestra clave para descifrar el programa.
Después de utilizar la función de decodificación, aparece lo siguiente:
Sabemos que la cadena de caracteres puede estar separada. En este caso, está separada por el carácter “;”. Bueno, tenemos suficiente información para decodificar lo que creemos que es nuestro número de serie.
Escribí un script muy sencillo en python para decodificarlo:
1 2 3 4 5 |
key = "dmfbxadcaxgldfngebfxgdmgxebganmffaxmlgm[SNIP]" decoded ="" for letters in key: decoded = decoded + chr(ord(letters)^0x55) print "Your serials are: " + decoded |
Al ejecutarlo, obtenemos lo siguiente:
Your serials are: 1837-4164-2913;2073-2182-0724;8334-8928-9153;6241-9412-3024;4734-1427-9744;7593-5662-8323;9738-3426-1840;3248-2425-5577;5435-2648-4232;1515-8434-7756
Como predije, los números de serie están separados por “;”.
Lo divertido es que son los mismos números de serie que en la versión anterior, aunque el algoritmo es diferente.
Aquí están los números de serie, puedes copiarlos y pegarlos en tu producto falso si lo tienes instalado:
1 2 3 4 5 6 7 8 9 10 |
1837-4164-2913 2073-2182-0724 8334-8928-9153 6241-9412-3024 4734-1427-9744 7593-5662-8323 9738-3426-1840 3248-2425-5577 5435-2648-4232 1515-8434-7756 |
Puedes usar cualquiera de esos números de serie para registrar el producto antivirus fraudulento y así detener las molestas advertencias que inundan tu pantalla. Cuando lo hagas, puedes instalar un producto antivirus para Mac y limpiar tu ordenador como es debido.
Mac Protector: ¡Registra tu copia ahora mismo! Parte 2