BUUCTF--xor
这是一道关于异或运算xor的题拿到这道题我直接用IDA打开了没有进行查壳什么的基础题嘛应该没有打开直接找到主函数按F5反编译以下是这道题的核心内容int __fastcall main(int argc, const char **argv, const char **envp) { int i; // [rsp2Ch] [rbp-124h] char __b[264]; // [rsp40h] [rbp-110h] BYREF memset(__b, 0, 0x100u); printf(Input your flag:\n); get_line(__b, 0x100u); if ( strlen(__b) ! 33 ) goto LABEL_7; for ( i 1; i 33; i ) __b[i] ^ __b[i - 1]; if ( !strncmp(__b, global, 0x21u) ) printf(Success); else LABEL_7: printf(Failed); return 0; }其核心点就是将你输入进_b数组且长度不超过33的字符串经过异或运算的结果与程序内预定义的 global数组比较相同则成功。那这里我们就要弄懂他是怎么进行异或运算的理解异或运算XOR异或是一种逻辑运算符号是^。它的规则很简单两个位相同结果为 0不同结果为 1。例如0 ^ 0 00 ^ 1 11 ^ 0 11 ^ 1 0对于字节8个位我们可以对每个位分别进行异或。例如二进制 0110 (6) ^ 0011 (3) 0101 (5)异或有几个重要性质任何数和自己异或等于 0a ^ a 0任何数和 0 异或等于自身a ^ 0 a交换律a ^ b b ^ a结合律(a ^ b) ^ c a ^ (b ^ c)自反性如果a ^ b c那么c ^ b a且c ^ a b。这是最关键的性质也是我们解密的依据。核心在整段代码中异或运算的核心代码是__b[i] ^ __b[i - 1];它等价于__b[i] __b[i] ^ __b[i-1]。意思是把__b[i]和__b[i-1]进行异或运算结果再存回__b[i]。for ( i 1; i 33; i )而他前面的循环意思就是我输入的字符串存储在 __b 中下标从 0 开始。循环变量 i 从 1 到 32每次处理一个元素 __b[i]。实际上他一次性就执行完了那么这两个结合起来的运算流程就是__b[0]__b[1] F[1] ^ F[0]__b[2] F[2] ^ F[1] ^ F[0]__b[3] F[3] ^ F[2] ^ F[1] ^ F[0]__b[4] F[4] ^ F[3] ^ F[2] ^ F[1] ^ F[0]注意第一个数据下标0也就是__b[0]是无法执行异或运算的只有从下标1开始才会与前面一个两两相邻执行异或运算。这就是在整个异或运算的流程也就是说在正常的代码运行当中我们输入的flag会经过这样的运算得出的结果与global数组比较如果我们输入的flag正确那么程序将会输出Success如果不对则输出Failed。综上所诉我们的flag其实就是global数组只不过他是经过异或运算变成这样的了解了这些就好办多了我们要做的就是将global数组提取出来然后反向计算得到flag我们在主函数上找到global数组双击他进入数据段可以看到这并不是我们想要的数据这说明global本身并不是直接存放数据的数组而是一个指针dq表示 8 字节的地址它指向另一个地方那里才是真正的数据。这个指针指向的标号是aFKWOXZUPFVMDGH我们需要再双击aFKWOXXZUPFVMDGH或者按Enter键就能跳转到真正的数据定义处。这三行是连续的它们共同构成了完整的 33 字节数据。第一行标号aFKWOXZUPFVMDGH指向数据开头后面两行没有新标号只是接着显示剩余部分所以我们应该把这三行所有的字节按顺序合并在一起。并把它们换算成面向计算机语言的16进制接下来我们来逐行解析并列出每个字节的数值十六进制第一行db f,0Ahf 0x660Ah 0x0A第二行db k,0Ch,wO.,11h,x,0Dh,Z;U,11h,p,19h,F,1Fh,vM#D,0Eh,g仔细拆分k→ 0x6B0Ch→ 0x0C连续字符wO.→ 依次为w0x77, 0x26, O0x4F, .0x2E, 0x4011h→ 0x11x→ 0x780Dh→ 0x0D连续字符Z;U→ Z0x5A, ;0x3B, U0x5511h→ 0x11p→ 0x7019h→ 0x19F→ 0x461Fh→ 0x1F连续字符vM#D→ v0x76, 0x22, M0x4D, #0x23, D0x440Eh→ 0x0Eg→ 0x67第三行db 6,h,0Fh,G2O,06→ 0x06h→ 0x680Fh→ 0x0F连续字符G2O→ G0x47, 20x32, O0x4F最后的0是字符串结束符NULL不计入我们要取的 33 个字节。完整的合并内容如下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最终payload最后我们用编程语言写出反向计算的代码将合并内容带入进行反向计算去获取最终的flag。以下为python示例data [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] flag [data[0]] [data[i] ^ data[i-1] for i in range(1, 33)] print(.join(chr(c) for c in flag))这里定义了一个表data其实就是上面讲的数组_b。在flag那一行中因为下标0不参与计算所以就取data[0]后面就是加上参与异或计算的结果然后遍历i从1到32依次处理、计算原理与上面的C语言相同。print这一行是将flag列表中的每个整数c转换成对应的字符chr(c)然后用.join()把这些字符连接成一个完整的字符串最后打印出来。得到最终flagflag{QianQiuWanDai_YiTongJiangHu}

相关新闻

格式总出错?10个AI论文网站测评:专科生毕业论文+开题报告写作神器推荐

格式总出错?10个AI论文网站测评:专科生毕业论文+开题报告写作神器推荐

对于专科生而言,撰写毕业论文和开题报告是学习生涯中一项重要且复杂的任务。然而,格式不规范、内容缺乏逻辑性、查找资料耗时等问题常常让许多学生感到力不从心。为了帮助更多学生高效完成学术写作,我们基于2026年的最新测评数据与真实用户反…

2026/7/5 17:07:50 阅读更多 →
强烈安利 9个降AIGC平台:本科生降AI率必备测评与推荐

强烈安利 9个降AIGC平台:本科生降AI率必备测评与推荐

在当前高校学术规范日益严格的背景下,越来越多的本科生开始关注论文的AIGC率问题。随着AI写作工具的普及,许多学生在完成初稿后发现自己的论文被检测出较高的AI痕迹,这不仅影响了论文的整体质量,还可能带来查重风险。因此&#xf…

2026/5/17 9:19:08 阅读更多 →
人工智能+AI的企业申报评审管理系统vue

人工智能+AI的企业申报评审管理系统vue

目录技术选型与架构设计核心功能模块划分AI集成方案关键代码示例(Vue部分)开发与部署流程风险与应对项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作技术选型与架构设计 采用Vu…

2026/7/5 11:09:56 阅读更多 →

最新新闻

位置编码外推实战:从BERT 512到26万token的3种延拓策略

位置编码外推实战:从BERT 512到26万token的3种延拓策略

位置编码外推实战:从BERT 512到26万token的3种延拓策略当处理长文本序列时,BERT等Transformer模型面临一个根本性限制——位置编码的长度约束。传统BERT模型最多只能处理512个token,这严重制约了其在长文档理解、基因组分析等场景的应用潜力。…

2026/7/6 0:11:20 阅读更多 →
如何彻底告别重复点击:AutoClicker鼠标自动化完全指南

如何彻底告别重复点击:AutoClicker鼠标自动化完全指南

如何彻底告别重复点击:AutoClicker鼠标自动化完全指南 【免费下载链接】AutoClicker AutoClicker is a useful simple tool for automating mouse clicks. 项目地址: https://gitcode.com/gh_mirrors/au/AutoClicker 还在为每天重复的鼠标点击任务感到疲惫吗…

2026/7/6 0:11:20 阅读更多 →
DQN 算法实战:CartPole-v0 环境 1000 轮训练实现 200 分满分

DQN 算法实战:CartPole-v0 环境 1000 轮训练实现 200 分满分

DQN算法实战:从零构建CartPole智能体的完整指南1. 环境准备与基础概念在开始构建DQN智能体之前,我们需要先理解几个核心概念。CartPole-v0是OpenAI Gym中的一个经典控制问题,目标是让小车上的杆子保持直立不倒下。这个环境有四个状态变量&…

2026/7/6 0:11:20 阅读更多 →
OpenCV 4.8 双目立体匹配实战:BM/SGBM/GC 3种算法在Middlebury数据集上的精度与速度对比

OpenCV 4.8 双目立体匹配实战:BM/SGBM/GC 3种算法在Middlebury数据集上的精度与速度对比

OpenCV 4.8 双目立体匹配实战:BM/SGBM/GC算法在Middlebury数据集上的精度与速度对比双目立体视觉作为三维重建的核心技术之一,其核心挑战在于如何高效准确地计算左右图像间的视差图。OpenCV作为计算机视觉领域的瑞士军刀,提供了Block Matchin…

2026/7/6 0:07:19 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻