第三届4.29“安恒杯”网络安全技术大赛初赛wirteup心得-MISC

时间:2021-08-05 16:45:53

writeup地址:

http://www.easyaq.org/info/infoLink?id=851212685&from=groupmessage&isappinstalled=0

 

寂静之城

http://blog.sina.com.cn/s/blog_bb4702370102w4oa.html

一张图诠释我的内心

第三届4.29“安恒杯”网络安全技术大赛初赛wirteup心得-MISC

 

MISC 250 我爱Linux

图片题,了解文件的格式很重要,,此外,这种数据格式是Python的序列化文件

第三届4.29“安恒杯”网络安全技术大赛初赛wirteup心得-MISC

FF D9是结尾,也就是说,后面都是序列化文件,其中 80 03最好不要包进去,把下面的数据保存,我这里保存为dump1.pickle文件了

然后去读文件,得到结果:

提取出来都是这个:(以u或U开头的字符串表示unicode字符串,Unicode是书写国际文本的标准方法。如果你想要用非英语写文本,那么你需要有一个支持Unicode的编辑器。类似地,Python允许你处理Unicode文本——你只需要在字符串前加上前缀u或U)

第三届4.29“安恒杯”网络安全技术大赛初赛wirteup心得-MISC一共30行这样的数据。每行有0-100个这样数据,

打印坐标得到结果:

第三届4.29“安恒杯”网络安全技术大赛初赛wirteup心得-MISC

代码:

第三届4.29“安恒杯”网络安全技术大赛初赛wirteup心得-MISC第三届4.29“安恒杯”网络安全技术大赛初赛wirteup心得-MISC
  1 import pickle
  2 
  3 with open('dump1.pickle', 'rb') as f:
  4 
  5     data = pickle.load(f)
  6 
  7 #for d in data:
  8 
  9 #    print(d)
 10 print len(data)
 11 new_data = list()
 12 
 13 for i in range(len(data)):
 14 
 15     tmp = [ ' ']*100
 16 
 17     new_data.append(tmp)
 18 
 19 for i, d in enumerate(data):
 20 
 21     for m in d:
 22 
 23         new_data[i][m[0]] = m[1]
 24         #print m;
 25 
 26 for i in new_data:
 27 
 28     print(''.join(i))
我爱linux

MISC 450 黑科技

这题挺变态的,给图片,然后根据图片得到声音,读出flag,第一想找工具,很难;第二,想编程,不会,转一下答案说明:

题目描述

据说国外有黑科技可以通过振动还原声音,要不大家也试试?已知framerate=48000, nframes=1194240

解题过程:

下载附件,打开图片,如下:

第三届4.29“安恒杯”网络安全技术大赛初赛wirteup心得-MISC

根据题目给的参数,和图片上的图形,一眼就知道是什么意思了,这是一段音频左右声道的音轨图,我们的意图是想让选手根据音轨图和参数编程还原出音频,flag就在音频中,出题灵感来自于《用Python做科学计算》中这本书中!就在实战篇第一章!

下面是从音频生成图片的代码:

第三届4.29“安恒杯”网络安全技术大赛初赛wirteup心得-MISC第三届4.29“安恒杯”网络安全技术大赛初赛wirteup心得-MISC
  1 import wave
  2 
  3 import pylab as pl
  4 
  5 import numpy as np
  6 
  7 # 打开WAV文档
  8 
  9 f = wave.open(r”flag.wav”, “rb”)
 10 
 11 # 读取格式信息
 12 
 13 # (nchannels, sampwidth, framerate, nframes, comptype, compname)
 14 
 15 params = f.getparams()
 16 
 17 nchannels, sampwidth, framerate, nframes = params[:4]
 18 
 19 print(params)
 20 
 21 # 读取波形数据
 22 
 23 str_data = f.readframes(nframes)
 24 
 25 f.close()
 26 
 27 #将波形数据转换为数组
 28 
 29 wave_data = np.fromstring(str_data, dtype=np.short)
 30 
 31 wave_data.shape = –1, 2
 32 
 33 wave_data = wave_data.T
 34 
 35 time = np.arange(0, nframes) * (1.0 / framerate)
 36 
 37 # 绘制波形
 38 
 39 pl.subplot(211)
 40 
 41 pl.plot(time, wave_data[0])
 42 
 43 pl.subplot(212)
 44 
 45 pl.plot(time, wave_data[1], c=“g”)
 46 
 47 pl.xlabel(“time (seconds)”)
 48 
 49 pl.show()
 50 
黑科技。。

     不用改,可以直接用,将音频转化为图片。但是逆向回去,将图片转化为音频,难度确实有点大,首先要图像识别,得到每一个点的坐标,再根据给定的帧率,参数还原出大概的音频,听出flag。由于代码行数较多,这里不提供代码,有兴趣的同学可以自己查找相关资料,编写解题代码。