25年秋季第一次断网考(未更新完)
Pwn1首先下载文件后拿到虚拟机去checksec,并且查看file信息开了部分保护,canary和NX,是一个64位的文件在函数表里我们看到了很多函数,直接去看main函数吧F5反汇编,获得了伪代码大致的意思就是先将s和v11清空,然后再输出了两句话,等着用户输入,将username存入了s中,password存入v11中再对password和字符串“ls_4nyth1n9_7ruIy_R4nd
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值转换为字符
运行后得到结果

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


所有评论(0)