MRCTF

寫在前面:這裏是β-AS,是被這次比賽虐的體無完膚的菜雞,通過這次比賽學到了很多知識,包括各種工具和命令(渣渣路過)雖然很多都是知識盲區,ε=(´ο`*)))唉還是我刷的題不夠多

還有一個體會是:爲什麼壓縮包沒有忘記密碼這個選項(o(╥﹏╥)o)

CYPTO

。1古典密碼知多少

圖片

噹噹噹!!首先出現的是古典密碼——豬圈及其變形(聖武士密碼),還有宇宙的信號~

豬圈咱就不說了,都是老熟人了

附上銀河信號的解碼圖

圖片

所以結果是FGCPFLIRTUASYON

此時你興致沖沖的提交,發現:哎?他怎麼不對?他爲什麼不對?題錯了嗎

通過圖片中的提示fence是柵欄,我們通過柵欄解碼得到FLAGISCRYPTOFUN

此時

所以最後答案是

MRCTF{CRYPTOFUN}

(一開始提交flag是一直是不成功,靈光一閃才把flagis刪掉[滄桑])

。2天干地支+甲子

甲戌 甲寅 甲寅 癸卯 己酉 甲寅 辛丑

百度天干地支可以得到上文順序

圖片

對照該表,得到以下數字 11515140465138

接下來就。。。一頓操作猛如虎,一看()後面不說,懂得都懂

就很難辦,突然,看到題目天干地支+甲子,

那麼有兩種可能,一個就是甲子01,另一個是一甲子60;

要麼就是在最後加,要麼就是每個數都加上01。

將01添上後,並沒有什麼卵用,所以

嘗試每個數都+60,即711111111001061119

這樣看可能還看不出什麼那我們吧每個天干地支的數字分開71 111 111 100 106 111 98

就很眼熟,是十進制轉ASCII,不多,我們就收工找出來

Goodjob

所以MRCTF{Goodjob}

。3keyboard

6 666 22 444 555 33 7 44 666 66 3

(要命)後來知道少打了個3

這串數字啥也不像,又提到了keyboard,所以猜是拼音九鍵,

即mobilephone

最後flag是MRCTF{mobilephone}

。4

MISC

。1ezmisc

圖片

圖片很乾淨,照例屬性沒啥特別的,用010開開,

圖片

發現5003193明顯小於49444154,所以懷疑改了高度,

MRCTF {1ts_vEryyyyyy_ez!}

。2CyberPunk

打開發現是一個運行軟件,

圖片

上面顯示2020.9.17(正好是我生日第二天2333

回到正題,第二句顯示當到2020.9.17我會把flag給你,

所以我們把電腦上時間改成2020.9.17就可以啦,最後flag是

圖片

啦啦啦bingo

。3尋找xxx

dtmf音,有點難爲我,沒有找到非常適合的解決辦法(標紅,亟待解決)

不過有一個手工方法

用audacity打開該音頻,換成頻譜圖

圖片圖片

粉紫色的即爲頻率,選中一小段,點 分析,找到該段峯值,由於是雙音,即可確定內容

(附對照表)

圖片圖片

搜索微信號,將手機號發給他,flag就到手啦

圖片圖片

。4千層套路

傳統套娃題

寫個腳本跑一下

#coding=utf-8
import os
import zipfile


orginal_zip = "0573.zip"
while True:
    tag = orginal_zip
    orginal_zip = zipfile.ZipFile(orginal_zip)
    for contents in orginal_zip.namelist():
        password = contents[0:contents.find('.')]
    print password
    orginal_zip.setpassword(tag[:-4])
    try:
        orginal_zip.extractall()
    except:
        break
    if(len(tag)>6):
        os.system("rm "+tag)
    orginal_zip=password+".zip"

然後出來一個qr.txt,打開發現是(255,255,255)和(0,0,0)
合理猜測是個二維碼,所以繼續寫個代碼跑一跑(用PIL就可以

from PIL import Image

x = 200    #x座標  通過對txt裏的行數進行整數分解
y = 200    #y座標  x * y = 行數

im = Image.new("RGB", (x, y))   #創建圖片
file = open('C:\\Users\\60120\\Desktop\\qr.txt')    #打開rbg值的文件

#通過每個rgb點生成圖片

for i in range(0, x):
    for j in range(0, y):
        line = file.readline().replace("("," ").replace(")","")  #獲取一行的rgb值
        rgb = line.split(", ")  #分離rgb,文本中逗號後面有空格
        im.putpixel((i, j), (int(rgb[0]), int(rgb[1]), int(rgb[2])))    #將rgb轉化爲像素

im.show()   #也可用im.save('flag.jpg')保存下來

簡簡單單拿到flag:MRCTF{ta01uyout1nreet1n0usandtimes}

。5不眠之夜

拿到這個文件,平常解壓,打開文件夾。。。。之後。。。嗯。。wtf石化當場,這是啥???

放一張圖,你們感受一下

圖片

真就不眠之夜唄

啊啊啊啊啊抓狂

仔細分析一下這些圖片,發現flag應該是在圖上寫着,然後把圖片分割了

那就好。。。那也不好辦啊,121張,得拼老久啊歪(方法一)

以下兩個方法來自V&N wp(https://mp.weixin.qq.com/s/TEnuxcUV1SHiW4VOWQK9eQ)

方法二:

from PIL import Image
import os
import pandas as pd
import difflib

imgs = os.listdir('.')
img_info = pd.DataFrame(columns=['top', 'left', 'right', 'buttom'], index=[])
for img in imgs:
if 'jpg' not in img:
continue
piece = Image.open(img)
piece.convert('L')
x_max = piece.size[0]
y_max = piece.size[1]

top_str = ''
left_str = ''
right_str = ''
buttom_str = ''
for i in range(0, x_max):
top_str += chr(piece.getpixel((i, 0))[0])
buttom_str += chr(piece.getpixel((i, y_max - 1))[0])
for i in range(0, y_max):
left_str += chr(piece.getpixel((0, i))[0])
right_str += chr(piece.getpixel((x_max - 1, i))[0])

img_info = img_info.append(pd.Series({'top': top_str, 'left': left_str, 'buttom': buttom_str, 'right': right_str}, name=img))

img_info.to_csv('res.csv')

img_combine = pd.DataFrame(columns=['top', 'left', 'right', 'buttom'], index=[])

max_similiar = {
'top': '0',
'buttom': '0',
'left': '0',
'right': '0',
}


def strdiff(str1, str2):
return difflib.SequenceMatcher(None, str1, str2).quick_ratio()


for index1, row1 in img_info.iterrows():
for name in img_info.columns:
for index2, row2 in img_info.iterrows():
if index1 == index2:
continue

if name == 'top':
contrast = 'buttom'
elif name == 'buttom':
contrast = 'top'
elif name == 'left':
contrast = 'right'
elif name == 'right':
contrast = 'left'

if max_similiar[name] == '0' or strdiff(row1[name], row2[contrast]) > strdiff(row1[name], img_info.loc[max_similiar[name], contrast]):
max_similiar[name] = index2
#if strdiff(row1[name], img_info.loc[max_similiar[name], contrast]) < 0.85:
# max_similiar[name] = '0'
img_combine = img_combine.append(pd.Series(max_similiar, name=index1))

img_combine.to_csv('final_res.csv')

該代碼爲輔助拼圖(不懂代碼的弟弟並沒有看懂
圖片

方法三:用gaps拼圖,先將120張小圖合併成一張大圖,可以用montage命令實現

magick montage *jpg -tile 10x12 -geometry 200x100+0+0 out.jpg

這個要在cmd下實現,會在同目錄下生成一張如下圖片
圖片

得到這樣一張圖片,之後再用缺口跑一下就能還原整個拼圖

拖到Kali裏,執行下列命令

gaps --image=out.jpg --generations=40 --population=120 --size=100

圖片

所以最後flag如圖所示

。6ISS

這個。。。嗯。。。 第一次見,無線電傳輸

直接mmsstv(電腦)或者xdsopl.robot36.apk(手機)就可

圖片

u1s1 sstv真難聽

。7pyflag

拿到題目題目解壓發現三張小姐姐的圖片,屬性沒有什麼特別的,用010打開看看

發現每一張圖片都有部分多餘的

圖片

猜測是一個壓縮包分成了三份,於是我們把它拼起來就好啦

圖片

拼完之後記得把壓縮包多的東西刪掉

圖片(記得有三個喲~

保存爲zip文件打開後,發現有兩個文件:hint和flag,但是都加密了,嘗試修改010後,發現並不是僞加密,到了遇事不決的時候了,暴力破解走一走 最後的到密碼是1234

打開hint提示是base家族並給出了範圍

圖片

打開flag

原文:

G&eOhGcq(ZG(t2*H8M3dG&wXiGcq(ZG&wXyG(jtG&eOdGcq+aG(t5oG(jqG&eIeGcq+aG)6Q<G(jrG&eOdH9<5qG&eLvG(jsG&nRdH9<8rG%++qG%__eG&eIeGc+|cG(t5oG(jsG&eOlH9<8rH8C_qH9<8oG&eOhGc+_bG&eLvH9<8sG&eLgGcz?cG&3|sH8M3cG&eOtG%_?aG(t5oG(jtG&wXxGcq+aH8V6sH9<8rG&eOhH9<5qG(<E-H8M3eG&wXiGcq(ZG)6Q<G(j~tG&eOtG%+<aG&wagG%__cG&eIeGcq+aG&M9uH8V6c

G&eOlH9<8rG(<HrG(j~qG&eLcH9<8sG&wUwGek2)

第一層:base85

475532444B4E525549453244494E4A57475132544B514A54473432544F4E4A5547515A44474D4A5648415A54414E4257473434544B514A5647595A54514D5A5147553444474D5A5547453355434E5254475A42444B514A57494D3254534D5A5447555A444D4E5256494532444F4E4A57475A41544952425547343254454E534447595A544D524A5447415A55493D3D3D

第二層:base16

GU2DKNRUIE2DINJWGQ2TKQJTG42TONJUGQZDGMJVHAZTANBWG44TKQJVGYZTQMZQGU4DGMZUGE3UCNRTGZBDKQJWIM2TSMZTGUZDMNRVIE2DONJWGZATIRBUG42TENSDGYZTMRJTGAZUI===

第三層:base32

54564A4456455A3757544231583046795A5638305833417A636B5A6C593352665A47566A4D47526C636E303D

第四層base16

TVJDVEZ7WTB1X0FyZV80X3AzckZlY3RfZGVjMGRlcn0=

第五層:base64

MRCTF{Y0u_Are_4_p3rFect_dec0der}

bingo~成功

(不過我沒有想到base48是真的有用了,還是。。。。

。8unravel

拿到題目解壓,出來一張圖片,一段音頻和一個壓縮包

話不多說,開衝

對圖片進行分析,屬性沒有隱藏的,010打開看看,發現他藏了一個圖片

直接上Kali,分離出一個張名爲aes.png(劃重點,要考的)的圖片,

圖片

然後。。。這張圖片就沒有然後了,不過合理猜測這個Tokyo應該是個密鑰之類的重要東西

下面我們對音頻進行分析,打開粗略聽一遍,別說還挺好聽,還略微有點耳熟,音頻名字明顯提示 Look_at_the_file_ending

圖片

成功get到key,可是看着一串不像base64,也不像十六進制的,(爲了解碼我還特地去扒了東京喰種的音樂和人物,甚至認識了那張圖片裏的金木研和英良,後來就誤打誤撞解除了密碼。不過!!!!人家有依據的,看前面考點,是什麼!!!)

於是聯想到之前在死衚衕裏的圖片。。。!!是aes,Tokyo就是個key(http://tool.chinaz.com/tools/textencrypt.aspx

CCGandGulu !!!成功得到壓縮包密碼

又是一段音頻,打開並沒有什麼特別

(敲黑板,劃重點了)然是一個新工具:silenteye 用這個過一遍音樂就可以啦

圖片

(如有需要,可以找我哈哈哈哈)

。9你能看懂音符嗎

這個題目下載下來,很平常的就打開壓縮包

然然後。。。。等等,好像有哪裏不大對的亞子

嗯。。。壓縮包壞了嗎?果斷010打開,找一個正常的rar文件對比一下圖片

果然是的,把前面兩個十六進制顛倒一下順序就可以啦

正常打開後,發現,誒???怎麼什麼都沒有啊歪(吐血

圖片

又想到之前師傅講doc文件也是一個壓縮包,他會通過某種神祕的函數使得文字消失

所以我們把它改成zip格式,重點觀察一下,果不其然,被我們找到了

圖片

找到是找到了,可是。。。。我根本看不懂啊歪(出題人在那,有沒有學過音樂(威脅))

百度音符解碼,誒!被我發現了

https://www.qqxiuzi.cn/bianma/wenbenjiami.php?s=yinyu

拿去解密,不用謝

MRCTF{thEse_n0tes_ArE_am@zing~}

。10Hello_Misc

打開文件,正常的壓縮包和一張png圖片

壓縮包加密了,然後我們分析一下圖片,屬性沒啥,010打開發現還有一個壓縮包,話不多說,直接上Kali,分離出一個壓縮包,但是有密碼,經過暴力破解無果後,只能從圖片上尋找信息

然後感覺這張圖片一直很特別,只有紅藍兩色

故可以想到將圖片中的紅色和藍色像素塊轉換成 0 & 1 序列並重新構建,以此可以還原得到一張圖片(標紅,未見過的新思路)

所以利用咖啡裏的紅色通道分離圖片,保存爲png,成功得到壓縮包密碼圖片

圖片

解壓出的txt打開來看是127 255 63 191四個數字重複

將這四個數字轉化爲二進制,可以看到這四個數字的二進制形式中 只有最高兩位的二進制數不同 ,將其最高兩位提取出來組合在一起轉化爲ASCII,可以得到rar密碼。(標紅,未見新思路)

fp = open('D:\\404NOTFOUND\\β-AS\\MRCTF\\hello\\hello\\00000043\\out.txt','r')
a = fp.readlines()
p = []
for i in a:
 p.append(int(i))

s = ''
for i in p:
 if i == 63:
     a = '00'
 elif i == 127:
     a = '01'
 elif i == 191:
     a = '10'
 elif i == 255:
     a = '11'
 s += a

import binascii

result = ''
for i in range(0,len(s),8):
 result += chr(int(s[i:i+8],2))

print result

注意這是一段python2的代碼
跑出來結果是!!!

rar-passwd:0ac1fe6b77be5dbe

打開加密的flag壓縮包,得到一個壓縮包,但是看着很像doc,於是修改後綴名,

將文件內容全選改爲深色,可以看到在文檔的最下方藏有幾串字符

圖片

ps:如果用word打開的話可以看到有最後的換行符存在,可以判斷文檔中隱藏了內容

將每一長串的字符用base64解碼,可以得到6行只由 0 & 1 組成的字符串

在文檔左側(word和WPS都可)查找字符就可以觀察到flag,包裹上 MRCTF{} 就是最終的flag

圖片

所以flag是

MRCTF{He1Lo_mi5c〜}

二解:

圖片

from PIL import Image
import bitstring

im = Image.open('try to restore it.png')
width = im.size[0]
height = im.size[1]
pim = im.load() # 讀取圖片的像素信息
bin_result = ''
for h in range(height):
    for w in range(width):
        if pim[w,h][0] == 255: # 判斷是否是紅色(R,G,B)[0]表示第一通道
            bin_result += '1'
        else:
            bin_result += '0'

# print bitstring.BitArray(bin=bin_result).bytes.encode('hex')
with open('result.png','wb') as f:
    f.write(bitstring.BitArray(bin=bin_result).bytes)

注:由於剛開始無法確定長寬的內外循環關係及紅藍對應關係,故可以進行多次嘗試

還原得到圖片,看圖獲得解壓zip包的密碼

(生成該腳本

from PIL import Image
import bitstring

with open('1.png','rb') as f:
    bitcon = bitstring.Bits(f)
    im = Image.new('RGB',(1024,780),(255,0,0))
    pim = im.load()
    for i,val in enumerate(bitcon.bin):
        if val == '0':
            pim[i%1024,i/1024] = (0,0,255)
    im.save('red_blue.png')

本題有參考這位大佬的博客 Ga1@xy

http://www.ga1axy.top/index.php/archives/13/#hellomiscworld%EF%BC%81

完結,撒花✿✿ヽ(°▽°)ノ✿

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章