微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

#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 举报,一经查实,本站将立刻删除。