首页
社区
课程
招聘
[原创]第一阶段第三题
2010-10-23 22:13 4912

[原创]第一阶段第三题

2010-10-23 22:13
4912
收藏
点赞0
打赏
分享
最新回复 (2)
雪    币: 262
活跃值: (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
magicboy 2010-10-23 22:22
2
0
简单分析下
主要是满足如下公式即可

memcmp(Hash(name), EnCrypt(key))== 0

Hash可以直接扣代码,这个不用管

逆向EnCrypt函数代码为:
void EnCode(char* szkey)
{
        int   nlen           = strlen(szkey);
        int   nTemp          = 0;
        int   nCount         = 0;
        BYTE  bTableValue    = 0;
        char  szReturn[0x20] = {0};

        for (int i=0; i<nlen; i++)
        {
                bTableValue = Table[szkey[i]];

                if (nTemp<=3)
                {
                        nTemp = (nTemp - 3) & 7;
                        if (nTemp == 0)
                        {
                                szReturn[nCount] |= bTableValue;
                                nCount++;
                                continue;
                        }
                }
                else
                {
                        nTemp = (nTemp - 3) & 7;               
                        szReturn[nCount] |= bTableValue>>nTemp;
                        nCount++;
                }
                szReturn[nCount] |= bTableValue <<(8 -nTemp);
        }
}

咋一看还真不知道怎么写解密算法,其实仔细观察可以发现加密是5个为一循环,
我们只要对Hash后的值进行分组解密就可以了
雪    币: 3686
活跃值: (1036)
能力值: (RANK:760 )
在线值:
发帖
回帖
粉丝
cnbragon 18 2010-10-27 10:19
3
0
经过评委会审定,你本题的得分是:100分
游客
登录 | 注册 方可回帖
返回