MISC
[MRCTF2020]摇滚DJ(建议大声播放
这个音频听起来就知道是什么了,无线电,用RX-SSTV
工具,不知道怎么用的可以去看我的上一篇博客,BUUCTF-刷题记录-7
[INSHack2018]Self Congratulation
左上角存在一些有像是二维码的黑白块
但是并不是二维码,把白色块转成0,黑色转成1,得到
00110001001
10010001100
11001101000
01101010011
01100011011
10011100000
将其转为字符串得到12345678
,也就是flag
key不在这里
扫码得到
https://cn.bing.com/search?q=key%E4%B8%8D%E5%9C%A8%E8%BF%99%E9%87%8C&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}
[CFI-CTF 2018]webLogon capture
一个登陆的流量包,密码即为flag
很好的色彩呃?
可以发现其实6个灰色条的RGB的最后一位还是有点不一样的(QQ截图识色即可发现),将其转为字符即可得到flag
[SCTF2019]Ready_Player_One
开着飞机,一直往上冲就可以拿到flag了
[HDCTF2019]信号分析
观察它的波形,发现了这么一段很有规律的东西,每个周期的东西都是一样的
搜索到这么一篇帖子,里面说到一个编码规则
一长一短:F
两短:0
两场:1
然后进行翻译一下图中的波形图,得到
FFFFFFFF0001
这个也就是flag了,提交即可
[INSHack2019]gflag
搜索得到文件中的内容是G语言,放到在线网站跑一下即可得到flag:flag{3d_pr1nt3d_fl49}
。
[MRCTF2020]寻找xxx
打开音频,一股浓厚的电话音迎面而来,不过似乎有点杂音?用dtmf2num
工具识别一下
得到
18688422216D09
但是有杂音识别的不太准,对比频谱图
修复为
18684221609
把18684221609
发送到天璇Merak
公众号得到flag
[QCTF2018]X-man-Keyword
图片的内容给了个密码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}
Beautiful_Side
foremost分离出来半张二维码
来这个网站上面手撸一份然后扫码即可,最后得到flag{OQWIC_4DS1A_S034S}
[XMAN2018排位赛]AutoKey
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
HELLOBOYSANDGIRLSYOUARESOSMARTTHATYOUCANFINDTHEFLAGTHATIHIDEINTHEKEYBOARDPACKAGEFLAGISJHAWLZKEWXHNCDHSLWBAQJTUQZDXZQPF
flag即为最后一段字符串
JHAWLZKEWXHNCDHSLWBAQJTUQZDXZQPF
[网鼎杯 2020 青龙组]虚幻2
一张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
。
[INSHack2017]hiding-in-plain-sight
foremost分离出来一张jpg,也就是flag
[MRCTF2020]小O的考研复试
跑一下即可
[NPUCTF2020]碰上彩虹,吃定彩虹!
解压文件出来的时候有警告信息,熟悉的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