日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

记一次院赛CTF的Crypto和Re题(入门)

發布時間:2024/9/30 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 记一次院赛CTF的Crypto和Re题(入门) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • Crypto
    • easy crypto
    • bAcOn
    • 敵軍密報
  • Re
    • easy re
    • 跳到對的地方
    • 簡單的XOR
    • 多密碼表替換

Crypto

easy crypto

首先,這個可以很容易的看出這是一個base64加密一串密文,然后用base64解密后是


可以看出這就是flag的格式,所以一般就是凱撒加密了,但是因為有花括號下劃線之類的,所以是凱撒的一個變形rot13

bAcOn

這題是給了一個字符串baCoNBacoNbaconbACoNbacOnbAconBacOnbacoNbaconbacOnbACOnbACoN
可以看出給了我們的提示就是bacon,培根。
我這邊的話是改了一個網上找的python代碼,然后直接跑出來了。

因為培根密碼是有兩張密碼表,同時因為大小寫的話也有種情況,解出來應該是有四種(我這邊另外一種以小寫字母為b以大寫字母為a的顯示結果沒有放出來)

import re alphabet = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'] first_cipher = ["aaaaa","aaaab","aaaba","aaabb","aabaa","aabab","aabba","aabbb","abaaa","abaab","ababa","ababb","abbaa","abbab","abbba","abbbb","baaaa","baaab","baaba","baabb","babaa","babab","babba","babbb","bbaaa","bbaab"] second_cipher = ["aaaaa","aaaab","aaaba","aaabb","aabaa","aabab","aabba","aabbb","abaaa","abaaa","abaab","ababa","ababb","abbaa","abbab","abbba","abbbb","baaaa","baaab","baaba","baabb","baabb","babaa","babab","babba","babbb"] def decode():upper_flag = False # 用于判斷輸入是否為大寫e_string = input("please input string to decode:\n")e_string=change(e_string)print(e_string)if e_string.isupper():upper_flag = Truee_string = e_string.lower()e_array = re.findall(".{5}",e_string)d_string1 = ""d_string2 = ""for index in e_array:for i in range(0,26):if index == first_cipher[i]:d_string1 += alphabet[i]if index == second_cipher[i]:d_string2 += alphabet[i]if upper_flag:d_string1 = d_string1.upper()d_string2 = d_string2.upper()print ("first decode method result is:\n"+d_string1)print ("second decode method result is:\n"+d_string2)return def change(s):str=""for i in s:if(i>='a' and i<='z'):str+="a"if(i>='A' and i<='Z'):str+="b"return str def change2(s):str=""for i in s:if(i>='a' and i<='z'):str+="b"if(i>='A' and i<='Z'):str+="a"return str if __name__ == '__main__':print ("\t\tcoding by qux")while True:print ("\t*******Bacon Encode_Decode System*******")print ("input should be only lowercase or uppercase,cipher just include a,b(or A,B)")print ("1.encode\n2.decode\n3.exit")s_number = input("please input number to choose\n")if s_number == "1":encode()input()elif s_number == "2":decode()input()elif s_number == "3":breakelse:continue

敵軍密報


題目展示就是這樣的,一個密文,以及一個文件可以下載。這邊這個文件用記事本打開稍微看了一下,有很多類似.pyt、__main__之類的東西,所以應該就是一個python編譯后的文件了,這邊推薦一個在線反編譯python的網站http://tools.bugscaner.com/decompyle/

可以發現的是有四層加密
第一層凱撒加密
第二層base32
第三層base16
第四層柵欄加密取2

這邊分享下我是如何分析這些代碼是如何加密的。
在得到這個python代碼后,每一種加密其實都可以單獨取出來,然后自己定義一些需要加密的字符,然后可以看到加密后的內容,然后可以判段,如果判斷不出來也沒關系。
只需要將他的程序逆著寫,然后將我們測試的加密后的內容,可以還原出加密前的字符,那么我們逆著的程序也就沒有寫錯了。這樣我們就能一步一步逆向出明文了。

Re

easy re

這一題是真的太沒有難度了

文本編輯器直接就搜出來了,當然更合適的做法肯定是用ida或od去搜

跳到對的地方


這一題的話,就是考察最基本的od動態調試的跳轉,使用中文搜索引擎,然后找到相應的內容,雙擊進去,就可以看到這句話所在的匯編代碼段了。然后一般是選擇push ebp去跳轉就能進去了。

啟動程序,這邊比較直接的就是直接跳進去,找一個能執行到的地方,改下匯編,讓他jmp到我們之前找到的地址。


當然,這樣可能會導致我們程序崩潰,但是我們只是要這個flag,只要讓他顯示出來就好了。

簡單的XOR

這題我當時是沒有做出來的,只要當時沒有找到真正的main函數,后來我發現一個找main函數的技巧。因為你直接運行那個需要你逆向的程序,是會出現一些信息的

輸入123,他提示我try again。于是可以在ida中搜索這個字符串,ALT+T。


然后我就找到了他真正的main函數,很容易有木有


找到了main函數,就可以看的出來,他就是要將我們輸入的東西,和v11到v34的值進行異或,最后的結果要等于v35就是”hang_dian_xin_gong_ctf!!”。 這邊需要的知識點就是,抑或的時候A ^ B=C那么A ^ C=B 、B ^ C=A就都成立了

于是寫了個腳本

就獲得了flag

多密碼表替換

找到main函數如下


我把它改寫成python代碼大概是這個意思


然后最后這個v14等于v10就是正確的

這樣我們就知道v14,于是上面的代碼中我們不知道的就只有需要我們輸入的buf[]。所以寫一個求buf的代碼

運行就能得到flag

總結

以上是生活随笔為你收集整理的记一次院赛CTF的Crypto和Re题(入门)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。