Pregunta

Estoy tratando de resolver el formato de un archivo de contraseña que es utilizado por un archivo LOGIN DLL del cual no se puede encontrar la fuente. La herramienta de administración se escribió en AFX, por lo que espero que tal vez proporcione una pista sobre el algoritmo utilizado para codificar las contraseñas.

Usando la herramienta de administración, tenemos dos contraseñas codificadas. El primero es & Quot; dinosaur123456789 & Quot; y el hexadecimal del cifrado está aquí:

Los valores hexadecimales resultantes para la contraseña de dinosaurio son

00h: 4A 6E 3C 34 29 32 2E 59 51 6B 2B 4E 4F 20 47 75; Jn & Lt; 4) 2.YQk + NO Gu 10h: 6A 33 09; J 3. 20h: 64 69 6E 6F 73 61 75 72 31 32 33 34 35 36 37 38; dinosaurio12345678 30h: 39 30; 90

Otra contraseña " gertcha " está codificado como e8h: 4D 35 4C 46 53 5C 7E; GROUT M5LFS \ ~

He intentado buscar un XOR común, pero no he podido encontrar nada. Las contraseñas tienen la misma longitud en el archivo de contraseñas, así que supongo que se trata de una codificación reversible (¡era de otra edad!). Me pregunto si las clases AFX pueden haber tenido un medio que se utilizaría para este tipo de cosas.

Si alguien puede resolver la codificación, ¡eso sería genial!

Gracias, Matthew

[editar:] Bien, primero, seguiré adelante y dejaré atrás el pasado en la nueva solución. Hubiera sido agradable utilizar los datos antiguos todavía. De hecho, si alguien quiere resolverlo como un rompecabezas, aún me gustaría poder usarlo.

Para aquellos que quieren probar, obtuve dos contraseñas.

Todos 'a': una contraseña con 19 a: 47 7D 47 38 58 57 7C 73 59 2D 50; G} G8XW | sY-P 79 68 29 3E 44 52 31 6B 09; yh) > DR1k.

Todos 'b': una contraseña con 16 b's. 48 7D 2C 71 78 67 4B 46 49 48 5F; H}, qxgKFIH_ 69 7D 39 79 5E 09; i} 9y ^.

Esto me convenció de que no hay una solución simple involucrada, y que hay algunos comentarios.

¿Fue útil?

Solución

Bueno, hice un criptoanálisis rápido y, hasta ahora, puedo decirte que cada contraseña parece comenzar con su valor ascii + 26. El siguiente octeto parece ser la diferencia entre el primer carácter de la contraseña y el segundo, agregado a su valor ascii. La carta 3d, aún no me he dado cuenta. Creo que es seguro decir que se trata de algún tipo de cifrado de retroalimentación, por lo que XOR no revela nada. Creo que el valor de cada octeto dependerá del anterior.

Puedo continuar, pero esto lleva mucho tiempo. Con suerte, esto puede darle un comienzo, o tal vez darle un par de ideas.

Otros consejos

Pero dado que la salida tiene la misma longitud que la entrada, parece un cifrado de clave fija. Puede ser un xor trivial.

Sugiero probar las siguientes contraseñas:

 * AAAAAAAA
 * aaaaaaaa
 * BBBBBBBB
 * ABABABAB
 * BABABABA
 * AAAABBBB
 * BBBBAAAA
 * AAAAAAAAAAAAAAAA
 * AAAAAAAABBBBBBBB
 * BBBBBBBBAAAAAAAA

Esto quizás debería permitirnos romper el cifrado sin aplicar ingeniería inversa a la DLL.

¿Puede el dll codificar contraseñas de un solo carácter? ¿O incluso una contraseña de cero caracteres?

Querrá comenzar con los casos de prueba más triviales.

Puede que esté viendo este problema desde el ángulo incorrecto. Creo que la mejor razón para descubrir cómo se crean los hashes de contraseñas es aplicar ingeniería inversa al dll de inicio de sesión.

Recomendaría IDA Pro para esta tarea. Vale la pena el precio por la ayuda que le da está invirtiendo el código ejecutable en un ensamblador legible. Hay otros desensambladores que son gratuitos si no quieres pagar dinero pero no he encontrado nada tan poderoso como IDA Pro. Un desensamblador / depurador estático gratuito que recomendaría sería PEBrowse de SmidgeonSoft ya que es bueno para hurgar rápidamente alrededor de un sistema en vivo y tiene un buen soporte PDB para cargar símbolos de depuración.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top