「附件」
附件是一个txt文件,部分内容:
$GPGGA,090000.00,3416.48590278,N,10856.86623887,E,1,05,2.87,160.00,M,-21.3213,M,,7E
$GPGGA,090000.05,3416.48590278,N,10856.86623887,E,1,05,2.87,160.00,M,-21.3213,M,,7B
$GPGGA,090000.10,3416.48590278,N,10856.86623887,E,1,05,2.87,160.00,M,-21.3213,M,,7F
$GPGGA,090000.15,3416.48590278,N,10856.86623887,E,1,05,2.87,160.00,M,-21.3213,M,,7A
题目描述如下:
可爱的猫猫走丢了,还好猫猫有GPS定位装置,我们陆陆续续在终端收到了GPS数据,你能帮忙找到可爱的猫猫吗?
flag格式为CatCTF{*}
「思路」
没见过的数据格式,猜测GPGGA
可能是对应的协议或者格式名称,搜索一下:
GPGGA是GPS数据输出格式语句,意思是一帧GPS定位的主要数据,是NMEA格式中使用最广的数据之一。
(简单了解)该语句包括17个字段,分别是语句标识头,世界时间,纬度,纬度半球,经度,经度半球,定位质量指示,使用卫星数量,HDOP-水平精度因子,椭球高,高度单位,大地水准面高度异常差值,高度单位,差分GPS数据期限,差分参考基站标号,校验和结束标记1。
既然是GPS数据,那就让AI写个程序按行解析数据,并画出轨迹图像。
import re
import matplotlib.pyplot as plt
# 预处理正则表达式,用于解析 GPS 数据
pattern = re.compile(
r"\$GPGGA,(\d+\.\d+),(-?\d+\.\d+),([NS]),(-?\d+\.\d+),([EW]),(\d),(\d+),(\d+\.\d+),(-?\d+\.\d+),M,(-?\d+\.\d+),M,,")
# 初始化经度、纬度列表
lons, lats = [], []
# 遍历每一行 GPS 数据
for line in open("CatchCat.txt", "r"):
# 匹配 GPS 数据
m = pattern.match(line)
if m:
# 解析 GPS 数据
lat = float(m.group(2))
lat_dir = m.group(3)
lon = float(m.group(4))
lon_dir = m.group(5)
# 将角度转换为弧度
lat = (lat / 100.0) + (lat % 100.0) / 60.0
lon = (lon / 100.0) + (lon % 100.0) / 60.0
# 根据方向符号调整经度、纬度值
if lat_dir == "S":
lat = -lat
if lon_dir == "W":
lon = -lon
# 将经度、纬度添加到列表中
lons.append(lon)
lats.append(lat)
# 绘制经度、纬度坐标图
plt.plot(lons, lats)
# 添加坐标轴标签
plt.xlabel("Longitude (degrees)")
plt.ylabel("Latitude (degrees)")
# 显示图表
plt.show()
最后根据轨迹图像,得出flag
「过程」
pip默认源安装matplotlib库太慢,试试这个:pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
「工具」
「知识拓展」
__MACOSX 文件夹是拿来做什么用的
__MACOSX 文件夹在 Mac 系统上自动生成的用于存放一些缓存文件的目录12。
在 Mac 系统中,当用户将一个目录压缩成压缩包时,如果该目录中存在 __MACOSX 文件夹,则该文件夹会被自动添加到压缩包中。在 Windows 系统中,__MACOSX 文件夹则会被视为垃圾文件,需要手动删除。
此外,__MACOSX 文件夹还用于存储一些元数据信息,如文件夹的日期、访问记录等,这些信息对于 Mac 用户来说是有用的。