这个音频听起来就知道是什么了,无线电,用RX-SSTV工具,不知道怎么用的可以去看我的上一篇博客,BUUCTF-刷题记录-7
左上角存在一些有像是二维码的黑白块 但是并不是二维码,把白色块转成0,黑色转成1,得到
00110001001 10010001100 11001101000 01101010011 01100011011 10011100000将其转为字符串得到12345678,也就是flag
扫码得到
https://cn.bing.com/search?q=key不在这里&m=10210897103375566531005253102975053545155505050521025256555254995410298561015151985150375568&qs=n&form=QBRE&sp=-1&sc=0-38&sk=&cvid=2CE15329C18147CBA4C1CA97C8E1BB8C容易发现102、108、97、103就是16进制的flag,转成字符串即可,脚本如下
from urllib import parse s = "10210897103375566531005253102975053545155505050521025256555254995410298561015151985150375568" flag = "" i = 0 while(i <= len(s)): if int(s[i:i+3]) < 127: flag += chr(int(s[i:i+3])) i += 3 else: flag += chr(int(s[i:i+2])) i += 2 print(parse.unquote(flag)) # flag{5d45fa256372224f48746c6fb8e33b32}一个登陆的流量包,密码即为flag
可以发现其实6个灰色条的RGB的最后一位还是有点不一样的(QQ截图识色即可发现),将其转为字符即可得到flag
开着飞机,一直往上冲就可以拿到flag了
观察它的波形,发现了这么一段很有规律的东西,每个周期的东西都是一样的 搜索到这么一篇帖子,里面说到一个编码规则
一长一短:F 两短:0 两场:1然后进行翻译一下图中的波形图,得到
FFFFFFFF0001这个也就是flag了,提交即可
搜索得到文件中的内容是G语言,放到在线网站跑一下即可得到flag:flag{3d_pr1nt3d_fl49}。
打开音频,一股浓厚的电话音迎面而来,不过似乎有点杂音?用dtmf2num工具识别一下 得到
18688422216D09但是有杂音识别的不太准,对比频谱图 修复为
18684221609把18684221609发送到天璇Merak公众号得到flag
图片的内容给了个密码lovekfc,于是想着往有密码的图片隐写方向走,用Stegsolve工具进行通道分析的时候发现了点东西 想到使用lsb的一个有密码的隐写,即为cloacked-pixel-lsb工具,跑一下得到一个文件 内容为
PVSF{vVckHejqBOVX9C1c13GFfkHJrjIQeMwf}不过这个规律也是很奇怪 然后看到这个比赛叫做QCTF,不过也是很奇怪 做不出来了,后来搜索出来是叫做Nihilist密码,用脚本跑一下即可
import string enc = 'PVSF{vVckHejqBOVX9C1c13GFfkHJrjIQeMwf}' grid = 'LOVEKFC'+'ABDGHIJMNPQRSTUWXY' flag = '' for i in enc: if i in string.ascii_lowercase: index = grid.lower().index(i) flag += string.ascii_lowercase[index] continue if i in string.ascii_uppercase: index = grid.upper().index(i) flag += string.ascii_uppercase[index] continue flag += i print(flag) # QCTF{cCgeLdnrIBCX9G1g13KFfeLNsnMRdOwf}foremost分离出来半张二维码 来这个网站上面手撸一份然后扫码即可,最后得到flag{OQWIC_4DS1A_S034S}
usb的流量包,使用如下命令提取出来数据
tshark -r usb.pcapng -T fields -e usb.capdata | sed '/^\s*$/d' > usbdata.txt然后给其加上冒号,脚本如下
f=open('usbdata.txt','r') fi=open('out.txt','w') while 1: a=f.readline().strip() if a: if len(a)==16: out='' for i in range(0,len(a),2): if i+2 != len(a): out+=a[i]+a[i+1]+":" else: out+=a[i]+a[i+1] fi.write(out) fi.write('\n') else: break fi.close()然后解一下,脚本如下
mappings = { 0x04:"A", 0x05:"B", 0x06:"C", 0x07:"D", 0x08:"E", 0x09:"F", 0x0A:"G", 0x0B:"H", 0x0C:"I", 0x0D:"J", 0x0E:"K", 0x0F:"L", 0x10:"M", 0x11:"N",0x12:"O", 0x13:"P", 0x14:"Q", 0x15:"R", 0x16:"S", 0x17:"T", 0x18:"U",0x19:"V", 0x1A:"W", 0x1B:"X", 0x1C:"Y", 0x1D:"Z", 0x1E:"1", 0x1F:"2", 0x20:"3", 0x21:"4", 0x22:"5", 0x23:"6", 0x24:"7", 0x25:"8", 0x26:"9", 0x27:"0", 0x28:"\n", 0x2a:"[DEL]", 0X2B:" ", 0x2C:" ", 0x2D:"-", 0x2E:"=", 0x2F:"[", 0x30:"]", 0x31:"\\", 0x32:"~", 0x33:";", 0x34:"'", 0x36:",", 0x37:"." } nums = [] keys = open('out.txt') for line in keys: if line[0]!='0' or line[1]!='0' or line[3]!='0' or line[4]!='0' or line[9]!='0' or line[10]!='0' or line[12]!='0' or line[13]!='0' or line[15]!='0' or line[16]!='0' or line[18]!='0' or line[19]!='0' or line[21]!='0' or line[22]!='0': continue nums.append(int(line[6:8],16)) keys.close() output = "" for n in nums: if n == 0 : continue if n in mappings: output += mappings[n] else: output += '[unknown]' print('output :\n' + output)得到
[unknown]A[unknown]UTOKEY''.DECIPHER'[unknown]MPLRVFFCZEYOUJFJKYBXGZVDGQAURKXZOLKOLVTUFBLRNJESQITWAHXNSIJXPNMPLSHCJBTYHZEALOGVIAAISSPLFHLFSWFEHJNCRWHTINSMAMBVEXO[DEL]PZE[DEL]IZ'也就是
MPLRVFFCZEYOUJFJKYBXGZVDGQAURKXZOLKOLVTUFBLRNJESQITWAHXNSIJXPNMPLSHCJBTYHZEALOGVIAAISSPLFHLFSWFEHJNCRWHTINSMAMBVEXPZIZ也就是这个密码,链接,用上面的脚本跑一下,也就是这样子
# from ngram_score import ngram_score from math import log10 from pycipher import Autokey import re from itertools import permutations class ngram_score(object): def __init__(self,ngramfile,sep=' '): ''' load a file containing ngrams and counts, calculate log probabilities ''' self.ngrams = {} for line in file(ngramfile): key,count = line.split(sep) self.ngrams[key] = int(count) self.L = len(key) self.N = sum(self.ngrams.itervalues()) #calculate log probabilities for key in self.ngrams.keys(): self.ngrams[key] = log10(float(self.ngrams[key])/self.N) self.floor = log10(0.01/self.N) def score(self,text): ''' compute the score of text ''' score = 0 ngrams = self.ngrams.__getitem__ for i in xrange(len(text)-self.L+1): if text[i:i+self.L] in self.ngrams: score += ngrams(text[i:i+self.L]) else: score += self.floor return score qgram = ngram_score('quadgrams.txt') trigram = ngram_score('trigrams.txt') ctext = 'MPLRVFFCZEYOUJFJKYBXGZVDGQAURKXZOLKOLVTUFBLRNJESQITWAHXNSIJXPNMPLSHCJBTYHZEALOGVIAAISSPLFHLFSWFEHJNCRWHTINSMAMBVEXPZIZ' ctext = re.sub(r'[^A-Z]','',ctext.upper()) # keep a list of the N best things we have seen, discard anything else class nbest(object): def __init__(self,N=1000): self.store = [] self.N = N def add(self,item): self.store.append(item) self.store.sort(reverse=True) self.store = self.store[:self.N] def __getitem__(self,k): return self.store[k] def __len__(self): return len(self.store) #init N=100 for KLEN in range(3,20): rec = nbest(N) for i in permutations('ABCDEFGHIJKLMNOPQRSTUVWXYZ',3): key = ''.join(i) + 'A'*(KLEN-len(i)) pt = Autokey(key).decipher(ctext) score = 0 for j in range(0,len(ctext),KLEN): score += trigram.score(pt[j:j+3]) rec.add((score,''.join(i),pt[:30])) next_rec = nbest(N) for i in range(0,KLEN-3): for k in xrange(N): for c in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ': key = rec[k][1] + c fullkey = key + 'A'*(KLEN-len(key)) pt = Autokey(fullkey).decipher(ctext) score = 0 for j in range(0,len(ctext),KLEN): score += qgram.score(pt[j:j+len(key)]) next_rec.add((score,key,pt[:30])) rec = next_rec next_rec = nbest(N) bestkey = rec[0][1] pt = Autokey(bestkey).decipher(ctext) bestscore = qgram.score(pt) for i in range(N): pt = Autokey(rec[i][1]).decipher(ctext) score = qgram.score(pt) if score > bestscore: bestkey = rec[i][1] bestscore = score print bestscore,'autokey, klen',KLEN,':"'+bestkey+'",',Autokey(bestkey).decipher(ctext)发现flag
HELLOBOYSANDGIRLSYOUARESOSMARTTHATYOUCANFINDTHEFLAGTHATIHIDEINTHEKEYBOARDPACKAGEFLAGISJHAWLZKEWXHNCDHSLWBAQJTUQZDXZQPFflag即为最后一段字符串
JHAWLZKEWXHNCDHSLWBAQJTUQZDXZQPF一张png,很多个像素点,发现每一个像素点的RGB值不是255就是0,而且宽度是32,高度是12,高乘上个3也就是36了,然后255换成1,0换成0,再转个黑白块看看,可能是个二维码,脚本如下
from PIL import Image x1 = 36 y1 = 12 x2 = 36 y2 = 36 s = "" im1 = Image.open('file.png') im2 = Image.new("RGB", (x2,y2)) for i in range(0,x1): for j in range(0,y1): rgb = im1.getpixel((i,j)) if rgb[0] == 255: s += '1' else: s += '0' if rgb[1] == 255: s += '1' else: s += '0' if rgb[2] == 255: s += '1' else: s += '0' for i in range(0,x2): for j in range(0,y2): if s[i*36+j] == '0': im2.putpixel((i,j),(0,0,0)) else: im2.putpixel((i,j),(255,255,255)) im2.save('1.png')然后通过简单的旋转以及翻转,得到一个汉信码,这里的旋转和翻转也可以通过py来完成,代码如下
im2 = im2.transpose(Image.FLIP_LEFT_RIGHT) im2 = im2.transpose(Image.ROTATE_90)然后通过扫一扫软件进行扫码,得到flag{eed70c7d-e530-49ba-ad45-80fdb7872e0a} ,这个软件可能有点难找,给大家分享一下,链接,密码为a66b。
foremost分离出来一张jpg,也就是flag
跑一下即可
解压文件出来的时候有警告信息,熟悉的NTFS隐写流,扫一下,得到 词频分析得到
ZW5jcnlwdG8=base64解码得到
encrypto第一个文件下面存在一些空格和制表符 转为莫斯即为
.- ..- - --- -.- . -.--也就是
autokey用autokey密码对上面这段内容进行一个爆破 得到一个密码,暂时不知道有什么用 vim查看maybehint.txt可以很容易判断出来这是0宽度字符隐写,跑一下,得到 注意勾上这个,然后发现这么一段话 不过这个NTFS咱们早就发现了:(,浪费了一个线索,然后去百度搜索encrypto,得知这是一个加密软件,同时将secret文件后缀修改为.crypto,用上面得到的密码IANTHEPASSWD进行解密,但是不对,在linux下使用strings命令查看文件发现这个 去010中将其删去,再次进行解密,得到一张彩虹的图片 发现其黄色的RGB最后一位有所不同,将其转为字符串得到p?ssWd,同时foremost分离出来一个带有密码的压缩包,而密码尝试这个不对,所以中间的?应该是要咱们爆破的,爆破一下即可,得到密码p@sswd,这里使用工具爆破无果,我是手动爆破的。 下面有一些隐藏字符,不过没什么用 将上面一大段的字母钟的大写字母提取出来,也就是ALPHUCK,百度得到一个在线解密网址,删去几个大写字母进行解密得到flag