源魯杯2024[Round 3] CheckImg

akaashi_keiji發表於2024-11-02

新思路:十六進位制錯位恢復

新知識:DNA編碼

下載檔案,是一張圖片,010、屬性、pngcheck都沒有發現資訊,用stegslove開啟檢視,

在red0通道發現圖片下面有明顯的隱寫,後面的green0有提示(這圖片真的好大,一整個螢幕看不到完整的)

Green0通道的整句話應該是attention to details,先存一下red0的東西

一看感覺就是十六進位制,放010看一看

是亂碼,卡了

看了官方wp,仔細一看前面的四個兩位組合的就是png檔案頭的數字和字母89 50 4E 47,它錯位變成了05 98 74 E4,可以用指令碼恢復一下

又出問題了,指令碼只用一小段可以正常恢復但是字元一長就恢復不了,好吧,直接分成10個檔案一個個轉,再接起來得到圖片

看著是和題目一樣的圖片,pngcheck說有問題但是我去010不知道怎麼改又嘗試了zsteg,發現了一串大寫字串

字元只有GCAT四個字母組成,猜一手00,01,10和11,A轉00,C轉01,G轉10,T轉11試試看

不,是亂碼

又不會寫了

最後去看了官方wp,有個DNA解碼,給了一個指令碼

import sys

bin_dna = {'00':'A','10':'C','01':'G','11':'T'}
mapping = {
        'AAA':'a','AAC':'b','AAG':'c','AAT':'d','ACA':'e','ACC':'f', 'ACG':'g','ACT':'h','AGA':'i','AGC':'j','AGG':'k','AGT':'l','ATA':'m','ATC':'n','ATG':'o','ATT':'p','CAA':'q','CAC':'r','CAG':'s','CAT':'t','CCA':'u','CCC':'v','CCG':'w','CCT':'x','CGA':'y','CGC':'z','CGG':'A','CGT':'B','CTA':'C','CTC':'D','CTG':'E','CTT':'F','GAA':'G','GAC':'H','GAG':'I','GAT':'J','GCA':'K','GCC':'L','GCG':'M','GCT':'N','GGA':'O','GGC':'P','GGG':'Q','GGT':'R','GTA':'S','GTC':'T','GTG':'U','GTT':'V','TAA':'W','TAC':'X','TAG':'Y','TAT':'Z','TCA':'1','TCC':'2','TCG':'3','TCT':'4','TGA':'5','TGC':'6','TGG':'7','TGT':'8','TTA':'9','TTC':'0','TTG':' ','TTT':'.'}

def bin_2_code(string):
    string = string.replace(" ","")
    string = string.replace("\n","")
    final=""
    for j in range(0,len(string),2):
        final+=bin_dna[string[j:j+2]]
    return final

def decode_dna(string):
    final=""
    for i in range(0,len(string),3):
        final+=mapping[string[i:i+3]]
    return final

print(decode_dna("GCAGTTCTGCTGGGGGGTGTACTAGAGTGACTCGTTGCAGTTGTATACGCATATCTGGTGGGGGTATCCCTTGATCGTGCACTGTCCTAAGCAGCAGAAGAGTCCCTGGCAGCTCTATAAGATCTTCTAGTGGGGGCTGTAGCAGAGGTTCGGGTTGAGGCTCGTGTCGCAGTTGCACTGTCCGTCTATGTGGCAGTTGACGTGTAAGGTTATTAAGAAGGTGAGGTTGTAGTTGTAGCTGATTATGATCTTGAGGGGGCAGCTGAGTATGCCCTCGAGGCTGCAGACGATGGGTCCCTTGTAGGGGCATAAGATGTTCGTGTGGTAGTCGTAGAGGCACTTGCCGTTGCGGTAGCACTTGCAGCTCTTCTGGAAGTTTATGTTGCAGTTGAACTGGCGGTAGATTAAGATGCGTATCTCGCGGTTGTAGTCGATGCTCTCGTGGGGGGGGTAGAAGAGTGAGCACTGTAGGCTTCCGCCGCATAGTCCCTCCTGGTCGCATAAGCATGACTGCTGGGGGTCGTACTAGAAGATCTCCTTGCGGTGTCCGAGGATCGGTCGCTGCTAGTCGCAGTTGCAGTTGCTCTGTAAGTGTCCCTAGAGCTTGAAGTGTAGGTTGCACGTGAGGGTGATCTGGCGGGTGTAGGTGAGGCTGCACTGTCCGTCGCAGAAGCACGGTATGTGTGCGCGTCCGTGGATGTTCGGGTTCGGGTGGTAGCCGCACTTCTCCTTGCGGGTGCAGAAGATCTTGCGCTCGAGGTCGGTTGA"))

去搜了一下沒有找到這個指令碼對應的字母按照ACTG編碼的對應表,有大佬知道或者瞭解的歡迎指教。那就直接用這個

指令碼執行出來得到字串

KVEEQRSCI5DVKVSXKZEUQS2FJBKE2WKKGI2EKNCWJFCUQNSKIVAVINBTKVKE2TZUKVHUWRZWGRIVSVSNJZJFIQKNIZLDINKHJQ2FSQKWJVBUSTSIKFLVMSKFKNFEGVZVKVGEMSJWJMZDMVSTJNDUQQSGI5KEYN2LKY2DETKWK5EEQTSCGJDFMU2IJA3ECTKVKVNEWU2CIFGUYVKBIRJEMRSRINKE2TKGKAZU6M2UJVAVAUSLKFDFMRKGJFMDITR5

套娃解密,看來密碼學還得練

一路解密分別是base32,rot13,base32,base85,base58,base62最後得到flag

總結:一路解題下來分別有lsb隱寫、十六進位制錯位恢復(對檔案頭的熟悉程度)、DNA隱寫(新)、base32、rot13、base85、base58、base62