iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 15
1
Security

我搶到旗子了!30天CTF入門系列 第 15

Day15 [Reverse] 暴力解或許更快!?

  • 分享至 

  • twitterImage
  •  

執行結果大概可以看出他要我們利用他的加密方式去解出下面他給的一串16進位數字

利用ghidra可以很明顯的看出目標應該是encrypt這個函式

這裡可以看到他的加密過程

將輸入進去的值先做rol 4個bits
rol4 的意思就是左移4個bits,溢出的會從最一開始補上
例如:
rol 10000100 -> 00001001

ror 的意思相反

例如:
ror 10000100 -> 01000010

做完rol後再跟0x16做xor,再做ror 8個bits就完成加密

題目已經有提供加密後的flag了,我們只需要反過來運算就可以得到加密前的flag
不過這題要注意他的資料型態,有時候是int有時候是byte,要是沒有掌控好是拿不到Flag的

這邊利用python來解 以下是程式碼在byte的部份我是利用numpy中的uint8來表示

  import numpy as np
  flag=[0x11,0x80 ,0x20 ,0xE0 ,0x22 ,0x53 ,0x72 ,0xA1 ,0x01 ,0x41 ,0x55,0x20,0xA0,0xC0 ,0x25 ,0xE3 ,0x35 ,0x40 ,0x55 ,0x30 ,0x85 ,0x55 ,0x70 ,0x20 ,0xC1]
   
  for i in range(len(flag)):
      x=flag[i]
      x^=0x16
      y=(np.uint8(x<<4))|(np.uint8(x>>4)) #ror4
      print(chr(np.uint8(y)),end='')

這樣就可以得到Flag囉


一開始執行程式後有想到一個暴力法,也不會花太多時間因為Flag也就那幾個字而已

這當然也是一種解題方式,假如丟到ghidra後還是解不出來最壞的辦法就只能這樣了XD


上一篇
Day14 [Reverse] 電腦不夠快怎麼辦(2)
下一篇
Day16[Reverse] 組合語言--暫存器運用
系列文
我搶到旗子了!30天CTF入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言