misc
指尖的诉说
打开图片宽高明显不对
修复一下,对照盲文图
(这里对照图找错了,应该要找英文和数字的忙文图)这里的红色对应字符,蓝色对应数字,每一行和每一行之间用-连接
空间站的密语
根据题目得到的信息,可能涉及sstv解密
从github上下载sstv decode工具
找到文件夹,打开GBH输入
python setup.py install
接着把wav文件放在该文件夹下,输入
sstv -d /d/tools/sstv/sstv-master/密语.wav -o result.png
就分离出来了
根据附件里的密文,猜测是RC4加密
解密即可
实验室秘密流量流出
打开流量包,用协议分级查看一下发现一张jpg图片和smtp流量,这是类似于微信qq的流量,这张图片是通过http来传输的,这张图片可以用蓝鲨的自带功能导出
就得到了目标图片
发现目标图片下面有提示
再去流量包里面去筛smtp包,发现后面有一串字符,后面有个=,感觉像base64加密,用赛博厨子查一下
把那串字符整出来发现有中文和一张jpg,不确定是不是同一张,转出来看看,发现直接转转不出来,想到图片里还有个/9j/,这是base64转图片的起始标志加在前面就可以了
破解曼德尔砖
下载的附件没有后缀,用随波逐流看了一下确实是jpg文件,看看属性藏头诗,是四位数,不清楚是什么,接着找
暗示base16
发现含有压缩包,提取出来
要密码,而且文件前面有*标,说明是真加密,联想到最开始找到四位数,应该是要爆破了
打开来是社会主义核心价值观加密
再试试随波逐流
re
原码!启动
下载得到的附件用VSCODE打开发现是python文件
这里调用了3个库,定义了 _kernalize()和redcordage()函数;从整个流程来看,运行整个程序后会要求输入内容,然后执行加密函数。
这里要注意,第一个函数引用了变量s,但是整个程序都没有出现过s这个变量,这里可以判断出第一个函数是干扰函数接着看下面,发现在加密过程中只使用了x变量,而a变量没有输出,根据分析是冗余代码(干扰项)
接着分析加密过程:导入数据——经过redcordage()函数加密——base64加密
redcordage()函数加密过程
def redcordage(sakura, glg=0x1F):
Franxx = []
for i, char in enumerate(sakura):
a = ord(char) ^ (glg + i % 111 )
x = ord(char) ^ (glg + i % 8)
a = ((x >> 6) | (x << 7)) & 0xFF
x = ((x >> 3) | (x << 5)) & 0xFF
a = ord(char) ^ (glg + i % 111)
a = ((x >> 6) | (x << 7)) & 0xFF
Franxx.append(x)
return base64.b64encode(bytes(Franxx)).decode()
首先是引入变量Sakura和一个glg=0x1F;
设置了一个Franxx来储存循环语句中的结果;
然后调用了异或算法,而这个key就是之前提到的glg,值是0x1F;
接着调用了循环位移算法,先向右移3位,再向左移5位,通过|连接起来
最后再进行了base64加密
理清楚思路后,可以通过删除冗余代码来简化过程
import base64
def redcordage(sakura, glg=0x1F):
Franxx = []
for i, char in enumerate(sakura):
x = ord(char) ^ (glg + i % 8)
x = ((x >> 3) | (x << 5)) & 0xFF
Franxx.append(x)
return base64.b64encode(bytes(Franxx)).decode()
if __name__ == "__main__":
text = input("这里就是加密flag的入口噢")
print(redcordage(text))
#redcordage(text)=yKrpS0nrCELPgojiCMJoAmUiIgjIgmLCb0Ij6AiDo+gF4mIC4mIL
最后的解密脚本
厄里芬的秘密
检查文件类型是一个64位的elf文件,用ida查看主调函数,发现这个程序实现了3个过程
1.验证用户是否输入111000011111
2.对用户输入进行RC4加密,并将结果和s2和V8比较
3.将每个字符都按位取反后与V6硬编码值比较
这题有两种解法,一种是静态解混淆函数,另一种是动态调试,这里用动调的办法来做
首先,配置动调环境
因为题目给的是elf文件,我这里用ida来调试
参考配置教程
首先分析这个程序的结构
puts(::s);
fgets(s, 256, _bss_start);
s[strcspn(s, "\n")] = 0;
remove_spaces(s);
if ( !strcmp(s, "111000011111") ) // 对用户输入进行比较
{
puts(asc_55FFDF90706D);
fgets(s, 256, _bss_start);
s[strcspn(s, "\n")] = 0;
v4 = strlen(s);
rc4_crypt((__int64)&unk_55FFDF907089, 3uLL, (__int64)s, v4, (__int64)s1);// RC4加密过程
s2 = '\xC4\xD0\aR\xB3\xB7?8';
v8 = '\xFF\xFF\xA2\x8F';
if ( !memcmp(s1, &s2, 0xAuLL) // 自身取反
&& (puts(asc_55FFDF907090), fgets(s, 256, _bss_start), s[strcspn(s, "\n")] = 0, strlen(s) == 11) )
{
for ( i = 0LL; ; ++i )
{
v5 = strlen(s);
if ( i >= v5 )
break;
s[i] = ~s[i];
}
*(_QWORD *)v6 = '\x88\x8C\x86\x8C\x99\x98\x93\x88';
*(_DWORD *)&v6[7] = '\x99\x98\x93\x88';
if ( !memcmp(s, v6, 0xBuLL) )
{
complex_output((__int64)v10);
puts(v10);
puts(asc_55FFDF9070D0);
}
else
{
puts(asc_55FFDF90705D);
}
return 0;
}
else
{
puts(asc_55FFDF90705D);
return 0;
}
}
else
{
puts(asc_55FFDF90705D);
return 0;
}
}
按照之前说的三层加密,采用if嵌套结构进行硬比较,因为函数逻辑也比较简单,所以很好判断断点设置的位置按照一般动调的逻辑来说,在比较的位置下断点,通过查看寄存器里放的东西来实现绕开加密过程“偷懒”
这里可以看到运行到第一个比较时右边RDX(寄存器)里藏着需要比较的数据,这样就可以得到需要我们输入的数据,以此类推
这是静态分析去解函数
RC4解密:
这题由于密钥很好找,就采用在线加密的方式解决
第三层自身取反
#*(_QWORD *)v6 = '\x88\x8C\x86\x8C\x99\x98\x93\x88';
# *(_DWORD *)&v6[7] = '\x99\x98\x93\x88';
def hex_to_binary(s):
bytes_list = s.replace('\\x','').split(' ')
x = ''
for byte in bytes_list:
dec = int(byte,16)
x += f"{dec:08b}"
return x
def xor(x):
y = ''.join('1' if bit == '0' else '0' for bit in x)
return y
def binary_to_char(y):
z = ''.join(chr(int(y[int(i):int(i)+8],2))
for i in range(0,len(y),8))
return z
def main():
s =input('请输入十六进制字符串')
return binary_to_char(xor(hex_to_binary(s)))
print(main())
#小端序 wlgfsyswlgf
这里要注意,取反异或的时候要先将十六进制转换为2进制完成取反,接着将结果用char的格式输出
验证一下
对于这道题的动调:
因为这道题的代码逻辑有创新,直接输入的数据与存在里面的数据不能直接比较,因为缺少对输入数据的逆向处理,所以还是要输入解密后的数据(约等于静态分析了)
这道题我也尝试过用栈溢出去绕过比较,但是这里的代码逻辑是三层if嵌套的强比较,只有是与不是,所以走不了这个近路
当然,这道题也可以去直接解那个混淆函数,难度很大不推荐
漫长的旅途
先查壳64位的exe,有upx壳,还提示不要用upx -d直接脱壳,所以不要去铁头去直接脱壳了
分析一下为什么会这样,有一种情况,就是exe里的upx加壳的识别位被修改了,用010看一下发现搜不到upx,说明这题是修改了标识位,现在就是要去找到修改后的内容,对于正常的upx加密内容,它的标识位是UPX0,UPX1,UPX2三段构成,看010标红的位置
发现了,UPX被改为APK了,将三个APK改成UPX就可以正常用upx脱壳了
现在没壳了,直接用IDA打开,发现这题没有主调函数,只有start函数,追踪过去,同时在shift+F12查看中看到了迷宫
按照迷宫题的一般思路,需要找到迷宫的参数,控制方式,胜利方式等内容
发现了YXCZ分别控制上下左右
这里的59和29是迷宫的规格,因为要补零,所以规格是60列*30行,找到迷宫,shift+F12提取出来接下来就是整理
整理脚本
import re
def ida_to_ascii_array(file_path):
ascii_array = []
# 匹配0-255之间的十进制数字
dec_pattern = re.compile(r'\b([0-9]{1,3})\b')
with open(file_path, 'r') as f:
for line in f:
# 清理行内容:移除注释和结构符号
clean_line = re.sub(r'//.*|\{|\}|;', '', line)
# 提取并转换所有有效ASCII码
bytes_list = [
chr(int(num))
for num in dec_pattern.findall(clean_line)
if 0 < int(num) <= 255 # 排除0的情况
]
ascii_array.extend(bytes_list)
return ascii_array
if __name__ == "__main__":
ascii_data = ida_to_ascii_array("迷宫.txt")
print("转化的ASCII字符数量为:",len(ascii_data))
# 第二步:转换为二维迷宫
row = 30 # 迷宫行数
col = 60 # 迷宫列数
# 检查数据量是否足够
if len(ascii_data) < row * col:
print(f"错误:需要{row}x{col}={row*col}个字符,实际得到{len(ascii_data)}")
else:
maze = []
s = 0 # 数据索引
for i in range(row):
# 截取当前行数据
maze.append(ascii_data[s:s+col])
s += col
print(maze)
for r in maze:
print(''.join(r))
题目也没说是要哪种路径,就用bfs和dfs寻路算法都尝试一遍
BFS算法
from collections import deque
#设置二维四向迷宫, 如果题目是多个小迷宫问题, 拆分多次调用脚本获取路径即可
maze = [['A', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '$'], ['$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '.', '.', '.', '.', '.', '.', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '.', '.', '.', '.', '.', '.', '.', '$', '$', '$', '$', '$'], ['$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '.', '.', '.', '.', '.', '.', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '.', '.', '.', '.', '.', '.', '.', '$', '$', '$', '$', '$'], ['$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.'], ['$', '$', '$', '$', '$', '$', '$', '.', '.', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '.', '.', '.', '.', '.', '.', '.', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '$', '.'], ['$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '.', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '$', '$', '$', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '$', '.'], ['$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '.', '.', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '.', '.', '.', '.', '.', '.', '.', '.', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '$', '.'], ['$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '.', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '.', '$', '.', '.', '.', '.', '.', '.', '.', '.', '.', '$', '.'], ['$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '.', '.', '.', '.', '.', '.', '.', '$', '$', '$', '$', '$', '.'], ['$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '.', '.', '.', '.', '.', '.', '.', '$', '$', '$', '$', '$', '.'], ['$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '.', '.', '.', '.', '.', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '.', '.', '.', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '.', '.', '.', '.', '.', '.', '.', '$', '$', '$', '$', '$', '.'], ['$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '.', '$', '$', '$', '$', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '$', '$', '$', '$', '$', '.'], ['$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '.', '$', '$', '$', '.', '.', '.', '.', '.', '.', '$', '$', '$', '$', '$', '.'], ['$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '.'], ['$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.'], ['$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.'], ['$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.'], ['$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.'], ['$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '.'], ['$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '.', '.', '.', '.', '.', '.', '$'], ['$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '.', '$', '$', '.', '.'], ['$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '.', '$', '$', '$', '.'], ['$', '$', '.', '.', '.', '.', '.', '.', '.', '.', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '.', '$', '$', '$', '.'], ['.', '.', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '$', '.', '.', '.', '.', '.'], ['.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '.', '.', '.', '.', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.'], ['.', '$', '$', '$', '$', '$', '$', '$', '$', '.', '.', '.', '.', '.', '.', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.'], ['.', '$', '$', '$', '$', '$', '$', '$', '$', '.', '.', '.', '.', '.', '.', '.', '.', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '$', '.'], ['.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '.', '.', '.', '.', '.', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '.', '$', '.', '.', '.', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '.'], ['.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '$', '$', '$', '$', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '$', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '$', '$', '$', '$', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '$', '.', 'B']]
path_len = 0x7fffffff#如果题目未给出终点坐标,则一定会指定路径的长度,在此处修改路径长度,否则请保留path_len的极大值
#进行BFS寻找路径
def bfs(start, end, barrier):
directions = [(0, 1), (1, 0), (0, -1), (-1, 0)] # 定义四个方向的移动
for i in range(len(maze)):#获取起点和终点在列表中的索引
for j in range(len(maze[i])):
if(maze[i][j] == start):
start = (i, j)
if(maze[i][j] == end):
end = (i, j)
#以下均是bfs算法套路
queue = deque()
queue.append((start, [start])) # (当前位置, 路径)
visited = set()
visited.add(start)
while queue:
position, path = queue.popleft()
if position == end:
return path
elif len(path)==path_len:
return path
for d in directions:
next_position = (position[0] + d[0], position[1] + d[1])
if 0 <= next_position[0] < len(maze) and 0 <= next_position[1] < len(maze[0]) and \
maze[next_position[0]][next_position[1]] != barrier and next_position not in visited:
queue.append((next_position, path + [next_position]))
visited.add(next_position)
return None
#执行BFS搜索并打印结果
if __name__ == '__main__':
#maze[起点x坐标][起点y坐标] = 'A' #如果题目给了起点终点的坐标,在这里直接给起点和终点添加特征
#maze[终点x坐标][终点y坐标] = 'B'
path = bfs('A', 'B', 1) #bfs函数传入参数代表起点、终点、障碍的特征(若题目给出的数据无特征, 手动添加特征即可, 通常障碍是1也有可能是0或其它字符如'#')
print("移动路径坐标:", path)
print("移动路径方位:{", end='')
for i in range(1 ,len(path)):
x1, y1, x2, y2 = path[i - 1][0], path[i - 1][1], path[i][0], path[i][1]
if(x1 > x2):#上
print("Y", end='')
elif(x1 < x2):#下
print("X", end='')
elif(y1 > y2):#左
print("C", end='')
elif(y1 < y2):#右
print("Z", end='')
print('}')
得到路径