A Reverse a day keeps the zero-days away
題目
首先它給了一個檔案,裡面長這樣。
灩捯䍔䙻ㄶ形楴獟楮獴㌴摟潦弸彥㜰㍢㐸㙽
.join([chr((ord(flag[i]) << 8) + ord(flag[i + 1])) for i in range(0, len(flag), 2)])
很明顯它編碼錯了,所以才會出現這種奇怪的亂碼,只要還原會去就沒事了。底下的那個是附在題目敘述上的編碼程式。它先把整個flag切成兩兩一組,把兩個都變成ASCII,把第一個乘上256再加上第二個。最後再 chr() 變成我們現在看到的。
解答
寫一隻程式逆著回來就好了,題目用python我就用python吧。
q = "灩捯䍔䙻ㄶ形楴獟楮獴㌴摟潦弸彥㜰㍢㐸㙽"
sum = []
# 把編碼換回ASCII
for i in range(len(q)):
sum.append(ord(q[i]))
# 暴力破解(因為ASCII最大就126)
for i in range(len(sum)):
for j in range(126):
if (sum[i] - (j << 8)) <= 126 and (sum[i] - (j << 8)) >= 0:
print(chr(j) + chr(sum[i] - (j << 8)) ,end = "")
破解完就得到旗子了,picoCTF{16_bits_inst34d_of_8_e703b486}