首页
社区
课程
招聘
[旧帖] [求助]帮我翻译一下代码吧 0.00雪花
发表于: 2007-7-17 17:24 5126

[旧帖] [求助]帮我翻译一下代码吧 0.00雪花

2007-7-17 17:24
5126
unsigned long string_id(const char *str)
{
        int i;
        unsigned int v;
        static unsigned m[70];                                 //m[70]为静态无符号整型,所以占用280个字节
        strncpy((char *)m,str,256);                            //复制str中最多256个字符到m[70]中
        for (i=0;i<256/4 && m[i];i++);                         //此处为什么加分号,循环条件:“i<64”与“m[i]!=0”
        m[i++]=0x9BE74448,m[i++]=0x66F42C48;
        v=0xF4FA8928;

        __asm                                                  //感觉这个函数像CRC
        {
                mov esi,0x37A8470E                                           //x0=0x37A8470E
                mov edi,0x7758B42B                                           //y0=0x7758B42B
                xor ecx,ecx                                        //用到了循环,所以清空ecx寄存器
_loop:
                mov ebx,0x267B0B11                                           //w=0x267B0B11
                rol v,1                                            //循环左移1位,并把最高位放入CF
                lea eax,m                                          //取地址
                xor ebx,v                                          //w^v

                mov eax,[eax+ecx*4]                                //m[j]
                mov edx,ebx                                        //w^v
                xor esi,eax                                        //m[j]^x0
                xor edi,eax                                        //m[j]^y0

                add edx,edi                                        //(w^v)+(m[j]^y0)
                or edx,0x2040801                                           //a=0x02040801,((w^v)+(m[j]^y0))|a
                and edx,0xBFEF7FDF                                           //c=0xBFEF7FDF,(((w^v)+(m[j]^y0))|a)&c

                mov eax,esi                                        //m[j]^x0
                mul edx                                            //((((w^v)+(m[j]^y0))|a)&c)*(m[j]^x0)
                adc eax,edx                                        //
                mov edx,ebx                                        //w^v
                adc eax,0                                          //

                add edx,esi                                        //(w^v)+(m[j]^x0)
                or edx,0x804021                                                   //b=0x00804021,((w^v)+(m[j]^x0))|b
                and edx,0x7DFEFBFF                                           //d=0x7DFEFBFF,(((w^v)+(m[j]^x0))|b)&d

                mov esi,eax                                        //
                mov eax,edi                                        //m[j]^y0
                mul edx                                            //((((w^v)+(m[j]^x0))|b)&d)*(m[j]^y0)

                add edx,edx
                adc eax,edx
                jnc _skip                                          //CF=0则跳到_skip
                add eax,2
_skip:
                inc ecx;                                           //ecx++
                mov edi,eax
                cmp ecx,i                                          //如果ecx<i,那么ZF!=0就继续循环
                jnz _loop                                          //ZF!=0则跳到_loop

                xor esi,edi
                mov v,esi                                          //此v即FILE_LST结构中的uid
        }

        return v;
}

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 208
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
晕,你这不是都翻译了嘛
2007-7-17 17:55
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
请把没翻译的地方,全部翻译出来。
2007-7-17 18:00
0
游客
登录 | 注册 方可回帖
返回
//