CTF做題總結(一)


ctf做題總結一

上個周做了一道MISC題和兩道Crypto題。感覺還是總結一下比較好,畢竟做題時查了很多大佬的博客和一些知識點。

1、Crypto-哈夫曼樹和哈夫曼編碼

題目下載

剛看到這道題時我毫無頭緒。畢竟在寫這篇博客時,還沒有學過數據結構。而哈夫曼樹是數據結構裏的一個重要部分。於是我便在百度上搜索有關哈夫曼樹和哈夫曼編碼的知識。。。。。。。。

哈夫曼樹

哈夫曼最大的目的是爲了解決當你遠距離通信(電報)的數據傳輸的最優化問題

路徑:樹中一個結點到另一個結點之間的分支序列構成兩個結點間的路徑
路徑長度:路徑上的分支數目
樹的路徑長度:樹根到每個結點的路徑長度的和
結點帶權路徑長度:結點到樹根的路徑長度與結點的權的乘積
樹的帶權路徑長度:樹中所以葉子結點的帶權路徑長度之和(WPL)

哈夫曼編碼

學習完這些知識點後,我對哈夫曼樹和哈夫曼編碼有了大致的瞭解,就是找最優二叉樹,然後哈夫曼編碼就是根據每個字母的出現頻率不同,按照它們的權值進行構造哈夫曼樹。將所有權值左分支改爲0,右分支改爲1,得到相應字符的的傳輸數據

然後,下載解壓下載的題目文件,發現一個txt文件,打開後

果然,是哈夫曼編碼,由於我現在的編程能力,寫不出有關的編碼腳本。所以我畫了一個哈夫曼樹

根據txt文件,我猜想前五位編碼應該是flag{,最後一位是**},然後根據這六位編碼,調整最底下的g、l、{、}**的位置。然後得到每個字符的分配權值:

a:000

d:10(或01)

g:00101

f:110

l:00111

0:111

5:01(或10)

{:00100

}:00110

然後把txt文件裏的0和1按照上述權值進行分隔

然後比對每個字符的權值,對分隔好的0和1,進行編碼,最終得到兩個結果

然後最終答案就是其中的一個啦!!!!

2、Crypto-滴答滴答

題目下載

這道題題目沒有給任何提示,下載文件,發現並不能打開和用winrar解壓文件。於是我便選擇用notepad++打開

很顯然這是摩斯電碼,進行解碼得到

發現第一個斜槓前有一串特別的字母MORSEISCOOLBUTBACONISCOOLER彷彿看不太懂,寫成小寫字母morseiscoolbutbaconiscooler很明顯,這句話的意思是“摩斯是酷的,但是培根是更酷的”,那麼接下來就應該進行培根解密,直接解密,發現不行。查了查培根加密的格式發現,並沒有斜槓**“/”**,於是我用notepad++的替換功能把所有的斜槓去掉,然後培根解密得到

"DO YOU KNOW THE FOUR FENCE ZGIAHYANAUOZNXWI"用百度翻譯的意思是“你知道四道柵欄嗎?”,可以想到接下來是柵欄密碼解密,且每組字數爲4。我把所有字符進行解密,發現並沒有解出有意義的字符。所以我把“ZGIAHYANAUOZNXWI”進行柵欄解密,最後得到

很顯然最終結果出來了,下面進行提交,發現錯誤。這就應該是格式的問題了,調過之後成功提交了。。

3、MISC-TTL字段

題目下載

從題目中,我們可以知道這道題是TTL字段。然而對此我有點懵,從來沒有接觸過它。於是我便查有關資料和一些大佬的博客

下載解壓題目文件,發現ttl.txt文件,打開發現ttl.txt中的ttl只有4個值63,127,191,255

寫出他們的二進制表示後發現只有最高兩位不同,63-00111111、127-01111111、191-10111111、255-11111111。於是把4個值替換成00、01、10、11如果傳輸4個就是一字節,取前面的2位組成8位,對照二進制字母表,可以發現前面是ffd8,jpg圖片標誌

因爲這個腳本我寫不出來,於是用了大佬的腳本

fp = open('ttl.txt','r')
a = fp.readlines()
p = []
for i in a:
    p.append(int(i[4:]))
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
# print(s)

import binascii
flag = ''
for i in range(0,len(s),8):
    flag += chr(int(s[i:i+8],2))
flag = binascii.unhexlify(flag)
wp = open('res.jpg','wb')
wp.write(flag)
wp.close()
#00111111 63
#01111111 127
#10111111 191
#11111111 255

然後把ttl.txt和這個腳本(腳本文件名我寫成了1.py)放在同一路徑,在cmd命令行輸入命令python 1.py生成了一個fi.txt文件,打開

這是16進制編碼,所以把這些編碼粘貼在winhex裏生成一個jpg文件,打開

發現只有二維碼的一部分,在最後轉換出的結果中,發現了六個jpg的文件頭(ffd8),說明這就是六張圖片,用foremost直接分開(或用strgsolve分離圖片)就好了,之後用ps(或ppt)拼在一塊

掃描結果如下所示:

應該就是AutoKey(自動密鑰密碼)那個加密,找了個在線網站解密得到

得到最終flag了!!!!!

這便是我上週做題的總結,小白進階ing,歡迎大佬批評指正!

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