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

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

image-20250505161128011

迷宫(maze)

思路:

1.找到地图(字符串)

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

3.找到起点到终点

然后将路径输出即可

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

image-20250428102319278

整理字符串为图形.py

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

import math


def arrange_string_to_square():
    # 获取用户输入的字符串
    input_str = input("请输入要整理的字符串: ").strip()
    length = len(input_str)

    # 检查是否是完美平方数
    sqrt = math.isqrt(length)
    if sqrt * sqrt == length:
        # 是完美平方数,自动确定行列数
        rows = cols = sqrt
        print(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})")
                    continue
                break
            except ValueError:
                print("请输入有效的整数!")

    # 按行列数整理字符串
    for i in range(rows):
        start = i * cols
        end = start + cols
        print(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 deque


def 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 = sqrt
            print(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 * cols
        end = start + cols
        grid.append(list(input_str[start:end]))

    return grid


def 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 None


def 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 0

    directions = {
        '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 path

        for 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 None


def 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)
                break
            except 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)")
        return

    path = 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

校园失物招领微信小程序源码, 失物招领小程序主要为解决大学生时常丢失物品而且很难找回以及归还过程繁琐不方便的问题, 与传统的失物招领方式不同,该款校园失误招领小程序拥有快捷发布寻物启事和失误找领功能, 快速查找、极速归还、高效沟通、防误领冒领等功能, 在开发校园失物招领小程序前与用户访谈发现有近40的同学校园内频繁丢失物品、证件、校园卡等, 数码产品、日用品等,丢失区域主要发生在教学楼、图书馆和食堂。 拾领校园失物招领小程序继承了寻物启事和失物招领,丢失物品或拾取物品都可发布帖子, 首页的横幅滚动公告展示通知公告等,banner图片化的方式更具有视觉吸引力, 最新信息可显示最近发布的招领信息或寻物信息,更加方便快捷的展示信息, 用户可通过首页的发布按钮发布帖子,发布者只需填写物品的相关信息,别、地点等相关信息, 并且可以填写手机号开启认领验证,并可以一键生成二维码分享或分享至群聊和朋友圈。 列表内可以筛选物品别或精确搜索,物品详情里可展示物品的相关信息, 确认是自己的物品后可点击认领,然后验证信息,需填写物品的关键信息以作辨认, 防止冒领误领,物品详情页可生成二维码海报分享,还有即时的消息联系功能以提高沟通效率, 发布者还可选择放置在代收处,双方还可以通过拨打电话紧急联系,用于紧急情况,让失物找到主人, 个人中心可以管理发布的物品帖子,管理个人信息,包括昵称、默认学校、手机号的修改、 编辑发布的物品帖子、获取帮助等。帮助用户流畅的使用该小程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值