algoritmo de desencriptación

Iniciado por MaLkAvIaN_NeT, 3 Noviembre 2015, 03:18 AM

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

MaLkAvIaN_NeT

Buenas noches tengo que acceder a un sistema VFP del cual no tienen la clave, entré a las tablas usuario y la clave se encuentra cifrada con un algoritmo que no es md5, sha1, etc.

La contraseña cifrada es la siguiente:
Citarø»ôj̇

Eh decompilado el .EXE y he encontrado la función cifrar:
Código (visualfoxpro) [Seleccionar]
PARAMETER dato, encript, long
peso = CHR(57) + CHR(51) + CHR(53) + CHR(49) + CHR(52) + CHR(50) + CHR(47) + CHR(41) + CHR(73) + CHR(99) + CHR(62) + CHR(70) + CHR(57) + CHR(51) + CHR(53) + CHR(49) + CHR(52) + CHR(50) + CHR(33) + CHR(14) + CHR(31) + CHR(90) + CHR(67) + CHR(51) + CHR(56) + CHR(90) + CHR(51) + CHR(54) + CHR(43) + CHR(74) + CHR(90) + CHR(34) + CHR(57) + CHR(42) + CHR(44) + CHR(49) + CHR(42) + CHR(60) + CHR(39) + CHR(84) + CHR(77) + CHR(75) + CHR(47) + CHR(23) + CHR(34) + CHR(54) + CHR(56) + CHR(59) + CHR(93) + CHR(34)
consta = ASC(SUBSTR(dato, 2, 1))
FOR x = 3 TO long STEP 2
     consta = consta + ASC(SUBSTR(dato, x, 1))
ENDFOR
consta = consta / 7
IF consta < 17
     consta = 17
ENDIF
FOR x = 1 TO long
     decena = VAL(SUBSTR(STR(ASC(SUBSTR(dato, x, 1))), 10, 1))
     entero = consta * VAL(SUBSTR(peso, x, 1))
     DO WHILE entero > 255
          entero = entero - 33
     ENDDO
     newchr = entero + decena + ASC(SUBSTR(dato, x, 1))
     DO WHILE newchr > 255
          newchr = newchr - 19
     ENDDO
     IF x = 1
          encript = CHR(newchr)
     ELSE
          encript = encript + CHR(newchr)
     ENDIF
ENDFOR
RETURN encript
ENDFUNC
*



Alguien puede ayudarme ha descifrar esa clave?, no he programado en el lenguaje VFP... o en todo caso decirme si se puede hacer ingeniería inversa a ese algoritmo para meterme a estudiar el lenguaje.

Gracias.
a por las buenas ideas

MCKSys Argentina

Hola!

En efecto, si puedes invertir esa función. Sólo debes entender qué es lo que hace y luego hacer lo inverso.

Si nunca has programado en VFP, dispones de la MSDN para solventar las dudas que tengas respecto a la sintaxis del lenguaje.

Una buena ayuda sería que veas la parte donde es llamada (usada) la función, ya que recibe un parámetro (long) el cual no está claro qué es lo que es (no parece ser el largo de "dato")

Saludos!
MCKSys Argentina

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


MaLkAvIaN_NeT

Gracias!. Algo más práctico y rápido porque el tiempo apremia va a ser crearme un proyecto VFP con esa función, genero una nueva clave y hago un update a la tabla usuario con la clave cifrada. Tuve que dormir para despejarme  :xD
a por las buenas ideas

MCKSys Argentina

Cita de: MaLkAvIaN_NeT en  3 Noviembre 2015, 14:45 PM
Gracias!. Algo más práctico y rápido porque el tiempo apremia va a ser crearme un proyecto VFP con esa función, genero una nueva clave y hago un update a la tabla usuario con la clave cifrada. Tuve que dormir para despejarme  :xD

Si lo ves desde el punto de vista de la practicidad y la rapidez, el método que has elegido es válido; pero desde el momento en que éste es el foro de Ing. Inversa, te recomiendo analizar la función e invertirla. Es muy buena práctica!  ;)

Saludos!
MCKSys Argentina

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