下载附件得到一个jpg图片,然后先看下属性:
明显有提示。然后010打开,这里知道jpg的文件头和文件尾的16进制分别为:
文件头:FFD8FF 文件尾:FFD9
当然如果你手动往下翻也不是不行,只不过数据多了就不好找了。这里明显看到文件尾有大量的十六进制数据,复制出来一段解码看看是什么:
结合前面图片属性中给的提示和解出来的坐标可知应该是用坐标画图。
问题是先把文件结尾的大量数据转换成坐标的形式,然后再考虑画图。
脚本不是太会写,然后就一步一步复现的wp的,弄清楚了每一步都干的什么。
import matplotlib.pyplot as plt
import numpy as np #导入两个依赖的库
with open("Raw.txt",'r') as re:
re=re.read()
with open("Data.txt",'a') as a:
for i in range(0,len(re),2):
date = "0x"+re[i]+re[i+1]
date = int(date,base=16)
if chr(date) != '(' and chr(date) != ')':
a.write(chr(date))
x,y = np.loadtxt('Data.txt',delimiter=',',unpack='True')
#用numpy的库把坐标数据进行处理 delimter后跟的为分隔符 unpack设置成True是结果可转换
#具体文档说明:
#unpackbool, optional
#If True, the returned array is transposed,
# so that arguments may be unpacked using x, y, z = loadtxt(...).
# When used with a structured data-type, arrays are returned for each field. Default is False
plt.plot(x,y,'.') #生成图形
plt.show()
python的库pillow也可以用来画图,由于刚弄涉及画图的Misc题目,这里就先就题论题,后续接触多了再做下总结。
然后扫码得flag
解法二:
在处理16进制数据的时候可以用在线网站或者Cyberchef进行转换,但是在线网站有的弊端是在有的线下不接外网的情况下就很难搞,所以还是离线脚本的方法首选,Cyberchef可以用本地版的,但是对于过多的数据把结果复制过来时就不太便:
解码网站:https://coding.tools/tw/hex-to-ascii
然后和上面一样解码完得到许多坐标数据,这里用的是gnuplot这个软件,Linux和Windows都能使用,开始准备安装在Ubuntu上,后来遇到一些环境问题,也没再弄,索性安装在了Windows上面了,可以把它加入环境变量中,然后命令行里就可以直接调用:
这里的Data.txt里面的数据要保证是gnuplot可识别的格式:
可以用记事本的替换功能,上面脚本在处理时直接声明了分隔符。