iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0
Security

picoCTF 刷題分享系列 第 9

picoCTF 刷題分享---Day 9(刷題去)

  • 分享至 

  • xImage
  •  

今天預估會把Bit-O-Asm系列解決,懇請各位同志努力!
我個人其實把這系列當作assembly language的檢測,看我基本語法過不過關,所以我都會用紙筆算不會進行compile


題目:Bit-O-Asm-3

Not everything in this disassembly listing is optimal.
解題思路:

  • $cat file.txt
  • <<+15>> mov [rbp-0xc],0x9fe1a // [rbp-0xc]這個地址的值=0x9fe1a
  • <<+22>> mov [rbp-0x8],0x4 // [rbp-0x8]這個地址的值=0x4
  • <<+29>> mov eax,[rbp-0xc] // eax = [rbp-0xc]的值 = 0x9fe1a
  • <<+32>> imul eax,[rbp-0x8] // eax *=[rbp-0x8]的值=0x4
  • <<+36>> add eax,0x1f5 // eax = eax + 0x1f5 = [0x9fe1a * 0x4 + 0x1f5]
  • 後面就不重要了
  • 接著按到 python 裡
  • 0x9fe1a * 0x4 + 0x1f5貼上並enter
  • python會自動換算並求出解答(decnum)
  • 就可以提交啦
  • 格式:picoCTF{decnum}

題目:Bit-O-Asm-4

Don't tell anyone I told you this, but you can solve this problem without understanding the compare/jump relationship.
Of course, if you're really good, you'll only need one attempt to solve this problem.
解題思路:

  • $ cat file.txt
  • <<+15>>之後才重要
  • 首先[rbp-0x4] = 0x9fe1a
  • 再進行比較cmp(詳細介紹加在補充)
  • cmp 0x9fe1a,0x2710 前面大
  • jle不成立不執行
  • 進入<<+31>> [rbp-0x4] = [rbp-0x4] - 0x65 = 0x9fe1a - 0x65
  • <<+35>> 跳到<<.main+41>>
  • <<+41>> eax = DWORD PTR [rbp-0x4]
  • eax = 0x9fe1a - 0x65
  • 進到 python 並輸入
  • 0x9fe1a - 0x65
  • python會自動換算並求出解答(decnum)
  • 就可以提交啦
  • 格式:picoCTF{decnum}

補充:
cmp a,b的意思是如果
a-b=0 (代表a=b) 則 ZF = 1
a-b>0 (代表a>b) 則 ZF = 0, CF = 0, SF = 1
a-b<0 (代表a<b) 則 ZF = 0, CF = 1, SF = 0


ZF(零標誌位)

  • 意義:結果是否為零。
    • 結果為零時,ZF = 1。
    • 結果不為零時,ZF = 0。
  • 用途:
    • 用於比較操作,例如在 cmp 指令中判斷兩個數是否相等。
      -常用的跳轉指令:je(jump if equal)和 jne(jump if not equal)。

CF(進位標誌位)

  • 意義:是否發生了進位或借位,主要用於無符號數的比較。
  • 設置方式:
    • 當在加減法操作中發生進位時,CF = 1。
    • 否則,CF = 0。
  • 用途:
    • 用於無符號數的比較。
    • 常用的跳轉指令:jb(jump if below)和 ja(jump if above)。

SF(符號標誌位)

  • 意義:判斷正負。
  • 設置方式:
    • 取決於結果的最高位(符號位)。如果最高位是 1(通常代表負數),則 SF = 1;如果最高位是 0(代表正數或零),則 SF = 0。
  • 用途:
    • 用於有符號數的比較。
    • 常用的跳轉指令:jl(jump if less)和 jg(jump if greater)。

這裡說的比較詳細,但其實在寫的時候,直接寫

cmp a,b
[jg,je,jle...] lable

並不需要去說你要以哪個去進行判斷,電腦會自己解決

後記:
各位可以發現這系列其實比較像在檢測大家的組語學習是否紮實,我這部分其實不太好,以前都是看懂一些就好
所以我這次也重新學了一遍(不是不報,時候未到,逃不掉🤣🤣
但這系列其實蠻友善的,但更該把基礎打好喔!!!


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

尚未有邦友留言

立即登入留言