Pwn1

首先下载文件后拿到虚拟机去checksec,并且查看file信息开了部分保护,canary和NX,是一个64位的文件

在函数表里我们看到了很多函数,直接去看main函数吧

F5反汇编,获得了伪代码

大致的意思就是先将s和v11清空,然后再输出了两句话,等着用户输入,将username存入了s中,password存入v11中

再对password和字符串“ls_4nyth1n9_7ruIy_R4nd0m?”进行比对,当两者相同时才可以进入下一步,要不然就输出Permission denied

进入下一步后又提示用户来猜数字

这里的数字是由v3,v4,v5都共同决定的,然后生成了v8

接下来再请用户输入并存在v7中,比对v7与v8才可以得到我们想要的,也就是flag

Re

漫长的旅途

得到文件,先去查壳需要进行UPX脱壳

但是怎么尝试都不太对,都显示没有那就可能包装的方式不太对,我们就去用文本文件看看

将该exe文件拖到exeinfo看

可以看到他的包装方式是APK1

所以我们需要把APK改成UPX

去修改后保存到exe文件,再去进行脱壳

脱壳后交给ida64查看

直接去找地图吧,shift+f12地图提取出来

然后我们还得去找一下前往各个方向的命令

找到关键函数(同样是通过在字符界面找到的)这两的提示就很明显了,就是在问我们怎么移动的

反编译,查看伪代码,进行分析这里来分析一下,根据伪代码的意思,就是我们在迷宫里面从坐标(0,0)走到了坐标(59,29),对应的是我们日常的(X,Y),(但是这个只是符合我们的日常习惯,实际上的话二维数组的索引应该是(29,59))也就是在地图60*30里面从左上走到了右下,那么也就是刚才提取出来的地图里面从A走到了B

目标找到了,还得找我们走的方向

那么就逐句的细看了

代码最末端看这个比较,就可以知道是v9代表的是列,v10代表的是行,

在这里我们可以看到对v9和v10进行初始化为0

而后将v9和v10 分别赋给v12和v13,这就代表着v12是列数的暂存(也就是对应着X),v13是行数的暂存(对应Y轴)

接下来就开始了移动

这里将用户的输入的字符与ASCII值进行比对,如果是67(也就是C)那么就是将v12自减(也就是列数-1,即X-1,向左走1),如果是88(也就是X)那么就将v13+1(也就是行数+1,即Y+1,向下走1),如果是89(Y)那么就结束循环,如果是90(Z)那么就将v12+1(也就是列数+1,即X+1,向右走1)

那么这里理清楚之后就好理解了

接下来就来写代码

这里附两个代码:

提取地图的代码:

def convert_map_to_maze(map_str):
    maze = []
    for line in map_str.split('\n'): #遍历地图,以换行为分割标准
        row = []#每一次遍历都清空行的数组
        for char in line.strip(): #遍历去除了前后空白字符的字符串
            if char == 'A' or char == 'B' or char == '.':
                row.append('0')  # 可通行路径
            elif char == '$':
                row.append('1')  # 障碍物
            else:
                row.append('1')  # 其他字符默认视为障碍物
        maze.append(row) #将本行转换的加入maze这个数组
    return maze

# 示例地图(假设这是输入的地图字符串)(使用三引号来实现多行引用)
map_str = """A..........................................................$
$$$$$$$.$$$$$$$$$$$.$$$$$$$$.......$$$$$$$$$$$$........$$$$$
$$$$$$$.$$$$$$$$$$$.$$$$$$$$.......$$$$$$$$$$$$........$$$$$
$$$$$$$.$$$$$$$$...................$$$$$$$$$$$$.............
$$$$$$$...$$$$$$$$$.$$$$$$$$.......$$$$$$$$.$$$...........$.
$$$$$$$$$$.$.$$$$$$.$$$$$$$$................$$$...........$.
$$$$$$$$$$...$$$$$$.$$$$$$$$........$$$$$$$.$$$...........$.
$$$$$$$$$$$$$$..$$$.$$$$$$$$.$$$$$.$$$$$$$$.$$$.$.........$.
$$$$$$$$$$$$$$$.$$$.$$$$$$$$.$$$$$$$$$$$$$$.$$$.......$$$$$.
$$$$$$$$$$$$$$$.$$$.$$$$$$$$.$$$$$$$$$$$$$$.$$$.......$$$$$.
$$$$$$$$$$......$$$.$$$$$$....$$$$$$$$$$$$$.$$$.......$$$$$.
$$$$$$$$$$.$$$.$$$$..........$$$$$$$$$................$$$$$.
$$$$$$$$$$.$$$.$$$$$$$$$$$$$.$$$$$$$$$$.$$$$.$$$......$$$$$.
$$$$$$$$$$.$$$.................$$$$$$$$.$$$$.$$$$$$.$$$$$$$.
$$$$$$$$$$.$$$$$$$$$$.$$$$$$$$$$$$$$$$$.$$$$.$$$$$$$$$$$$$$.
$$$$$$$$$$.$$$$$$$$$$.$$$$$$$$$$$$$$$$$.$$$$.$$$$$$$$$$$$$$.
$$$$$$$$$$.$$$$$$$$$$...................$$$$.$$$$$$$$$$$$$$.
$$$$$$$$$$.$$$$$$$$$$$$$$$$$$$$$$$$$$$$.$$$$.$$$$$$$$$$$$$$.
$$$$$$$$$$.$$$$$$$$$$$$$$$$$$$$$$$$$$$$.$$$$.$$$$$$$$$$$$$..
$$$$$$$$$$............$$$$$$$$$$$$$$$$$.$$$$.$$$$$$$$......$
$$$$$$$$$$.$$$$$$$$$$.$$$$$$$$$$$$$$$$$.$$$$.$$$$$$$$.$.$$..
$$$$$$$$$$.$$$$$$$$$$.$$$$$$$$$$$$$$$$$.$$$$.$$$$$$$$.$.$$$.
$$.........$$$$$$$$$$.$$$$$$$$$$$$$$$$$.$$$$.$$$$$$$$.$.$$$.
...$$$$$$$$$$$$$$$$$$.$$$$$$$$$$$$$$$$$...............$.....
.$$$$$$$$$$$$$$$$$$$$.$$$$$$$$$$$$$$$$$.....$$$$.$$$$$$$$$$.
.$$$$$$$$......$$$$$$.$$$$$$$$$$$$..........$$$$.$$$$$$$$$$.
.$$$$$$$$........$$$$.$$$$$$$$$$$$$$$$$$$$$.$$$$..........$.
.$$$$$$$$$$......$$$$.$$$$$$$$$$$$$$$$$$$$$..$...$$$$$$$$.$.
.$$$$$$$$$$$$$$$.$$$$.$$$$$$$$$$$$$$...........$............
.................$$$$.......................$$$$$$$$$$$$$$.B"""

maze = convert_map_to_maze(map_str)

# 打印转换后的迷宫(部分)
for row in maze[:]:  
    print(row,end=',')#转换后的迷宫,每一个字符单独为内层一个元素,每一行为一个外层元素,索引为maze[i,j]

python会运行的有点慢,因为这个地图有点大,我们需要等一等,然后直接将结果复制到找路径的代码中就好了
但是有个细节没处理好,需要先自己删除一下这个逗号

获取地图最短路径的代码:

 
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', '1'],['1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1'],['1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1'],['1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'],['1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '0', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '0'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '0'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '0'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '0'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '0', '1', '1', '1', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '0'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '0', '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', '0', '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', '0', '1', '1', '1', '1', '0', '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', '0', '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', '0', '1', '1', '1', '1', '0', '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', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '0', '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', '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', '0', '1', '1', '1', '1', '0', '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', '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', '0', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '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', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '0', '1', '1', '0', '0'],['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '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', '0', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '0', '1', '1', '1', '0'],['1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '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', '0', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '0', '1', '1', '1', '0'],['0', '0', '0', '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', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0'],['0', '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', '0', '0', '0', '0', '0', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0'],['0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0'],['0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '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', '0', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0'],['0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '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', '0', '0', '1', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '0'],['0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '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', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0']]
from collections import deque #使用 deque(双端队列)来实现广度优先搜索(BFS)。deque 提供了高效的队列操作,支持从头部和尾部快速添加和删除元素。
 
 
def bfs(maze, start, end):  #定义bfs函数
    rows, cols = len(maze), len(maze[0])  #从maze中提取地图每行每列的元素的个数
    directions = [(0, -1, 'C'), (0, 1, 'Z'), (1, 0, 'X')] #定义三个可能移动的方向的代码,C,Z,X,其中C向左移动,Z向右移动,X向下移动
    queue = deque([start]) #初始化队列,将起始点加入队列
    visited = set([start]) #使用deque存储已访问的点
    prev = {}#初始化已访问的点的集合
 
    while queue: #当队列不为空时执行,否则就直接找不到路径
        x, y = queue.popleft()#从队列左侧取出一个节点(即当前所在位置,获得x,y)
        if (x, y) == end:#如果是结尾的话就退出循环
            break 
        for dx, dy, d in directions:#将各个方向都遍历一下
            nx, ny = x + dx, y + dy#将坐标更换为移动后的
            if 0 <= nx < rows and 0 <= ny < cols and maze[nx][ny] == '0' and (nx, ny) not in visited:#对当前所在的位置进行检查
                queue.append((nx, ny))#检查满足的就将它加入队列
                visited.add((nx, ny))#然后将该坐标标记为已访问的
                prev[(nx, ny)] = (x, y, d)#记录新位置的前驱点,即来源位置
 
    if end not in prev:
        return None#检查终点是否在prev中
 
    path = []
    x, y = end
    while (x, y) != start:
        x, y, d = prev[(x, y)]#循环,直到回到了出发点
        path.append(d)#将路径加入path中
    path.reverse()#反转路径,使其从终点返回起点
 
    return path
 
#定义路径查找的函数
 
def find_shortest_path(maze):
    rows, cols = len(maze), len(maze[0])#找到地图的行列数
    start = (0, 0)
    end = (rows - 1, cols - 1)#找到终点
    path = bfs(maze, start, end)#获取路径,调用bfs函数
    return path
 
path = find_shortest_path(maze)#找到最短的路径
print("".join(path) if path else "No path found")

获取到了路径,去md5加密

 3.0plus

得到文件,先查壳64位,直接ida去吧

shift+f12看到了一堆字符,很像地图

那么我们就去跳转到此处

有点奇怪,因为简单一看感觉是不能够走通的

看伪代码来具体分析一下

int __fastcall main(int argc, const char **argv, const char **envp)
{
  int v3; // ebp
  char *v4; // rdi
  __int64 v5; // rsi
  __int64 i; // rbx
  char v8[2384]; // [rsp+20h] [rbp-958h] BYREF

  memcpy(
    v8,
    "*****************.****..**s...***...*..*******..****..*******************..****..***...*...***...***..****..********"
    "****************.**...***...********..***...**..*.**.**.*****.***..****..***.......***...***..****..****************"
    "********......***...********..***...**..*.**.**.*****.***....***....****..*******************..****..***.......***.."
    ".***..****..*..****..***.......***...***..****..*..*******..****..*******************..****..***...*...***...***..**"
    "**..************************.**...***...********..***...**..*.**.**.*****.***..****..***.......***...***..****..****"
    "********************......***...********..***...**..*.**.**.*****.***....***....****..*******************..****..***"
    ".......***...***..****..*..****..***.......***...***..****..*..*******..****..*******************..****..***...*...*"
    "**...***..****..************************.**...***...********..***...**..*.**.**.*****.***..****..***.......***...***"
    "..****..************************......***...********..***...**..*.**.**.*****.***....***....****..******************"
    "*..****..***.......***...***..****..*..****..***.......***...***..****..*..*******..****..*******************..****."
    ".***...*...***...***..****..************************.**...***...********..***...**..*.**.**.*****.***..****..***...."
    "...***...***..****..************************......***...********..***...**..*.**.**.*****.***....***....****..******"
    "*************..****..***.......***...***..****..*..****..***.......***...***..****..*..*******..****..**************"
    "*****..****..***...*...***...***..****..************************.**...***...********..***...**..*.**.**.*****.***..*"
    "***..***.......***...***..****..************************......***...********..***...**..*.**.**.*****.***....***...."
    "****..*******************..****..***.......***...***..****..*..****..***.......***...***..****..*..*******..****..**"
    "*****************..****..***...*...***...***..****..************************.**...***...********..***...**..*.**.**."
    "*****.***..****..***.......***...***..****..************************......***...********..***...**..*.**.**.*****.**"
    "*....***....****..*******************..****..***.......***...***..****..*..****..***.......***...***..****..*..*****"
    "**..****..*******************..****..***...*...***...***..****..************************.**...***...********..***..."
    "**..*.**.**.*****.**********...*..#*...***...***..****..",
    0x948ui64);
  v3 = 0;
  v4 = v8;
  do
  {
    sub_7FF647671010("Layer %d:\n", (unsigned int)v3);
    v5 = 6i64;
    do
    {
      for ( i = 0i64; i < 6; ++i )
        sub_7FF647671010("%c ", (unsigned int)v4[i]);
      sub_7FF647671010("\n");
      v4 += 6;
      --v5;
    }
    while ( v5 );
    sub_7FF647671010("\n");
    ++v3;
  }
  while ( v3 < 66 );
  return 0;
}

前面的定义就不说了,直接从第9行的memcpy开始吧。这里第九行将一大长串的字符复制给了v8

这里有一个0x948ui64,解释一下

而前面的0x948就是一个正常的16进制

然后初始化v3为0,v4为v8

接下来是进入循环:

当v3小于66时(这里从第一次循环的v3为0开始,加到65截止,那么就是循环了66次)

在最外层的循环中,可以看到每经历一层就会输出一次层数,然后再定义一次v5为6

然后再次判断v5 ,如果不是0的话就可以进入内层循环,如果是0就不会进入内层循环,而是进入外层循环

内层的内层还有一个for循环,而这个循环利用i来又进行了6次

这里需要注意一下for循环内部:在最初,将v8的首地址给了v4,那么这里指针就是指向v4的,而后进行循环时打印字符就是打印的接下来的6个,然后换行,再将v4进行+6的操作,也就是v4的指针向后移了6位,这里就将前面已经打印的给跳过了,而后再打印的就是全新的

那么在这个循环里就又告诉了我们一件事,那么就是外层循环,进行了66次,
而每一次的内层都进行了6次

这里我们来计算一下,刚才的字符有0x948也就是2376字节,而66*6*6那么就说明这一大串的字符被变成了66*6*6的数组

那么结合前面的循环的整体来看,就是字符变成了一个立体的三维

假设一个字符得住在一个1*1*1的房间内,这个楼房就时66层,每层6行6列,那么就形成了66*6*6

这样就在脑海里建立起了一个空间的想法

而后就得把这个地图构造出来,成为一个类似二维数组的地图

 

 

 

 

安卓

这是一个安卓的逆向题

先拿去雷电模拟器试试

在页面中央看到了一个很flag的东西

有点迷糊,仔细看看

貌似有个Hello Word!

拿到Jadx-gui看搜到了,转到这里去

然后就看到了下面的有一个flag

方法二

直接搜索,把所有选项都选上

看到这里出来了两个,那么就都试试呗

Crypto

凯撒 (Crypto)

得到附件后看到了文件名是5+n,这里就已经猜到规律了,而且是个凯撒加密

先试试前四个,已知的,来找规律

经过尝试发现那个n是1

也就是说,变异凯撒加密,是从5开始依次加一

那么就可以去写脚本

将字符串遍历,然后取字符的ascii值,再加5加i (因为第一个字符就是加一,而后的比前一个加的多一,而i的初值是0,所以直接加5+i)

然后再将这个变化的ascii值转换为字符

运行后得到结果

考完之后问同学,他们说是直接交给随波逐流梭出来

 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐