Day 1 BUUCTF——特殊的 BASE64 1
选择BUUCTF平台,因为题目丰富、难度低,适合入门。
首先,需要注册一个账号,然后就可以答题了。
第一题 特殊的 BASE64 1
0x1 下载题目附件
0x2 用Exeinfo PE 查壳
发现未加壳。
0x3 运行一下看看程序的功能
输入任意字符后程序直接退出,推断可能是判断输入的Base64是否和某特定值相同,不相同程序就退出。
0x4 使用IDA Pro 64位版本打开该程序文件,找到main函数,使用F5快捷键反编译生成伪代码。
发现第14行的"rightFlag“:mTyqm7wjODkrNLcWl0eqO8K8gc1BPk1GNLgUpI==,像是经Base64加密后的字符串。
0x5 尝试base64解码,得到结果:
这并非可识别的flag。
0x6 重新查看main函数的行为,发现函数base64Encode对result的数据进行了加密。
进入base64Encode函数,发现自定义加密字典:
AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0987654321/+,与常规的字典不同。
0x7 使用该字典对前面的字符串解码,得到:
PS:现在有一个疑问:&result的值如何与标准输入相关联?
答案:使用x64dbg动态调试,发现在这个语句
std::operator>><char,std::char_traits,std::allocator>(refptr__ZSt3cin, &str);
执行后,result和str指向的内存相同,故Base64Decode(&result)就是将标准输入的内容作为函数的输入。
解完。