BUUCTF——xor
第一步查壳使用工具exeinfope进行检查。结果显示该程序无壳且为64 位 macOS可执行文件。第二步IDA 分析查看main函数逻辑如下接收用户输入的 flag存入数组_b。判断输入长度是否为 33。对_b数组进行加密从第二个字符开始每个字符与前一个字符进行异或操作结果覆盖当前字符。加密后与全局变量global比较使用strncmp(__b, global, 0x21uLL)。若相等则输出成功说明global存储的是密文解密后即为 flag。查看global的值追踪到数据段查看原始十六进制数据。取值方法可以直接使用 IDA 菜单栏的 Edit → Export data快捷键 ShiftE也可以借助插件这里推荐使用 LazyIDA 插件。关于该插件的安装与使用教程可参考这篇大佬的文章跳转[0x66,0x0A,0x6B,0x0C,0x77,0x26,0x4F,0x2E,0x40,0x11,0x78,0x0D,0x5A,0x3B,0x55,0x11,0x70,0x19,0x46,0x1F,0x76,0x22,0x4D,0x23,0x44,0x0E,0x67,0x06,0x68,0x0F,0x47,0x32,0x4F]第三步解密代码由于加密过程是en[i] flag[i] ^ flag[i-1]i ≥ 1且ec[0] flag[0]首字符不变。解密时只需反向异或flag[i] enc[i] ^ flag[i-1]已知flag[0] en[0]。flagfen[0x66,0x0A,0x6B,0x0C,0x77,0x26,0x4F,0x2E,0x40,0x11,0x78,0x0D,0x5A,0x3B,0x55,0x11,0x70,0x19,0x46,0x1F,0x76,0x22,0x4D,0x23,0x44,0x0E,0x67,0x06,0x68,0x0F,0x47,0x32,0x4F]foriinrange(1,len(en)):flagchr(en[i]^en[i-1])print(flag)flagflag{QianQiuWanDai_YiTongJiangHu}宇宙级免责声明重要声明本文内容仅限在合法授权下用于安全研究与教育目的合法授权本文所涉及的技术方法仅适用于已获得明确书面授权的目标系统或用户自行搭建的合法靶场环境。未经授权的渗透测试、漏洞扫描或暴力破解等行为均涉嫌违法可能引发包括但不限于刑事追责、民事诉讼及高额赔偿等法律后果。道德约束黑客精神的核心在于建设而非破坏。请确保你的行为符合专业道德规范仅用于提升系统安全性严禁任何形式的恶意入侵、数据窃取或服务干扰。风险自担使用本文所述工具与技术时你需自行承担全部操作风险。作者及发布平台不对任何滥用、误用或由此衍生的法律责任负责。合规性请确保你的测试行为严格遵守所在国家及国际相关法律法规如《计算机欺诈与滥用法案》《通用数据保护条例》等。必要时应事先咨询专业法律人士。最小影响原则测试过程中应避免对目标系统造成破坏或服务中断。强烈建议在非生产环境或沙箱环境中完成所有演练操作。数据保护不得擅自访问、存储或泄露任何未经授权的用户数据。如意外获取敏感信息应立即向相关方报告并及时删除。免责范围作者、平台及关联方明确声明对于任何因读者行为而导致的直接、间接、附带或惩罚性损害均不承担法律责任。