当前位置: 首页 > news >正文

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 打开题目是一串代码&#xff0c;明显的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&#xff08;Input/Outpu&#xff09; 即输入&#xff0f;输出 。 从计算机结构的角度来解读一下 I/O。 根据冯.诺依曼结构&#xff0c;计算机结构分为 5 大部分&#xff1a;运算器、控制器、存储器、输入设备、输出设备。 输入设备&#xff08;比如键盘&am…...

Vue-全局过滤器以及进阶操作

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

财报解读:涅槃重生之后,新东方还想再造一个“文旅甄选”?

新东方逐渐走出了“微笑曲线”。 图源&#xff1a;新东方2023财年Q3财报 2023年4月19日&#xff0c;新东方披露了2023财年Q3财报&#xff08;截至2023年2月28日止&#xff09;&#xff0c;营收7.5亿美元&#xff0c;同比增长22.8%&#xff1b;归母净利润为8165万美元&#xff…...

华为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简单使用

实验课的作业用一大堆框架/库&#xff0c;统统要用maven管理。 头一次用&#xff0c;真痛苦。 所幸得以解决&#xff0c;maven真香&#xff5e; 一步一步来。 1. maven 不是java人&#xff0c;只能说说粗浅的理解了。 简单来说&#xff0c;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.…...

人工智能十大流行算法,通俗易懂讲明白

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

支持中英双语和多种插件的开源对话语言模型,160亿参数

一、开源项目简介 MOSS是一个支持中英双语和多种插件的开源对话语言模型&#xff0c;moss-moon系列模型具有160亿参数&#xff0c;在FP16精度下可在单张A100/A800或两张3090显卡运行&#xff0c;在INT4/8精度下可在单张3090显卡运行。MOSS基座语言模型在约七千亿中英文以及代码…...

SQL基础培训10-复杂查询原理

知识点: 1、SQL查询语句逻辑执行顺序 下面是一个查询语句的逻辑执行顺序(每段语句都标明了执行顺序号): 执行1:FROM 执行2:...

如何搭建信息存储中心?资源共享方案之搭建ftp个人服务器

serveru是一款由Rob Beckers开发的ftp服务器软件&#xff0c;全称为&#xff1a;serv-u ftp server&#xff0c;它功能强大又易于使用。ftp服务器用户通过ftp协议能在internet上共享文件。FTP协议是专门针对在两个系统之间传输大的文件开发出来的&#xff0c;它是TCP/IP协议的一…...

【LeetCode】188. 买卖股票的最佳时机 IV

188. 买卖股票的最佳时机 IV&#xff08;困难&#xff09; 思路 状态定义 一、首先确定要一天会有几种状态&#xff0c;不难想到有四种&#xff1a; a.当天买入了股票&#xff1b;b.当天卖出了股票&#xff1b;c.当天没有操作&#xff0c;但是之前是买入股票的状态&#xff…...

android studio RadioButton单选按钮

1.定义 <!--单选按钮--> <TextViewandroid:layout_marginTop"10dp"android:layout_width"match_parent"android:layout_height"wrap_content"android:text"请选择你的性别&#xff1a;"> </TextView> <RadioGrou…...

AI大模型快速发展,我们该如何应对?

文章目录 提问问题范例Prompt 公式 如何准确提问 随着人工智能技术的不断发展&#xff0c;聊天型大语言模型工具如 ChatGPT 在解决各种实际问题时具有越来越广泛的应用。这一技术的快速发展&#xff0c;不仅带来了更高的工作效率和更高的精度&#xff0c;同时也改变了人类的工作…...

java多线程BlockingDeque的三种线程安全正确退出方法

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

从STM32F407到AT32F407(一)

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

【数据结构】顺序表和链表基本实现(含全代码)

文章目录 一、什么是线性表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&#xff0c;调试器 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&#xff1a;start-all.sh 启动zookeeper&#xff1a;zkServer.sh start 启动Hive&#xff1a; nohup …...

三大本土化战略支点,大陆集团扩大中国市场生态合作「朋友圈」

“在中国&#xff0c;大陆集团已经走过30余年的发展与耕耘历程&#xff0c;并在过去10年间投资了超过30亿欧元。中国市场也成为了我们重要的‘增长引擎’与‘定海神针’。未来&#xff0c;我们将继续深耕中国这个技术导向的市场。”4月19日上海车展上&#xff0c;大陆集团首席执…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...