GDOUCTF2023-部分re复现
目录
[GDOUCTF 2023]Check_Your_Luck
[GDOUCTF 2023]Tea
[GDOUCTF 2023]doublegame
[GDOUCTF 2023]Check_Your_Luck
打开题目是一串代码,明显的z3约束器求解
直接上脚本
import z3
from z3 import Reals = z3.Solver()
v=Real('v')
x=Real('x')
y=Real('y')
w=Real('w')
z=Real('z')s.add(v * 23 + w * -32 + x * 98 + y * 55 + z * 90 == 333322)
s.add(v * 123 + w * -322 + x * 68 + y * 67 + z * 32 == 707724)
s.add(v * 266 + w * -34 + x * 43 + y * 8 + z * 32 == 1272529)
s.add(v * 343 + w * -352 + x * 58 + y * 65 + z * 5 == 1672457)
s.add(v * 231 + w * -321 + x * 938 + y * 555 + z * 970 == 3372367)
r = s.check()
print(r)
if repr(r) == 'sat':result = s.model()print(result)
else:print('无解')
flag:NSSCTF{4544_123_677_1754_777}
[GDOUCTF 2023]Tea
打开题目,查壳,无壳,分析代码
function2是加密过程,进入查看
可以发现是被魔改的xtea算法,算法进行了33轮,每次sum值不同,且i加密多异或了一个sum ,从function3中可以拿到加密后的数据。sub_140011339函数可以拿到key值
别忘了最后的输出还有一个小操作
写脚本解密
#include <stdio.h>
int main()
{
int v3; // [rsp+44h] [rbp+24h]
int i; // [rsp+64h] [rbp+44h]
unsigned int v5; // [rsp+84h] [rbp+64h]
int sum; // [rsp+C4h] [rbp+A4h]
unsigned int key[4] = {2233,4455,6677,8899 };
unsigned int a[10];
a[0] = 0x1A800BDA;
a[1] = 0xF7A6219B;
a[2] = 0x491811D8;
a[3] = 0xF2013328;
a[4] = 0x156C365B;
a[5] = 0x3C6EAAD8;
a[6] = 0x84D4BF28;
a[7] = 0xF11A7EE7;
a[8] = 0x3313B252;
a[9] = 0xDD9FE279;
for (i = 8; i >=0; i--)
{
v5 = 0;
sum = 0xF462900 * i;
for (int j = 0; j < 33; j++)
sum += 0xF462900;
v3 = i + 1;
do
{
sum -= 0xF462900;
a[v3] -= (sum + key[(sum >> 11) & 3]) ^ (a[i] + ((a[i] >> 5) ^ (16 * a[i])));
a[i] -= sum ^ (a[v3] + ((a[v3] >> 5) ^ (16 * a[v3]))) ^ (sum + key[sum & 3]);
++v5;
} while (v5 <= 32);
}
for (int k = 0; k < 10; ++k)
{for (int m = 3; m >= 0; m--)printf("%c", (a[k] >> (8 * m)));
}return 0;
}
注意:数据是unsigned int 型才可以得到flag。
[GDOUCTF 2023]doublegame
看到这个题目很懵,没得头绪,幸好有工作室的好学长指点。
可以看到刚打开是一个贪吃蛇游戏,需要将分数刷到很高(具体多少忘记了这里修改过分数的程序,可以在汇编窗口右键patching-change byte-进行修改操作 再点击editor-patch program-apply patcheds to input file)就可以,修改后何以很轻易的跳过第一个游戏
另外补充一个,怎么让ida显示中文;可以在options-general-string中选择gbk
没有可以右键insert添加,这样遇到中文数据就可以选择所有的中文数据 alt+a显示中文了。
现在进入第二个游戏,第二个游戏是一个走迷宫的游戏
void __noreturn sub_140012CF0()
{__int64 *v0; // rdi__int64 i; // rcx__int64 v2; // [rsp+20h] [rbp+0h] BYREF_WORD v3[22]; // [rsp+30h] [rbp+10h] BYREFchar v4[44]; // [rsp+5Ch] [rbp+3Ch] BYREFchar v5[44]; // [rsp+88h] [rbp+68h] BYREFchar v6[22]; // [rsp+B4h] [rbp+94h] BYREFchar v7[22]; // [rsp+CAh] [rbp+AAh] BYREFchar v8[44]; // [rsp+E0h] [rbp+C0h] BYREFchar v9[44]; // [rsp+10Ch] [rbp+ECh] BYREFchar v10[44]; // [rsp+138h] [rbp+118h] BYREFchar v11[22]; // [rsp+164h] [rbp+144h] BYREFchar v12[22]; // [rsp+17Ah] [rbp+15Ah] BYREFchar v13[44]; // [rsp+190h] [rbp+170h] BYREFchar v14[44]; // [rsp+1BCh] [rbp+19Ch] BYREFchar v15[24]; // [rsp+1E8h] [rbp+1C8h] BYREFint j; // [rsp+214h] [rbp+1F4h]int v17; // [rsp+234h] [rbp+214h]int v18; // [rsp+254h] [rbp+234h]int v19; // [rsp+274h] [rbp+254h]int v20; // [rsp+294h] [rbp+274h]char v21[100]; // [rsp+2C0h] [rbp+2A0h] BYREFchar v22[100]; // [rsp+324h] [rbp+304h] BYREF_BYTE v23[828]; // [rsp+388h] [rbp+368h] BYREFchar input; // [rsp+6C4h] [rbp+6A4h]int v25; // [rsp+6E4h] [rbp+6C4h]int v26; // [rsp+704h] [rbp+6E4h]v0 = &v2;for ( i = 448i64; i; --i ){*v0 = -858993460;v0 = (v0 + 4);}sub_14001141A(&unk_1400290A6);strcpy(v3, "000000000000000000000");strcpy(&v3[11], "0 0 0 0 0 0 0");strcpy(v4, "0 0 0 00000 00000 0 0");strcpy(&v4[22], "0 0 0 0");strcpy(v5, "0 000 000 0 000 0 0 0");strcpy(&v5[22], "0 0 0 0 0 0 0 0");strcpy(v6, "0 0 0 00000 000 000 0");strcpy(v7, "0 0 0 0 0 0 ");strcpy(v8, "0 000 0 0 000 0 0 0 0");strcpy(&v8[22], "0 0 0 0 0 0 0 0 0");strcpy(v9, "0 00000 000 000 0 0 0");strcpy(&v9[22], "0 0 0 0 0");strcpy(v10, "000 0 0 0 000 0 0 0 0");strcpy(&v10[22], "0 0 0 0 0 0 * 0 0 0 0");strcpy(v11, "0 0000000 0 000 00000");strcpy(v12, "@ 0 0 0");strcpy(v13, "0 0 0 0 0 00000000000");strcpy(&v13[22], "0 0 0 0 0");strcpy(v14, "000 0 00000 0 000 000");strcpy(&v14[22], "0 0 0 0 0");strcpy(v15, "000000000000000000000");v12[4] = '0'; // 【12】【4】这里被墙堵住strcpy(v21, "Please to save the cat!");memset(&v21[24], 0, 0x4Cui64);strcpy(v22, "the score is saving cat's key!\n");memset(&v22[32], 0, 0x44ui64);qmemcpy(v23,"oh,the door open!\n恭喜你完成了第一个任务!请从头用最快的方式把猫带出去\n",0x47ui64);memset(&v23[71], 0, 729);printf("path\n");v25 = 0;v26 = 0;v17 = 15;v18 = 0;v19 = 7;v20 = 20;for ( j = 0; j <= 20; ++j )puts(&v3[11 * j]);printf("Please to save the cat!\n"); // 先救猫猫再逃出迷宫while ( v17 != v19 || v18 != v20 ) // 要先到达猫猫的位置{input = getchar();switch ( input ) // 要从【15】【0】到【7】【20】{case 's': // 下if ( *(&v3[11 * v17 + 11] + v18) != '0' ){*(&v3[11 * v17++] + v18) = 32;*(&v3[11 * v17] + v18) = 64;}break;case 'w': // 上if ( *(&v3[11 * v17 - 11] + v18) != '0' ){*(&v3[11 * v17--] + v18) = 32;*(&v3[11 * v17] + v18) = 64;}break;case 'a': // 左if ( *(&v3[11 * v17 - 1] + v18 + 1) != '0' ){if ( *(&v3[11 * v17 - 1] + v18 + 1) == '*' )v7[20] = 48;*(&v3[11 * v17] + v18--) = ' ';*(&v3[11 * v17] + v18) = '@';}break;default:if ( input == 'd' && *(&v3[11 * v17] + v18 + 1) != '0' )// 右{*(&v3[11 * v17] + v18++) = ' ';*(&v3[11 * v17] + v18) = '@';}break;}system("cls");for ( j = 0; j <= 20; ++j )puts(&v3[11 * j]); // 输出路径puts(&v21[100 * v25]);if ( v7[20] == '0' ) // 救到猫后增加一个墙{v26 = sub_140011433(0i64);if ( v26 == 13376013 ) // 得到key等于13376013{v25 = 1;v7[20] = ' '; // 输入正确的Key墙消失*(&v3[11 * v17] + v18) = ' ';v17 = 15; // 回到原点v18 = 0;v12[0] = '@';++v25;}else{printf("error");}}}system("cls");Sleep(0x1F4u);Sleep(0xBB8u);function();exit(0);
}
迷宫先是要去救猫,救到猫时出现墙堵住路,输入正确的key,墙消失,回到原点,再逃出迷宫
可以看到最后function函数里显示flag为
The flag is HZCTF{md5(path)+score}
所以可以找到最后的路径为dddssssddwwwwddssddwwwwwwddddssaassddddwwwwddwwwwddd
再进行32位小写md5+分数即为flag
NSSCTF{811173b05afff098b4e0757962127eac13371337}
相关文章:

GDOUCTF2023-部分re复现
目录 [GDOUCTF 2023]Check_Your_Luck [GDOUCTF 2023]Tea [GDOUCTF 2023]doublegame [GDOUCTF 2023]Check_Your_Luck 打开题目是一串代码,明显的z3约束器求解 直接上脚本 import z3 from z3 import Reals z3.Solver() vReal(v) xReal(x) yReal(y) wReal(w) zRea…...

Java学习17(IO模型详解)
1、何为IO? I/O(Input/Outpu) 即输入/输出 。 从计算机结构的角度来解读一下 I/O。 根据冯.诺依曼结构,计算机结构分为 5 大部分:运算器、控制器、存储器、输入设备、输出设备。 输入设备(比如键盘&am…...

Vue-全局过滤器以及进阶操作
前言 上篇文件讲述了,Vue全局过滤器的基本使用:Vue过滤器的基本使用 本篇将延续上文,讲述vue中过滤器的进阶操作 过滤器传参 如果有一天,多个地方使用过滤器,而且需要传递参数,那么可以这么写 多个过滤…...

财报解读:涅槃重生之后,新东方还想再造一个“文旅甄选”?
新东方逐渐走出了“微笑曲线”。 图源:新东方2023财年Q3财报 2023年4月19日,新东方披露了2023财年Q3财报(截至2023年2月28日止),营收7.5亿美元,同比增长22.8%;归母净利润为8165万美元ÿ…...
华为OD机试 - 过滤组合字符串(Python)
题目描述 每个数字关联多个字母,关联关系如下: 0 关联 “a”,”b”,”c” 1 关联 “d”,”e”,”f” 2 关联 “g”,”h”,”i” 3 关联 “j”,”k”,”l” 4 关联 “m”,”n”,”o” 5 关联 “p”,”q”,”r” 6 关联 “s”,”t” 7 关联 “u”,”v” 8 关联 “w”,”x” 9 …...

maven简单使用
实验课的作业用一大堆框架/库,统统要用maven管理。 头一次用,真痛苦。 所幸得以解决,maven真香~ 一步一步来。 1. maven 不是java人,只能说说粗浅的理解了。 简单来说,maven是一个管理项目的工具&…...

HTML学习笔记一
目录 HTML学习笔记 一、HTML标签 1、HTML语法规范 1.1标签的语法概述 1.2标签关系 2、HTML基本结构标签 2.1第一个HTML 2.2基本结构标签总结 3、开发工具 4、HTML常用标签 4.1标签的语义 4.2标题标签 4.3段落和换行标签 4.4文本格式化标签 4.5div和span标签 4.…...

人工智能十大流行算法,通俗易懂讲明白
人工智能是什么?很多人都知道,但大多又都说不清楚。 事实上,人工智能已经存在于我们生活中很久了。 比如我们常常用到的邮箱,其中垃圾邮件过滤就是依靠人工智能;比如每个智能手机都配备的指纹识别或人脸识别&#x…...

支持中英双语和多种插件的开源对话语言模型,160亿参数
一、开源项目简介 MOSS是一个支持中英双语和多种插件的开源对话语言模型,moss-moon系列模型具有160亿参数,在FP16精度下可在单张A100/A800或两张3090显卡运行,在INT4/8精度下可在单张3090显卡运行。MOSS基座语言模型在约七千亿中英文以及代码…...
SQL基础培训10-复杂查询原理
知识点: 1、SQL查询语句逻辑执行顺序 下面是一个查询语句的逻辑执行顺序(每段语句都标明了执行顺序号): 执行1:FROM 执行2:...

如何搭建信息存储中心?资源共享方案之搭建ftp个人服务器
serveru是一款由Rob Beckers开发的ftp服务器软件,全称为:serv-u ftp server,它功能强大又易于使用。ftp服务器用户通过ftp协议能在internet上共享文件。FTP协议是专门针对在两个系统之间传输大的文件开发出来的,它是TCP/IP协议的一…...

【LeetCode】188. 买卖股票的最佳时机 IV
188. 买卖股票的最佳时机 IV(困难) 思路 状态定义 一、首先确定要一天会有几种状态,不难想到有四种: a.当天买入了股票;b.当天卖出了股票;c.当天没有操作,但是之前是买入股票的状态ÿ…...

android studio RadioButton单选按钮
1.定义 <!--单选按钮--> <TextViewandroid:layout_marginTop"10dp"android:layout_width"match_parent"android:layout_height"wrap_content"android:text"请选择你的性别:"> </TextView> <RadioGrou…...
AI大模型快速发展,我们该如何应对?
文章目录 提问问题范例Prompt 公式 如何准确提问 随着人工智能技术的不断发展,聊天型大语言模型工具如 ChatGPT 在解决各种实际问题时具有越来越广泛的应用。这一技术的快速发展,不仅带来了更高的工作效率和更高的精度,同时也改变了人类的工作…...

java多线程BlockingDeque的三种线程安全正确退出方法
本文介绍两种BlockingDeque在多线程任务处理时正确结束的方法 一般最开始简单的多线程处理任务过程 把总任务放入BlockingDeque创建多个线程,每个线程内逻辑时,判断BlockingDeque任务是否处理完,处理完退出,还有任务就BlockingDe…...

从STM32F407到AT32F407(一)
雅特力公司的MCU有着性能超群,价格优越的巨大优势,缺点是相关资料少一些,我们可以充分利用ST的现有资源来开发它。 我用雅特力的STM32F437开发板,使用原子 stm32f407的开发板自带程序,测试串口程序,原设定…...

【数据结构】顺序表和链表基本实现(含全代码)
文章目录 一、什么是线性表1. 什么是顺序表动态开辟空间和数组的问题解释LeetCode-exercise 2. 什么是链表2.1链表的分类2.2常用的链表结构及区别2.3无头单向非循环链表的实现2.4带头双向循环链表的实现2.5循序表和链表的区别LeetCode-exercise 3. 快慢指针LeetCode-exercise 一…...

CMake : Linux 搭建开发 - g++、gdb
目录 1、环境搭建 1.1 编译器 GCC,调试器 GDB 1.2 CMake 2、G 编译 2.1 编译过程 编译预处理 *.i 编译 *.s 汇编 *.o 链接 bin 2.2 G 参数 -g -O[n] -l、-L -I -Wall、-w -o -D -fpic 3、GDB 调试器 3.1 调试命令参数 4、CMake 4.1 含义 4.2…...

大数据实战 --- 美团外卖平台数据分析
目录 开发环境 数据描述 功能需求 数据准备 数据分析 RDD操作 Spark SQL操作 创建Hbase数据表 创建外部表 统计查询 开发环境 HadoopHiveSparkHBase 启动Hadoop:start-all.sh 启动zookeeper:zkServer.sh start 启动Hive: nohup …...

三大本土化战略支点,大陆集团扩大中国市场生态合作「朋友圈」
“在中国,大陆集团已经走过30余年的发展与耕耘历程,并在过去10年间投资了超过30亿欧元。中国市场也成为了我们重要的‘增长引擎’与‘定海神针’。未来,我们将继续深耕中国这个技术导向的市场。”4月19日上海车展上,大陆集团首席执…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...