寫在前面:這裏是β-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
完結,撒花✿✿ヽ(°▽°)ノ✿