Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: Imanol015 en 25 Enero 2018, 14:42 pm



Título: Necesito ayuda para poder modificar un .dll
Publicado por: Imanol015 en 25 Enero 2018, 14:42 pm
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
 


Título: Re: Necesito ayuda para poder modificar un .dll
Publicado por: 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

Citar
D19E4D15EC7276B6 = 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


Título: Re: Necesito ayuda para poder modificar un .dll
Publicado por: Imanol015 en 25 Enero 2018, 15:06 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?


Título: Re: Necesito ayuda para poder modificar un .dll
Publicado por: 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


Título: Re: Necesito ayuda para poder modificar un .dll
Publicado por: Imanol015 en 25 Enero 2018, 15:23 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?


Título: Re: Necesito ayuda para poder modificar un .dll
Publicado por: engel lex en 25 Enero 2018, 15:29 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






Título: Re: Necesito ayuda para poder modificar un .dll
Publicado por: Imanol015 en 25 Enero 2018, 15:35 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..


Título: Re: Necesito ayuda para poder modificar un .dll
Publicado por: 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

Código:
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)


Título: Re: Necesito ayuda para poder modificar un .dll
Publicado por: 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
  1. 00470661                        |>  6A 01                |PUSH 1
  2. 00470663                        |.  8D8424 64020000      |LEA EAX,DWORD PTR SS:[ESP+264]
  3. 0047066A                        |.  50                   |PUSH EAX
  4. 0047066B                        |.  8D8C24 64040000      |LEA ECX,DWORD PTR SS:[ESP+464]
  5. 00470672                        |.  51                   |PUSH ECX
  6. 00470673                        |.  E8 02D20700          |CALL <JMP.&Password.DecryptStringEX>
  7.  

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

Saludos!


Título: Re: Necesito ayuda para poder modificar un .dll
Publicado por: Imanol015 en 25 Enero 2018, 15:57 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

Código:
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

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

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


Título: Re: Necesito ayuda para poder modificar un .dll
Publicado por: MCKSys Argentina en 25 Enero 2018, 16:05 pm
Hola!

Efectivamente, proggie = programa.

La info necesaria para hacer el programa ya la tienes, si sabes programar.

Haciendo un programa que cargue la DLL y llame a esa función con los parámetros dados (1, string cifrado y buffer para string descifrado) obtienes lo que quieres.

Si no sabes programar, vas a tener que aprender o buscar a laguien que lo haga x ti.

Saludos!


Título: Re: Necesito ayuda para poder modificar un .dll
Publicado por: Imanol015 en 26 Enero 2018, 16:53 pm
Hola!

Efectivamente, proggie = programa.

La info necesaria para hacer el programa ya la tienes, si sabes programar.

Haciendo un programa que cargue la DLL y llame a esa función con los parámetros dados (1, string cifrado y buffer para string descifrado) obtienes lo que quieres.

Si no sabes programar, vas a tener que aprender o buscar a laguien que lo haga x ti.

Saludos!

Bueno, tuve avances, aprendi como ingresar las contraseñas en el olly y como guardarlo como .exe, pero estuve probando y probando, y todavia no engancho donde tengo que ingresarlo, no se nada de assembly. Puedo pedirte que me ayudes con mas pistas? solo necesito ingresar estos:
A9C63BCB604427CF
763BA3E727F6B331
44E4FFB1A5C504A3
F5AD8A7F0D9E4F00
7156647D308C201E

Solo necito averiguar esas 5 contraseñas, pero me gustaria saber usarlo.


Título: Re: Necesito ayuda para poder modificar un .dll
Publicado por: MCKSys Argentina en 26 Enero 2018, 20:50 pm
Bueno, tuve avances, aprendi como ingresar las contraseñas en el olly y como guardarlo como .exe, pero estuve probando y probando, y todavia no engancho donde tengo que ingresarlo, no se nada de assembly. Puedo pedirte que me ayudes con mas pistas? solo necesito ingresar estos:
A9C63BCB604427CF
763BA3E727F6B331
44E4FFB1A5C504A3
F5AD8A7F0D9E4F00
7156647D308C201E

Solo necito averiguar esas 5 contraseñas, pero me gustaria saber usarlo.


Poniendo un BP (BreakPoint) en todas las llamadas a DecryptStringEX, el proggie parará en la primera que usa.
Alterando el parámetro de entrada, podemos descifrar cualquier string válido.
Así, sale:

A9C63BCB604427CF=abcd
763BA3E727F6B331=1234
44E4FFB1A5C504A3=<ejercicio para el lector>
F5AD8A7F0D9E4F00=<ejercicio para el lector>
7156647D308C201E=<ejercicio para el lector>

Saludos!

PD: Si no tienes idea de cómo usar Olly, busca en el FAQ del foro de Ing. Inversa (link en mi firma) el tutorial de Ricardo Narvaja.


Título: Re: Necesito ayuda para poder modificar un .dll
Publicado por: Imanol015 en 29 Enero 2018, 16:37 pm
Poniendo un BP (BreakPoint) en todas las llamadas a DecryptStringEX, el proggie parará en la primera que usa.
Alterando el parámetro de entrada, podemos descifrar cualquier string válido.
Así, sale:

A9C63BCB604427CF=abcd
763BA3E727F6B331=1234
44E4FFB1A5C504A3=<ejercicio para el lector>
F5AD8A7F0D9E4F00=<ejercicio para el lector>
7156647D308C201E=<ejercicio para el lector>

Saludos!

PD: Si no tienes idea de cómo usar Olly, busca en el FAQ del foro de Ing. Inversa (link en mi firma) el tutorial de Ricardo Narvaja.

Bueno, logre mi cometido, encontre las contraseñas, las probe en el programa y funcionan pero en el DVR que era lo que necesitaba no. Me gustaria que si tenes ganas y tiempo me explicaras bien bien como lo hiciste vos, por mera curiosidad.

(http://i68.tinypic.com/9k5r1l.png)

Entiendo que en ECX se guarda el string codificado, y en EAX luego se guarda el string descencriptado, pero aun asi no se como ingresarle el string ecriptado ni luego ver el string en ASCII descifrado.

Yo utilice lo siguiente:

(http://i63.tinypic.com/344tu0k.png)

Si hago correr esa linea de comando con F7, hasta que aparece el numero decimal 126, en los registros me aparece el string en ASCII de la contraseña ubicada en data.xml.
Código
  1. <DEV id="1" ip="1" area="dvrtk" name="DVR" host="192.168.1.10" port="34567" cameras="8" devcType="1" alarmcameras="4" ddnsFlag="0" DDNSHost="" pos="0" desc="" username="admin" OrgId="1" vendor="0" password="A9C63BCB604427CF">

Lo que hice fue ir cambiando el string : "A9C63BCB604427CF" por los que queria averiguar y listo.
Asi y todo, me encataria aprender tu metodo.
Quiero agradecerte por la paciencia y el tiempo,y me gustaria inviarte una cerveza, un cafe, no se que soles consumir. Soy de Quilmes asi que si podes.. arreglamos.