BUUCTF-刷题记录-8

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

容易发现10210897103就是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

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值