Hola a todos me gustaría que me orientarais un poco sobre un tema que quiero resolver. necesito dar con un int64 generado a partir de la cadena de texto del nombre de unos archivos.
Tengo los valores de ese int64 de muchos y sus respectivos nombres, pero no se si existe alguna técnica para intentar descifrar esto.
Me podéis orientar en alguna técnica existente para hacerlo?
Un int64? Me suena a hash.
Si el tamaño de la salida es constante, es muy probable que se trate de un algoritmo de hash, aunque extraño, no conozco ningun hash con output de 64 bits asi que debe de ser casi seguro uno hecho a medida.
Tenés el generador? Podés poner un par de ejemplos?
En efecto por lo que me dijeron creo que se trata de un hash, te dejo un par de ejemplos
en primer lugar te dejo el número en hexadecimal(imagino que es bigendian porque los datos del archivo vienen en bignedian):
B382A7808D638254 data/sceneassets/pitch/pitchmowpattern_9_textures.rx3
-----------------------------------------------------------------------
430D721BDB198BDA
data/sceneassets/pitch/pitchcolor_1_textures.rx3
Efectivamente es un hash, no tenés acceso al generador? Porque se podría probar algo de ingenieria inversa.
Pues al generador no tengo acceso, tengo el archivo que contiene los hash de todos los archivos.
Se que un grupo de persona cree haberlo descifrado y me pasaron una función que después de traducirla a c# no me da el resultado del hash pero te la puedo pasar a ver si te sirve de algo.
Sin acceso al generador hay alguna forma de descifrarlo?
Poned la función que te dieron, NO LA QUE HICISTE EN C#!
La función es esta, aunque según me dijeron aquí puede que no sea verdadera:
function calc_hash(string) {
hash = 0
string = ReverseString(string)
n = 1
for (i = 1; i < length(string); i++) {
hash = hash + Ord(string[i]) * n
n = n * 33
}
hash = hash + n*5381
return hash
}
Yo ya la estuve viendo.
#include <iostream>
#include <string.h>
using namespace std;
int64_t calc_hash(char *szString);
void ReverseString(char *szString);
int main()
{
char szTestString[1000000];
memset(szTestString, 'a', 100000);
cout << calc_hash(szTestString);
return 0;
}
int64_t calc_hash(char *szString)
{
int64_t hash = 0;
ReverseString(szString);
unsigned long n = 1;
long i = 1;
for (i = 0; i < strlen(szString); i++)
{
hash = hash + szString[i] * n;
n = n * 33;
}
hash = hash + n*5381;
return hash;
}
void ReverseString(char *szString)
{
char *szOutString = new char[strlen(szString)];
for(unsigned long i = 0 ; i < strlen(szString); i++)
{
szOutString[strlen(szString) - i - 1] = szString[i];
if(i%10000 == 0) cout << i << endl;
}
szOutString[strlen(szString)] = 0;
strcpy(szString, szOutString);
delete szOutString;
}
Ese es un equivalente en C++.
Igual, hay muchas cosas que lo descalifican como hash.
Overflowea facilmente con un input lo suficientemente grande y el tamaño de la salida es proporcional al tamaño de la entrada, aparte de que no da los mismos hashes.
Hola, parece que alguien ha dado con el hash y en este programa si leeis entre sus características reconstruye los hashes, no si son exáctamente los que busco pero lo más probable es que si, teniendo este programa que los genera que puedo hacer ahora?
http://downloads.moddingway.com/file/5525.html
El programa no te sirve??
Ya que estás, pasate por la encuesta del taller de criptografía:
https://foro.elhacker.net/criptografia/encuesta_creando_un_algoritmo_entre_todos-t306507.0.html (https://foro.elhacker.net/criptografia/encuesta_creando_un_algoritmo_entre_todos-t306507.0.html)
Cita de: APOKLIPTICO en 2 Octubre 2010, 17:47 PM
El programa no te sirve??
Ya que estás, pasate por la encuesta del taller de criptografía:
https://foro.elhacker.net/criptografia/encuesta_creando_un_algoritmo_entre_todos-t306507.0.html (https://foro.elhacker.net/criptografia/encuesta_creando_un_algoritmo_entre_todos-t306507.0.html)
El programa tiene utilidad, pero me gustaría simplificar la edición del fifa y incluir la función del hash en mi programa para importar y exportar texturas facilitando la edición del juego a todo aquel que quiera editarlo.
Cómo puedo sacar el hash de ese programa?
Ingeniería inversa, pidiendo el código al autor?