通过反转简单的“散列”函数查找原像

问题描述

我正在对一个程序进行逆向工程,该程序做了一堆无意义的事情,我设法想出了这个:

#define INITIALISATION_SIZE 0x12800

unsigned int compute_hash(char *str,unsigned char initialisation[],unsigned int lookuptable[256]) {
    int len = strlen(str);

    unsigned int digest = 0;    
    int i = 0;
    do
    {
        unsigned char index = initialisation[i] ^ str[i % len];
        digest = lookuptable[(unsigned char)digest ^ index] ^ (digest >> 8);
        ++i;
    }
    while ( i < INITIALISATION_SIZE );
    
    return digest;
}

我试图找到一个字符串,当传递给这个函数时,将返回值 0x331252C3。

有没有比简单地暴力破解更快的方法? (这是我目前正在做的,还没有发现碰撞)

初始化数组和“查找表”是静态的,不会改变。

“查找表”原始字节:https://pastebin.com/raw/5RBx5FRU

初始化原始字节:https://pastebin.com/raw/HMiTg0XG

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)