[ACTF新生賽2020]rome

结城希亚發表於2024-10-26

DIE查殼

32位,無殼

32位ida開啟

介面很難看,按\後得到加密程式

image

關注這個while迴圈,明明是個迴圈16次,但卻v1卻只有四個元素

從宣告變數這裡可以看到v1是int陣列,每個元素佔四位元組

image

梳理一下邏輯,v1是我們需要求的flag,也就是傳入的資料,這裡透過第一個while迴圈進行了兩次if判斷,處理輸入的flag,也就是v1中的每個位元組

image

最後用第二個whlie迴圈將處理後的v1與預設字串v12進行比較

可以逆向加密程式求flag,也可以爆破,這裡我們選擇爆破

enc = 'Qsw3sj_lz4_Ujw@l'
flag = ''
for i in range(len(enc)):
    for k in range(128):
        j = k
        if j > 64 and j <= 90:
            j = ((j - 51) % 26 + 65)
        if j > 96 and j <= 122:
            j = ((j - 79) % 26 + 97)
        if j == ord(enc[i]):
            flag += chr(k)
print(flag)

得到flag:Cae3ar_th4_Gre@t

開啟ida

相關文章