ericazhe 发表于 2016-4-18 20:29

吾爱破解·2016·安全挑战赛 第六题

Name:460
Serial:ZLIRqJpxgGYAqRIRqRm9rJjbkUZRqADAZf6ImUZIHo2xHU4RHU2CHo2RHo2CHo2RHU4xHU4RHo2CHo2RHU4xHU2RHU4CHo2RHU2CHo2RHU2CHo2RHo2CHU4RHo2CHo2RHU4xHU2RHU4xHo2RqU/ZqJZI6dHarUj/qJj8mfjLufkhrfvIHpIRqJp1XlxLqRIRqR6Brf6Brf6Brf6Brf6BrfZEmfxaqPPn

Name:560
Serial:ZLIRqJpxgGYAqRIRqRW9rJjbkUZRqADAZf6ImUZIHo2xHU4RHU2CHo2RHo2CHo2RHU4xHU4RHo2CHo2RHU4xHU2RHU4CHo2RHU2CHo2RHU2CHo2RHo2CHU4RHo2CHo2RHU4xHU2RHU4xHo2RqU/ZqJZI6dHarUj/qJj8mfjLufkhrfvIHpIRqJp1XlxLqRIRqR6Brf6Brf6Brf6Brf6Brf6EmfxaqPPn

加密算法
void Encode(unsigned char* lpBuffer,unsigned int size,char* lpOut)
{
    unsigned int t = 0;
    unsigned char* lpT = (unsigned char*)(&t);
    char szKey[] = "V3FKpjJyw6XgsZeSQkGl7vofHWMqimurD5A+PIURcxCb1TOzE9d8L4B0Y2ntN/ah";
    int i = 0, j = 0;
    for (int i = 0; i < size; i = i+3)
    {
      lpT = (lpBuffer ^ 0x4C) >> 2;
      lpT = (((lpBuffer ^ 0x4C) & 3) << 4) + ((lpBuffer ^ 0x43) >> 4);
      lpT = (((lpBuffer ^ 0x43) & 0xF) << 2) + (((lpBuffer ^ 0x47) - ((lpBuffer ^ 0x47) & 0x3F)) >> 6);
      lpT = ((lpBuffer ^ 0x47) & 0x3F);
      lpOut = szKey];
      lpOut = szKey];
      lpOut = szKey];
      lpOut = szKey];
      j = j + 4;
    }
}

效验过程如下:
由360提供的 ZLIRqJpxgGYAqRIRqR39rJjbkUZRqADAZf6ImUZIHo2xHU4RHU2CHo2RHo2CHo2RHU4xHU4RHo2CHo2RHU4xHU2RHU4CHo2RHU2CHo2RHU2CHo2RHo2CHU4RHo2CHo2RHU4xHU2RHU4xHo2RqU/ZqJZI6dHarUj/qJj8mfjLufkhrfvIHpIRqJp1XlxLqRIRqR6Brf6Brf6Brf6Brf6Brf6amfxaqPPn 解密函数 0x004048D0 解密得到:
{
"name": "360",
"key1": "--... .---- ----- ..... ----- ....- ..--- .---- .---- ---.. ----- ....- ...-- ",
"key2": "492357816",
"key3": "11111111111111119999"
}
然后比较解密后的内容 name 是否等于 360,如果不等于返回失败;
然后根据一个算法算出字符串"360"和“11111111111111119999”的值V1和V2,在比较V1 + V2 == 2015,等于就成功,否则失败
算法过程乱序了,简单观察了下,然后算出key3

Hmily 发表于 2016-4-19 10:42

比赛已经结束啦。

Sound 发表于 2016-4-22 00:43

兄台提交的有些晚了。
页: [1]
查看完整版本: 吾爱破解·2016·安全挑战赛 第六题