GDOUCTF2023-Reverse WP

文章目录

  • [GDOUCTF 2023]Check_Your_Luck
  • [GDOUCTF 2023]Tea
  • [GDOUCTF 2023]easy_pyc
  • [GDOUCTF 2023]doublegame
  • [GDOUCTF 2023]L!s!
  • [GDOUCTF 2023]润!

[GDOUCTF 2023]Check_Your_Luck

image-20231128094404871

根据 if 使用z3约束求解器。

EXP:

from z3 import *
# 创建整数变量
v, w, x, y, z = Ints('v w x y z')
# 创建Z3求解器
solver = Solver()
solver.add(v * 23 + w * -32 + x * 98 + y * 55 + z * 90 == 333322)
solver.add(v * 123 + w * -322 + x * 68 + y * 67 + z * 32 == 707724)
solver.add(v * 266 + w * -34 + x * 43 + y * 8 + z * 32 == 1272529)
solver.add(v * 343 + w * -352 + x * 58 + y * 65 + z * 5 == 1672457)
solver.add(v * 231 + w * -321 + x * 938 + y * 555 + z * 970 == 3372367)# 检查是否存在解
if solver.check() == sat:model = solver.model()output_str = f"flag{{{model[v]}_{model[w]}_{model[x]}_{model[y]}_{model[z]}}}"print(output_str)
else:print("方程组无解")
# flag{4544_123_677_1754_777}

[GDOUCTF 2023]Tea

image-20231128094815207

64bit的文件。IDA64打开

image-20231128095030838

根据字符串定位

image-20231128095118816

image-20231128103247829

这里的v7是错误的,后面进行了修改。

之后对v8和v7进行操作。

image-20231128103321373

一个XTEA的加密,找到密文,提取出来

image-20231128103406832

加密的逻辑大概就是,明文的第一位和第二位进行XTEA加密,之后加密后的第二位继续和第三位XTEA,依次下去,逆向一下就好。

写个EXP解密:

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>void decrypt (uint32_t* v,uint32_t* k,int wheel) {uint32_t v0=v[0], v1=v[1], i;uint32_t delta=0xF462900;uint32_t sum = delta*(33+wheel);for (i=0; i<33; i++) {sum -= delta;v1 -= (((v0 * 16) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum >> 11 ) & 3]);v0 -= (((v1 * 16) ^ (v1 >> 5)) + v1) ^ (sum + k[(sum & 3)])^sum;}v[0]=v0; v[1]=v1;
}int main()
{uint32_t enflag[] = {444599258, 4154859931, 1226314200, 4060164904, 359413339, 1013885656, 2228535080, 4045045479, 856928850, 3718242937};uint32_t key[4] = {2233,4455,6677,8899};for(int i=8;i>=0;i-=1){uint32_t temp[2];        temp[0] = enflag[i];temp[1] = enflag[i+1];int wheel = i;decrypt(temp,key,wheel);enflag[i] = temp[0];enflag[i+1] = temp[1];}for (int i = 0; i < 10; i++){for (int j = 3; j>=0; j--){printf("%c", (enflag[i] >> (j * 8)) & 0xFF);}}return 0;
}
//HZCTF{hzCtf_94_re666fingcry5641q  q}
//HZCTF{hzCtf_94_re666fingcry5641qq}

[GDOUCTF 2023]easy_pyc

pyc文件,用uncompyle6反编译

image-20231128103658740

image-20231128103839706

一个简单的rsa加密。

EXP:

d = inverse(e,(p-1)*(q-1))
n = p*q
m = pow(c,d,n)
print(long_to_bytes(m))
# flag{IfYouWantItThenYouHaveToTakeIt}

[GDOUCTF 2023]doublegame

image-20231128104028527

通过查找字符串定位到关键函数。

image-20231128104120885

函数点进去看一看,最后发现都没有什么用。回去查看一下字符串,发现一个GAME OVER。

image-20231128104800098

找到了。第一个game。如果分数大于13371337就进行第二个游戏,即score。

if下面的函数。

image-20231128104905640

一个迷宫题,用dfs解:

maze = ['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', ' ', '0', ' ', '0', ' ', '0', ' ', ' ', ' ', ' ', ' ', '0', ' ', ' ', ' ', ' ', ' ', '0', ' ', '0', '0', ' ', '0', ' ', '0', ' ', '0', '0', '0', '0', '0', ' ', '0', '0', '0', '0', '0', ' ', '0', ' ', '0', '0', ' ', '0', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '0', ' ', '0', '0', ' ', '0', '0', '0', ' ', '0', '0', '0', ' ', '0', ' ', '0', '0', '0', ' ', '0', ' ', '0', ' ', '0', '0', ' ', '0', ' ', ' ', ' ', ' ', ' ', '0', ' ', '0', ' ', '0', ' ', ' ', ' ', '0', ' ', '0', ' ', '0', '0', ' ', '0', ' ', '0', ' ', '0', '0', '0', '0', '0', ' ', '0', '0', '0', ' ', '0', '0', '0', ' ', '0', '0', ' ', '0', ' ', '0', ' ', ' ', ' ', ' ', ' ', '0', ' ', ' ', ' ', '0', ' ', '0', ' ', ' ', ' ', ' ', '0', ' ', '0', '0', '0', ' ', '0', ' ', '0', ' ', '0', '0', '0', ' ', '0', ' ', '0', ' ', '0', ' ', '0', '0', ' ', ' ', ' ', ' ', ' ', '0', ' ', '0', ' ', '0', ' ', '0', ' ', '0', ' ', '0', ' ', '0', ' ', '0', '0', ' ', '0', '0', '0', '0', '0', ' ', '0', '0', '0', ' ', '0', '0', '0', ' ', '0', ' ', '0', ' ', '0', '0', ' ', ' ', ' ', ' ', ' ', '0', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '0', ' ', ' ', ' ', '0', ' ', '0', '0', '0', '0', ' ', '0', ' ', '0', ' ', '0', ' ', '0', '0', '0', ' ', '0', ' ', '0', ' ', '0', ' ', '0', '0', ' ', '0', ' ', '0', ' ', '0', ' ', '0', ' ', '0', ' ', ' ', ' ', '0', ' ', '0', ' ', '0', ' ', '0', '0', ' ', '0', '0', '0', '0', '0', '0', '0', ' ', '0', ' ', '0', '0', '0', ' ', '0', '0', '0', '0', '0', ' ', ' ', ' ', ' ', '0', ' ', ' ', ' ', '0', ' ', '0', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '0', '0', ' ', '0', ' ', '0', ' ', '0', ' ', '0', ' ', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', ' ', '0', ' ', '0', ' ', '0', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '0', '0', '0', '0', ' ', '0', ' ', '0', '0', '0', '0', '0', ' ', '0', ' ', '0', '0', '0', ' ', '0', '0', '0', '0', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '0', ' ', '0', ' ', ' ', ' ', '0', ' ', ' ', ' ', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0']maze[21*7+20] = '2'
# maze[x * 21 + y]
def check_point_valid(map, x, y):if (x >= 0) and (x <= 20) and (y >= 0) and (y <= 20):return (map[x * 21 + y] != '0') and ((map[x * 21 + y] == ' ') or (map[x * 21 + y] == '2'))else:return Falsedef gen_nex(map, x, y):all_dir = []# if check_point_valid(map, x - 1, y, z):# all_dir.append((x - 1, y, z, 'q'))# if check_point_valid(map, x + 1, y, z):# all_dir.append((x + 1, y, z, 'u'))if check_point_valid(map, x + 1, y):all_dir.append((x + 1, y, 's'))if check_point_valid(map, x - 1, y):all_dir.append((x - 1, y, 'w'))if check_point_valid(map, x, y - 1):all_dir.append((x, y - 1, 'a'))if check_point_valid(map, x, y + 1):all_dir.append((x, y + 1, 'd'))return all_dirdef check_success(map, x, y):if map[x * 21 + y] == '2':return Trueelse:return Falsedef dfs(mapb, x, y, path):map = mapb.copy()if map[x * 21 + y] != '2':map[x * 21 + y] = '0'if check_success(map, x, y):print(path)return Truenext_point = gen_nex(map, x, y)for n in next_point:pathn = path + n[2]dfs(map, n[0], n[1], pathn)outpus = ""
dfs(maze, 15, 0, outpus)

可以解出俩条路径,用最短的,dddssssddwwwwddssddwwwwwwddddssaassddddwwwwddwwwwddd

再加上一个MD5加密,

image-20231128113204670

最后加上分数得到flag。

HZCTF{811173b05afff098b4e0757962127eac13371337}


[GDOUCTF 2023]L!s!

image-20231128113400183

俩个文件。

用Bindiff 检查文件差异性

image-20231128113520312

IDA分析后会留下一个i64或idb文件。

image-20231128113603145

Ctrl+6 快捷键打开,(有些可能没插件)

image-20231128113640972

image-20231128113705095

绿色的是匹配度最高的。这里可以发现只有一个有差异。应该就是经过修改的地方。

image-20231128113752938

发现是 extract_dirs_from_files这个函数。

用IDA打开另一个文件,找到这个函数,比对俩个函数,

image-20231128113944452

发现这里多出了一部分内容。

可以看到就只是做了一个异或而已。

EXP:

enc = [ 0x04, 0x16, 0x0F, 0x18, 0x0A, 0x37, 0x2E, 0x7D,0x22, 0x28, 0x25, 0x2A, 0x2A, 0x13, 0x7D, 0x3F,0x13, 0x2D, 0x13, 0x39, 0x3F, 0x7F, 0x2A, 0x39,0x20, 0x13, 0x38, 0x7C, 0x7C, 0x20, 0x31, 0x00]
for j in range(100):flag = []for i in range(len(enc)):flag.append(chr(enc[i]^j))print(''.join(flag))
# HZCTF{b1ndiff_1s_a_us3ful_t00l}L

[GDOUCTF 2023]润!

image-20231128114747225

UPX壳,看到EP Section UPX标志被修改了。

image-20231128114835213

用WInhex修改回来。

image-20231128114909407

image-20231128114939139

image-20231128115004700

一个迷宫题,不过是三维迷宫。

image-20231128115225050

一开始init处创建了一次迷宫(一层)后面moving里面每u一次都会layer++。这里layer就是楼的意思。

用动态调试,输入uuuuuuuuuuuuuuuuuuu连续创建迷宫,把迷宫copy出来;

EXP:

maze = [0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 2]# maze[x * 64 + y * 8 + z]
def check_point_valid(map, x, y, z):if (x >= 0) and (x <= 7) and (y >= 0) and (y <= 7) and (z >= 0) and (z <= 7):return (map[x * 64 + y * 8 + z] != 1) and ((map[x * 64 + y * 8 + z] == 0) or (map[x * 64 + y * 8 + z] == 2))else:return Falsedef gen_nex(map, x, y, z):all_dir = []if check_point_valid(map, x - 1, y, z):all_dir.append((x - 1, y, z, 'n'))if check_point_valid(map, x + 1, y, z):all_dir.append((x + 1, y, z, 'u'))if check_point_valid(map, x, y - 1, z):all_dir.append((x, y - 1, z, 'w'))if check_point_valid(map, x, y + 1, z):all_dir.append((x, y + 1, z, 's'))if check_point_valid(map, x, y, z - 1):all_dir.append((x, y, z - 1, 'a'))if check_point_valid(map, x, y, z + 1):all_dir.append((x, y, z + 1, 'd'))return all_dirdef check_success(map, x, y, z):if map[x * 64 + y * 8 + z] == 2:return Trueelse:return Falsedef dfs(mapb, x, y, z, path):map = mapb.copy()if map[x * 64 + y * 8 + z] != 2:map[x * 64 + y * 8 + z] = 1if check_success(map, x, y, z):print(path)return Truenext_point = gen_nex(map, x, y, z)for n in next_point:pathn = path + n[3]dfs(map, n[0], n[1], n[2], pathn)outpus = ""
dfs(maze, 0, 0, 0,  outpus)

解出来ssddssuuwwddndduuussdussasauudd

CTF-Reverse 迷宫地图类题目分析‘‘DFS和BFS算法‘‘

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/225600.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

盘点最新的十大地推拉新app推广接单平台,一手接单渠道分享

小编主推&#xff1a;聚量推客 一手官签直营 随着网络的发展&#xff0c;越来越多的app运应而生社交类、购物类、娱乐类、资讯类、教育类、健康类、金融类为了将这些应用程序推广给更多的人使用&#xff0c;地推拉新app推广接单平台应运而生。本文将介绍十大地推拉新app推广接…

colab notebook导出为PDF

目录 方法一&#xff1a;使用浏览器打印功能 方法二&#xff1a;使用nbconvert转换 方法三&#xff1a;在线转换 方法一&#xff1a;使用浏览器打印功能 一般快捷键是CTRLP 然后改变目标打印机为另存为PDF 这样就可以将notebook保存为PDF了 方法二&#xff1a;使用nbconver…

抖去推--短视频账号矩阵系统saas工具源码技术开发(源头)

目录 一、短视频矩阵系统搭建常见问题&#xff1f; 二、账号矩阵如何打造&#xff1f;&#xff08;企业号、员工号、达人号裂变&#xff09; 三、无人直播解决什么问题&#xff1f; 一、短视频矩阵系统搭建常见问题&#xff1f; 1、抖去推的短视频AI矩阵营销软件需要一定的技…

YOLOv8 onnx 文件推理多线程加速视频流

运行环境&#xff1a; MacOS&#xff1a;14.0Python 3.9Pytorch2.1onnx 运行时 模型文件&#xff1a; https://wwxd.lanzouu.com/iBqiA1g49pbc 密码:f40v 下载 best.apk后将后缀名修改为 onnx 即可模型在英伟达 T4GPU 使用 coco128 训练了 200 轮如遇下载不了可私信获取 代码…

【Flutter】graphic图表实现自定义tooltip

renderer graphic中tooltip的TooltipGuide类提供了renderer方法,接收三个参数Size类型,Offset类型,Map<int, Tuple>类型。可查到的文档是真的少,所以只能在源码中扒拉例子,做符合需求的修改。 官方github示例 官方示例 这个例子感觉像是tooltip和提供的那些属性的…

springboot自定义更换启动banner动画

springboot自定义更换启动banner动画 文章目录 springboot自定义更换启动banner动画 &#x1f4d5;1.新建banner&#x1f5a5;️2.启动项目&#x1f516;3.自动生成工具&#x1f9e3;4.彩蛋 &#x1f58a;️最后总结 &#x1f4d5;1.新建banner 在resources中新建banner.txt文…

【机器视觉技术】:开创崭新时代

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; IT杂谈 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1; 前言&#x1f324;️ 机器视觉技术的实现☁️ 图像采集☁️ 图像处理☁️ 数据建模☁️应用展示…

计算机毕业设计springboot+vue高校田径运动会报名管理系统61s38

高校田径运动会管理采用java技术&#xff0c;基于springboot框架&#xff0c;mysql数据库进行开发&#xff0c;实现了首页、个人中心、运动员管理、裁判员管理、场地信息管理、项目类型管理、比赛项目管理、比赛报名管理、比赛成绩管理、通知公告管理、留言板管理、交流论坛、系…

全能音乐制作环境——水果编曲软件FL Studio 21.1版本下载安装配置

目录 前言一、FL Studio 安装二、使用配置总结 前言 FL Studio是一款流行的图像线软件制作和编辑音频文件。作为一款领先的创新产品&#xff0c;该软件能够满足在创作音乐方面的需求。有了这个产品&#xff0c;可以完成制作音乐的整个过程。可以使用这个软件进行写作&#xff…

VIR-SLAM代码分析2——VIR_VINS详解

前言 VIR-SLAM中VIR_VINS文件夹下是基于VINS-mono的结合UWB传感器的估计器&#xff0c;主要改动的文件在uwb_posegraph&#xff0c;vir_estimator中。其他文件夹完成的是UWB数据的处理问题&#xff0c;比较简单上一节介绍足够&#xff0c;代码也容易看懂。本节介绍的VIR_VINS是…

校园圈子小程序APPH5,三端源码交付,支持二开,交友,外卖,跑腿等功能应有尽有

校园圈子程序&#xff0c;是集合了各种好玩儿的东西在里面的一款小程序&#xff0c;APP&#xff0c;H5三端一体的系统&#xff0c;可以帮助大家能更好的去体验生活的快乐 校园后端下载地址&#xff1a;校园圈子系统小程序&#xff0c;校园拼车&#xff0c;校园表白&#xff0c;…

SpringCloud之服务网关Gateway组件使用——详解

目录 一、网关介绍 1.什么是服务网关 2. 为什么需要网关 3.网关组件在微服务中架构 二、服务网关组件 1. zuul 1.x 2.x(netflix 组件) 1.1 zuul版本说明 2. gateway (spring) 2.1 特性 2.2 开发网关动态路由 2.2.1.创建项目引入网关依赖 2.2.2 快捷方式配置路由 2.2…