Necesito ayuda para poder modificar un .dll

Iniciado por Imanol015, 25 Enero 2018, 14:42 PM

0 Miembros y 1 Visitante están viendo este tema.

Imanol015

Primero que nada, queria saludarlos y agradecerles por su tiempo.
Para ponerlos al tanto: En la empresa donde trabajo, el tecnico aterior cambio las passwords por defecto de todo sistema conocido por el hombre, y no nos las da, ya sea porque no se las acuerda o no quiere que las sepamos, el caso es el mismo. El problema en especifico que tenemos es con un DVR marca Nixzen (NX-EDVR 08/200+8A) que esta con contraseña y no podemos acceder ni hacerle reset (por que no sabemos como).
El tecnico antes mencionado usaba un programa llamado CMS para centralizar los DVR y poder visualizar y controlar varios al mismo tiempo. Al abrir el programa este ya entra con la cuenta admin pero el tema es que quiero averiguar la contraseña de dicha cuenta para ver si coincide con la del DVR.
Investigando por los archivos del DVR, encontre un archivo xml, donde guarda los usuiarios y contraseñas, el problema es que las contraseñas estan cifradas.
D19E4D15EC7276B6 = contraseña cifrada de una cuenta que cree yo, dice "admin".
C23B965583AD3AE0= aca dice "a"
669A9F22ECFFF103= aca dice "b"
2DEFBBD5087D4360= aca dice "c"

Use el programa W32DSM89 para desamblar el .exe del CMS y ver como encriptaba el password, y descubri que lo hace llamando a un archivo "password.dll", abri dicho archivo con el W32DSM89 y mas o menos encontre donde exporta/importa la contraseña cifrada/descifrada que le envia el CMS.
Mi idea es cambiar la parte donde exporta la contraseña cifrada por la parte donde exporta la descifrada. Y de esa forma que el archivo .dll siempre devuelva la contraseña descifrada.
El problema esta que no se puede(o no se hacerlo) usar el W32DSM89 para modificar los archivos porque solamente los desambla, asi que baje el programa Olly dbg que sirve para modificar el programa, pero en este programa no logro encontrar las importaciones/exportaciones.

Mientras les subo la carpeta del programa a MEGA descubri que en la carmeta XML (dentro de CMS) hay un archivo llamado "data" donde guarda los usuarios y contraseñas de cada DVR al que se conecta el programa, por lo la contrasñea que realmente me interesa averiguar esesta password="A9C63BCB604427CF". Si alguno sabe como cifra las contraseñas el archivo password.dll y me lo explica, podria descifrar manualmente esa contraseña y problema solucionado.

Les dejo el link con todos los programas antes mencionados: https://mega.nz/#F!TsAXXbxK!Q2NDjxbBoQg0vNQX4ZLUaw

Si hay algo que no explique bien haganmelo saber por favor.
Gracias por su tiempo y espero que puedan ayudarme :D


engel lex

si el programa está bien hecho, no hay decifrado que valga, ya que las contraseñas por standard se almacenan en su forma de hash y claramente tu onfiguración lo muestra

CitarD19E4D15EC7276B6 = contraseña cifrada de una cuenta que cree yo, dice "admin".
C23B965583AD3AE0= aca dice "a"
669A9F22ECFFF103= aca dice "b"
2DEFBBD5087D4360= aca dice "c"

esto es un hash de 16bytes, deconozco cual tipo puede ser pero podría ser un md4, crc16 o similar (algo poco común y viejo)

el hash es un proceso de un solo camino y hecho para no conseguir información de el, no se puede obtener nada de vuelta, la unica forma de atacarlo es por fuerza bruta, es decir, intentar opciones hasta dar con la correcta que sabrás es la correcta porque da el mismo resultado... el hash no te permite saber el largo ni predecir si vas por buen camino
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Imanol015

Cita de: engel lex en 25 Enero 2018, 15:00 PM
si el programa está bien hecho, no hay decifrado que valga, ya que las contraseñas por standard se almacenan en su forma de hash y claramente tu onfiguración lo muestra

esto es un hash de 16bytes, deconozco cual tipo puede ser pero podría ser un md4, crc16 o similar (algo poco común y viejo)

el hash es un proceso de un solo camino y hecho para no conseguir información de el, no se puede obtener nada de vuelta, la unica forma de atacarlo es por fuerza bruta, es decir, intentar opciones hasta dar con la correcta que sabrás es la correcta porque da el mismo resultado... el hash no te permite saber el largo ni predecir si vas por buen camino

Ahh gracias por la claracion entonces :D.
Y que opinas de cambiar la parte del .dll que exporta la contraseña cifrada por la que la exporta descifrada?

engel lex

puedes intentarlo... pero si es hash, no existe un "descifrado" simplemente la contraseña a probar se pasa por el mismo filtro y al final se comprueba si es igual

más allá de la lógica en este caso, no es mi especialidad, no sabría opinar sobre dll
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Imanol015

Cita de: engel lex en 25 Enero 2018, 15:15 PM
puedes intentarlo... pero si es hash, no existe un "descifrado" simplemente la contraseña a probar se pasa por el mismo filtro y al final se comprueba si es igual

más allá de la lógica en este caso, no es mi especialidad, no sabría opinar sobre dll

Y si hago un programita que le mande al .dll la contraseña "cifrada" para q me la devuelva "descifrada"?
Lo haria en C que es el lenguaje que conozco pero no se como tendria que llamar al .dll y menos ingresarle la contraseña.
Alguna idea?

engel lex

Cita de: Imanol015 en 25 Enero 2018, 15:23 PM
Y si hago un programita que le mande al .dll la contraseña "cifrada" para q me la devuelva "descifrada"?
Lo haria en C que es el lenguaje que conozco pero no se como tendria que llamar al .dll y menos ingresarle la contraseña.
Alguna idea?


si es hash, no existe un descifrado

https://es.wikipedia.org/wiki/Funci%C3%B3n_hash




El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Imanol015

Cita de: engel lex en 25 Enero 2018, 15:29 PM

si es hash, no existe un descifrado

https://es.wikipedia.org/wiki/Funci%C3%B3n_hash





No quiero ser cabeza dura, pero si al programa principal (CMS) le ingresas una contraseña con tu teclado, el se la envia al .dll la procesa y devuelve el supuesto "hash" y en otra instancia del programa, el programa principal le envia el "hash" y el .dll le devuelve la contraseña original, debe haber un proceso de cifrado y descifrado.
Si abris el .dll hay una parte donde exporta la pw cifrada, y otra donde la exporta descifrada..

engel lex

#7
ok! si es así entonces si está cifrando, en tal caso sería un cifrado por bloques de 16bytes, esto puede comprobarlo creando una contraseña más larga que 16 bytes, es decir incluye esta contraseña

0123456789acbdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVUXYZ


si está cifrando el resultado debería ser de unos 64 caracteres, es simplemente imposible que cifre todo eso en 16bytes sin truncar información (luego tendrás que probar cambiando las primeras o ultimas letras, si solo entra con la frase completa si es hash)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

MCKSys Argentina

Hola!

Después de debuggear el programa con Olly, veo que no usa hash sinó que es un modo de cifrado.

Por ej., si pones un BP en 470673, verás que llama a la función DecryptStringEX pasándole 3 parámetros:

Código (asm) [Seleccionar]

00470661                        |>  6A 01                |PUSH 1
00470663                        |.  8D8424 64020000      |LEA EAX,DWORD PTR SS:[ESP+264]
0047066A                        |.  50                   |PUSH EAX
0047066B                        |.  8D8C24 64040000      |LEA ECX,DWORD PTR SS:[ESP+464]
00470672                        |.  51                   |PUSH ECX
00470673                        |.  E8 02D20700          |CALL <JMP.&Password.DecryptStringEX>


Con eso ya puede hacer un proggie que use la DLL y desencripte lo que quieras...  :P

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


Imanol015

#9
Cita de: engel lex en 25 Enero 2018, 15:45 PM
ok! si es así entonces si está cifrando, en tal caso sería un cifrado por bloques de 16bytes, esto puede comprobarlo creando una contraseña más larga que 16 bytes, es decir incluye esta contraseña

0123456789acbdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVUXYZ


si está cifrando el resultado debería ser de unos 64 caracteres, es simplemente imposible que cifre todo eso en 16bytes sin truncar información (luego tendrás que probar cambiando las primeras o ultimas letras, si solo entra con la frase completa si es hash)

Solo me deja ingresarle 15 caracteres,
le ingrese 15 letras "a" y el resultado fue= 2E313EB57566A2B51C273B336FC6E071


Cita de: MCKSys Argentina en 25 Enero 2018, 15:51 PM
Hola!

Después de debuggear el programa con Olly, veo que no usa hash sinó que es un modo de cifrado.

Por ej., si pones un BP en 470673, verás que llama a la función DecryptStringEX pasándole 3 parámetros:

Código (asm) [Seleccionar]

00470661                        |>  6A 01                |PUSH 1
00470663                        |.  8D8424 64020000      |LEA EAX,DWORD PTR SS:[ESP+264]
0047066A                        |.  50                   |PUSH EAX
0047066B                        |.  8D8C24 64040000      |LEA ECX,DWORD PTR SS:[ESP+464]
00470672                        |.  51                   |PUSH ECX
00470673                        |.  E8 02D20700          |CALL <JMP.&Password.DecryptStringEX>


Con eso ya puede hacer un proggie que use la DLL y desencripte lo que quieras...  :P

Saludos!


Perdon la ignorancia pero a que te referis con un proggie? un programa? No quiero ser abusivo y pedir que me lo hagan, pero si pueden darme cualquier informacion util para realizar el programa q use al .dll se los agradeceria.

MOD: No hacer doble post. Usa el botón modificar