一、题目概述
crypto-classic0题目给出了一个压缩包,其中包含cipher文件、hint.txt文件和howtoencrypt.zip加密压缩包。cipher文件包含一串看似随机的字符,hint.txt则提供了密码可能与小Z童鞋的生日有关的线索。howtoencrypt.zip是一个加密的压缩包,需要密码才能打开。
二、解题过程
1.密码爆破
根据hint.txt的提示,我们猜测压缩包的密码可能是小Z童鞋的生日。由于生日一般为8位数字,我们可以使用压缩包爆破工具来尝试可能的密码组合。经过尝试,我们成功爆破出密码为“19990306”,从而打开了howtoencrypt.zip压缩包。
2.分析加密代码
在howtoencrypt.zip中,我们找到了classic0.c文件。该文件是一个C语言程序,其中包含了一个加密过程。通过分析代码,我们可以了解到加密的具体过程:
#include<stdio.h>
char flag[25] = *** //定义一个长度为25的字符数组flag,用于存储加密前的明文。
int main()// 在main函数中,对flag数组中的每个字符进行两次操作:首先减去3,然后与0x7进行异或运算。
{
int i;
for(i=0;i<25;i++)
{
flag[i] -= 3;
flag[i] ^= 0x7;
printf("%c",flag[i]);
}
return 0;
}
3. 解密过程
为了还原加密前的明文,我们需要编写一个与加密过程相反的解密程序。首先定义一个与cipher文件中内容相同的字符数组cipher,然后对cipher数组中的每个字符进行与加密过程相反的操作:首先与0x7进行异或运算,然后加上3。
按照上述步骤编写解密程序后,我们成功还原了加密前的明文,得到了flag的值:flag{my_naive_encrytion}。