Académique Documents
Professionnel Documents
Culture Documents
Pues all la pantalla de registro, un ComputerID que de seguro ser generado por crypkey al
muy estilo armadillo, un serial number y muchas opciones que en el modo demo aparecen
activadas en azul, si dejamos vencer el programa pues aparecen en rojo.
Ademas hay otra opcin para remover la licencia instalada, si lo hacemos elprograma no
vuleve a correr ni a patadas. Gracias al uso de la vm he podido retroceder a snapshots donde el
programa esta en modo demo, sino, pues a reinstalar Windows.
Estando aqu ponemos cualquier cosa en el Activation Key y aparece esto:
De nuevo el famoso truquillo del pause, alt+f9, aceptar en el messagebox y caemos aqu:
Pues vemos que estamos en la misma API de la WinGUILib.dll encargada de los messagebox,
adems vemos el key que le puse y una API de la misma dll muy sospechosa:
SaveActivationKey.
La API del messagebox fue llamada desde 40035b3d, demos doble click y veamos que hay all:
1- Antes de abrir un api del crypkey obtiene comunicacin con el por medio de algn tipo
de conexin o interface.
2- Manda al crypkey a guardar el activation key quien sabe donde, de seguro es entonces
cuando el pobre key es manipulado, transformado,encriptado y quien sabe que cosas
mas.
3- Luego le pregunta al crypkey que le pareci la clave, con la API getlicensemode, es
decir que el manejo de la licencia reside solo y solo en el crypkey.
4- Una vez obtiene el license mode, pues por ser pobres le pregunta al crypkey que fue lo
que paso con la explainerror y nos lo restriega en la cara con la messagebox.
Asi de simple, como cualquier proteccin.
Gracias a los programadores tan comodos que no esconden los nombres de las Apis , pues
intentaremos ver de donde obtiene el tal licencemode al inicio, veamos las intermodulars calls:
Y reiniciamos.
Es de suponer que en la comunicacin con crypkey se utilicen direcciones de memoria como
buffer, podra ser el stack, archivos con acceso compartido o areas con los suficientes
permisos.
Uno de las mejores formas de encontrarlas ser fijarnos a salir de cada api de donde obtiene
los valores a comparar:
Con los bp le damos run y aparecemos aqu:
Y mas arriba:
Y luego
Pues esta verificando que discos existen, llega hasta el disco 15, equivalente a buscar 16 discos
duros, esto lo hace 4 veces, adems veamos los registros en cada bp:
Aja, aqu hay algo. Ese archivo tiene nombre muy sospechoso.
Pero que vemos en el call stack:
Pues traceando vemos que lee bloques de 512 bytes , el archivo mide 339978 asi que hara
varios loops hasta llegar al eof.
Durante eso al parecer desencripta lo que lee y lo escribe en otra localidad, vean esto al salir
del primer _read en la pila:
Alli vemos que llamara la funcin a1 de la dll, pero antes vuelve a la carga con la encripcion lo
que podra significar que aun esta encriptada, demos F9 y ahora vemos que empieza a generar
archivos extraos:
Drivers?
Y mas abajo:
USB dongles?
Pues esto esta muy preocupante.
Regresamos al olly anterior y damos F9:
El maldito crea un piping para hablar con un driver, de seguro el .sys que vimos anteriormente.
Asi es como platican, el servicio en conjunto con el driver manejan las licencias, la dll creada en
tiempo de ejecucin es la encargada de la interface entre el programa y estos dos malditos.
Pero como enva y recibe la dll datos?
Demos de nuevo F9:
???
Creo un archivo nuevo con acceso de escritura:
Y en el directorio:
Vean como en la llamada ultima al createfilea el modo es OpenExisting, el programa sabe que
el archivo ya debe de existir, sin embargo no es el quien lo crea puesto que no paro en el bp
del createfilea, debe ser otra entidad. Adivinaron, asi es como se comunican:
1-El programa a travs de la dll escribe un archivo de nombre xxxxx con la solicitud de algo.
2- El crypkey lee este archivo y luego toma las decisiones correspondientes
3- La respuesta del crypkey es enviada a la dll mediante el archivo xxxxx._an
Traceando vemos que el proceso se repite una y otra vez.
Ahora esperamos que la dll intente generar una solicitud y ponemos bp en writefile y
ejecutamos:
Pues esta encriptado, lo mismo es al leer la respuesta. Ahora esperamos a que accese a la
respuesta y ponemos bp en readfile:
Alli lo lee.
Vamos al buffer en el dump:
Encriptado.
Con esto logramos saber como se comunican, pero ahora veamos la interaccion del programa
con la dll.
Parados en un readfile veamos el call stack:
Ponemos el bp en readfile antes de que se ejecute la funcin a1 esa y vemos que la funcin se
ejecuta una vez sin llamar readfile, asi que de seguro es cuando pone la solicitud, la segunda
vez si para en el bp:
Vamos al buffer:
Ahora veremos cuando lo accesa para desencriptar, bp en memory Access al primer dword y
caemos aqu:
Pues hace algo como un crc al archivo, esto es repetido con muchos archivos para ver si han
sido modificados.
Un anlisis de la pila en este punto muestra como se va llenando con las respuestas del
crypkey:
Pues ah esta la versin: Crypkey 6.1, bastante nueva. Ademas confirmamos el driver y el
servicio estn operativos para este programa.
Dejemoslo ah y vamos a install key, pasaremos por una inicializacin de la interface, con
strings que le dicen al crypkey que algo se le enviara, luego aparece el mensaje de error y si
buscamos en la pila: