吾爱破解·2016·安全挑战赛 第六题
Name:460Serial: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
比赛已经结束啦。 兄台提交的有些晚了。
页:
[1]