BUUCTF【36.密码学的心声】WriteUp
一、题目基础信息平台BUUCTF题型Crypto密码学题目背景二战间谍小故事附件为一张简谱图片需要从乐谱提取线索解密按flag{明文格式}提交答案二、题目线索分析阅读题目配图里的简谱配套歌词能拿到两处关键解谜提示1. 文案这里面没有八八进制合法数字范围是0~7不会出现数字8直接判定数字的进制为八进制2. 文案请转成埃塞克码为谐音梗指代ASCII编码解密最终要把进制换算后的十进制数字映射成ASCII字符3. 补充排坑提示你肯定以为是十进制其实简单的啦直接排除十进制解码思路避免方向出错。三、数据提取按照乐谱从上至下、每行从左往右的阅读顺序依次提取每小节内的3位数字整理得到八进制字符串数组[111,114,157,166,145,123,145,143,165,162,151,164,171,126,145,162,171,115,165,143,150]四、编写Python解密脚本脚本代码python存放从简谱提取的全部八进制字符串oct_num_list [111,114,157,166,145,123,145,143,165,162,151,164,171,126,145,162,171,115,165,143,150]plaintext for oct_str in oct_num_list:参数8把字符串按八进制规则转为十进制整数decimal_num int(oct_str, 8)十进制ASCII编码值转为对应字符plaintext chr(decimal_num)按题目要求封装flag格式flag fflag{{{plaintext}}}print(解密明文, plaintext)print(最终Flag, flag)代码逻辑讲解1. int(字符串,8)Python内置方法完成八进制字符串→十进制整数的进制转换2. chr(数字)依据ASCII编码表把十进制数字转化成可读的文本字符3. 遍历拼接所有字符后按平台规范套上flag{}格式完成封装。五、运行结果脚本控制台输出内容解密明文 ILoveSecurityVeryMuch最终Flag flag{ILoveSecurityVeryMuch}将flag{ILoveSecurityVeryMuch}提交靶机即可通过本题校验。六、知识点复盘经验总结涉及知识点1. 进制常识八进制数字取值区间07是本题判断进制的核心依据2. ASCII编码计算机最通用的字符映射标准可借助十进制编号查询对应字母、符号3. CTF线索破译学会抓取谐音梗、文字暗示类谜题提示锁定正确解密方向。做题心得1. CTF文字类密码题不要盲目乱试各类加密算法优先通读题干、配图的文案信息文字一般会暗藏解题方向能大幅减少无效试错2. 批量进制换算优先写Python脚本自动化处理相比手动查表换算既能规避人工抄写计算失误也能提升解题效率。七、拓展小坑提醒新手常见失误直接以十进制数字调用chr()解码会输出一堆乱码本题歌词专门做了提示排雷只要读懂文字线索就可以避开这个典型误区。