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

逆向常见题目—迷宫类题目

逆向常见题目—迷宫类题目

image-20250505161128011

迷宫(maze)

思路:

1.找到地图(字符串)

2.找到方向(上左下右)

3.找到起点到终点

然后将路径输出即可

特征: 标题,hint为maze 或者 看到字符串###等等

image-20250428102319278

整理字符串为图形.py

(要是不是正方形需要自己输出行和列)

import mathdef arrange_string_to_square():# 获取用户输入的字符串input_str = input("请输入要整理的字符串: ").strip()length = len(input_str)# 检查是否是完美平方数sqrt = math.isqrt(length)if sqrt * sqrt == length:# 是完美平方数,自动确定行列数rows = cols = sqrtprint(f"字符串长度{length}是完美平方数({sqrt}x{sqrt}),自动整理为{sqrt}x{sqrt}的图形。")else:# 不是完美平方数,让用户选择行列数print(f"字符串长度{length}不是完美平方数,请指定行列数。")while True:try:rows = int(input("请输入行数: "))cols = int(input("请输入列数: "))if rows * cols != length:print(f"错误:行数×列数({rows}x{cols}={rows * cols})不等于字符串长度({length})")continuebreakexcept ValueError:print("请输入有效的整数!")# 按行列数整理字符串for i in range(rows):start = i * colsend = start + colsprint(input_str[start:end])# 返回行列数供后续使用return rows, cols# 调用函数
rows, cols = arrange_string_to_square()
请输入要整理的字符串: S #######  ## ####  # #####   ###   #  ####### ##      #######E#
字符串长度64是完美平方数(8x8),自动整理为8x8的图形。
S ######
#  ## ##
##  # ##
###   ##
#   #  #
###### #
#      #
######E#

整理图形到输出路径.py

import math
from collections import dequedef create_grid(input_str, rows=None, cols=None):"""将字符串转换为二维网格"""length = len(input_str)if rows is None or cols is None:sqrt = math.isqrt(length)if sqrt * sqrt == length:rows = cols = sqrtprint(f"字符串长度{length}是完美平方数({sqrt}x{sqrt}),自动整理为{sqrt}x{sqrt}的图形。")else:raise ValueError("字符串长度不是完美平方数,必须指定行列数")if rows * cols != length:raise ValueError(f"行数×列数({rows}x{cols}={rows * cols})不等于字符串长度({length})")grid = []for i in range(rows):start = i * colsend = start + colsgrid.append(list(input_str[start:end]))return griddef print_grid(grid):"""打印网格(不添加额外空格)"""for row in grid:print(''.join(row))print()def find_position(grid, char):"""查找字符在网格中的位置"""for i in range(len(grid)):for j in range(len(grid[0])):if grid[i][j] == char:return (i, j)return Nonedef find_path(grid, start_char, end_char, moves):"""使用BFS算法查找从起点到终点的路径,路径上只能走空格(起点和终点除外)"""start = find_position(grid, start_char)end = find_position(grid, end_char)if not start:raise ValueError(f"起点字符 '{start_char}' 不存在于网格中")if not end:raise ValueError(f"终点字符 '{end_char}' 不存在于网格中")rows = len(grid)cols = len(grid[0]) if rows > 0 else 0directions = {'w': (-1, 0),  # 上's': (1, 0),   # 下'a': (0, -1),  # 左'd': (0, 1)    # 右}queue = deque([(start, [])])visited = set([start])while queue:(x, y), path = queue.popleft()if (x, y) == end:return pathfor move in moves:dx, dy = directions[move]nx, ny = x + dx, y + dy# 检查新位置是否有效if 0 <= nx < rows and 0 <= ny < cols and (nx, ny) not in visited:# 如果是终点,直接可以到达if (nx, ny) == end:return path + [move]# 路径中间必须是空格if grid[nx][ny] == ' ':visited.add((nx, ny))queue.append(((nx, ny), path + [move]))return Nonedef main():input_str = input("请输入要整理的字符串: ").strip()length = len(input_str)try:grid = create_grid(input_str)except ValueError:print(f"字符串长度{length}不是完美平方数,请指定行列数。")while True:try:rows = int(input("请输入行数: "))cols = int(input("请输入列数: "))grid = create_grid(input_str, rows, cols)breakexcept ValueError as e:print(e)print("\n生成的网格:")print_grid(grid)start_char = input("请输入起点字符: ").strip()end_char = input("请输入终点字符: ").strip()moves_input = input("请输入移动指令序列(WASD,如'wasd','上左下右'): ").strip().lower()valid_moves = {'w', 'a', 's', 'd'}moves = [m for m in moves_input if m in valid_moves]if not moves:print("错误: 没有输入有效的移动指令(WASD)")returnpath = find_path(grid, start_char, end_char, moves)if path:print(f"\n从 '{start_char}' 到 '{end_char}' 的路径:")print(''.join(path))  # 修改为直接输出连接后的字符串else:print(f"\n无法从 '{start_char}' 到达 '{end_char}' 使用给定的移动指令")if __name__ == "__main__":main()
请输入要整理的字符串: S #######  ## ####  # #####   ###   #  ####### ##      #######E#
字符串长度64是完美平方数(8x8),自动整理为8x8的图形。生成的网格:
S ######
#  ## ##
##  # ##
###   ##
#   #  #
###### #
#      #
######E#请输入起点字符: S
请输入终点字符: E
请输入移动指令序列(WASD,如'wasd','上左下右'): wasd从 'S' 到 'E' 的路径:
dsdsdsddsdsss进程已结束,退出代码为 0

例题1--NSSCTF--RE6

ida打开

第一步:找到地图

shift+F6查看字符串

image-20250505000445876

点进去,选中,按A排成一行

image-20250505000510671

复制出来

S #######  ## ####  # #####   ###   #  ####### ##      #######E#

发现为64个字符

确认为8x8图形

第二步:找到方向

Tab查看汇编

image-20250504235255845

119 115 97 100

image-20250504235343656

经典是上下左右 wsad

第三步:确认起点终点

8个一行

S #######  ## ####  # #####   ###   #  ####### ##      #######E#

确认S为起点,E为终点

输入整理字符串到输出路径.py即可

请输入要整理的字符串: S #######  ## ####  # #####   ###   #  ####### ##      #######E#
字符串长度64是完美平方数(8x8),自动整理为8x8的图形。生成的网格:
S ######
#  ## ##
##  # ##
###   ##
#   #  #
###### #
#      #
######E#请输入起点字符: S
请输入终点字符: E
请输入移动指令序列(WASD,如'wasd','上左下右'): wasd从 'S' 到 'E' 的路径:
dsdsdsddsdsss进程已结束,退出代码为 0

image-20250505000606457

相关文章:

  • 【AI大模型学习路线】第一阶段之大模型开发基础——第四章(提示工程技术-1)In-context learning。
  • android-ndk开发(5): 编译运行 hello-world
  • 机器人强化学习入门学习笔记
  • EPSG:3857 和 EPSG:4326 的区别
  • 雷电模拟器-超好用的Windows安卓模拟器
  • 百度golang开发一面
  • Red Hat6.4环境下搭建DHCP服务器
  • llama_factory0.9.3微调Qwen3
  • DGI数据治理框架的最佳实践
  • 《电子技术基础(数字部分)》第 5 章 锁存器和触发器
  • 分析rand()和srand()函数的功能
  • 开元类双端互动组件部署实战全流程教程(第4部分:后台配置系统与参数动态控制)
  • 普联的AC100+AP+易展路由组网方案的一些问题
  • 2025年第十六届蓝桥杯省赛JavaB组真题
  • 功率放大器设计
  • Javascript大致框架
  • 前端面试每日三题 - Day 25
  • 【RK3588嵌入式图形编程】-Cairo-Cairo图形库支持后端
  • 【纪念我的365天】我的创作纪念日
  • 【Java ee初阶】多线程(6)
  • 巴菲特首次明确批评贸易战,“投资界春晚”有哪些看点?一文速览
  • “彩虹滑道”项目两男童相撞飞跌出去,景区:工作人员误判导致
  • 陈颖已任上海黄浦区委常委、统战部部长
  • 海警巡航时海豚围舰艇嬉戏,专家:证明海域生态环境持续向好
  • 人民日报评论员:焕发风雨无阻、奋勇前行的精气神
  • 成都世运会倒计时100天,中国代表团运动员规模将创新高