viernes, 27 de abril de 2018

Desbloqueando proyectos de Indusoft Web Studio

Hola, bueno paso a explicar como obtuve el acceso a las pantallas de un proyecto protegidas por contraseña:
Lo primero que hacemos es lanzar el soft, cargar el proyecto, y attachar el thread al ollydbg, luego de revisar un poco los modulos y sus strings y no encontrar nada en concreto, decidí poner bp en todos los memcopy que utiliza el programa. Una vez puestos los bp, le di a continuar ejecución y empezé a eliminar los bp que iban saltando a medida que iba ejecutando acciones hasta llegar a ingresar la clave y darle aceptar, en este punto quebraron algunos bps y a partir de ahí empezé a depurar paso a paso, llegando a un código donde mostraba lo siguiente:


En la imagen se puede apreciar por un lado el ollydebug con la depuración del proyecto, a la izquierda arriba resalto el bp donde el código pone en el stack del micro el pass que yo ingresé y a la derecha abajo en el primer recuadro, hay dos hashes, como es de suponer un es del password original de la pantalla y el otro hash es de mi password, en el segundo recuadro los datos guardados en el stack que fueron pasados como parámetros a una función que debe de incluir o ser la función en la que estoy parado en el bp, creo que no es necesario explicar que hace con esos parámetros.
Analizando un poco el código deduje que el pass se guarda en el mismo archivo de la pantalla, por ello abrí el archivo con PsPad y buscando encontré lo que aparece en la imagen abajo a la derecha, casualmente encontramos el hash del password original, para no dar tanta vuelta y tener que analizar el código y entender que función utiliza para codificar el pass, probé reemplazar el hash por el mio, guardar el archivo y reabrir el proyecto, como era de esperarse el pass de la pantalla cambio al pass que yo ingresé.
Todo esto fue probado sobre un proyecto generado con una versión relativamente nueva.
En proyectos generados con versiones viejas, el password no se encripta.
Por ejemplo:   



Como se puede apreciar el password (Por cuestiones de seguridad no lo mostraré completo) es ?p?r?h?, siempre se encuentra cercano al offset 06B0 y se puede identificar con la signatura anterior de bytes que empiezan con el titulo de la pantalla y continua con bytes que no cambian.
Ese proyecto fue realizado con la versión 7.1, el proyecto de pruebas fue generado con una versión posterior a esta.
Bien esto es todo.
Espero sirva de ayuda para próximas versiones.
Saludos!!