iT邦幫忙

2024 iThome 鐵人賽

DAY 1
0
Security

picoCTF 刷題分享系列 第 1

picoCTF 刷題分享---Day 1(前言)

  • 分享至 

  • xImage
  •  

前言與廢話專區


大家好呀!!!這是我第一次嘗試參加這個可怕的比賽,如果有任何錯誤歡迎大力的指教,我都會乖乖的吞下去(?

我預計使用linux去完成大部分的pico題目,並且我最害怕的部分是Reverse Engineering所以也會趁著這次努力看看?


今天預計不會太困難先簡單寫個基本的幾題吧!(真的寫以後發現好難🫠🫠)


#題目:Transformation
Description I wonder what this really is... enc ''.join([chr((ord(flag[i]) << 8) + ord(flag[i + 1])) for i in range(0, len(flag), 2)])

hint:You may find some decoders online

解題思路:

  • 先下載enc這個檔
  • 回到題目的地方可以看到python的程式碼
  • 開始看這段程式碼做逆向分析(🫠🫠
  • 再做逆向的程式碼

程式碼分析start~

  • 他程式碼像是個encoding的過程,透過把flag for i in range(0,len(flag),2)
  • 再把i進行轉成Unicode並向左shift 8 bits
  • 加上下一位的Unicode(這時是個數字(格式變成utf-16-be))
  • 最後再轉成文字
  • 這裡其實就像是這樣的意思
    https://ithelp.ithome.com.tw/upload/images/20240915/20164155fpQndDqBcL.png

逆向start~

  • 轉成Unicode碼
  • 直接右移8 bits(因為會自動補0)(得到第一個utf-8)
  • 再左移可得到utf-16的前半部分再與原本的進行異域運算(XOR:相同等於0)(得到第二個utf-8)

  • 所以會變成
  • for i in enc:
  • chr(i)>>8
  • chr(ord(i)^ord(i)>>8<<8)

統整一下:

for i in enc:
    print(chr(i)>>8,end='') # 這邊是奇數
    print(chr(ord(i)^ord(i)>>8<<8),end='') # 這邊是偶數

接著你就可以得到你的flag啦!!!!!
格式:picoCTF{YOUR_FLAG~~~~~~}

後記:
終於結束了!!!我原本寫的程式碼超長,一直在想辦法精簡化,好不容易想到位移運算,結果只得到前面,後面的部分卡了,我原本用右移再左移但就是不行真的好詭異,後來用減法想說扣掉前面8bits 結果直接不顯示(莫名其妙🙃),幸好解出來了這篇寫了3小時左右吧累死我了。 各位明天見~~晚安啦


下一篇
picoCTF 刷題分享---Day 2(刷題去)
系列文
picoCTF 刷題分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言