CTF逆向:將陣列作為函式程式碼執行

BattleofZhongDinghe發表於2024-09-08

例題
攻防世界 BABYRE


flag判定條件為這個

if ( v5 == 14 && (*judge)(s) )

注意judge本質上是一個陣列,(*judge)(s)則說明judge陣列中的內容被當做程式碼執行
但前面又有

  for ( i = 0; i <= 181; ++i )
    judge[i] ^= 0xCu;

judge陣列中的內容進行加密

所以需要進行patch

start=0x600b00
for i in range(182):
    patch_byte(start+i,ord(get_bytes(start+i,1))^0xc)

然後選中judge按住c然後按住p,然後F5反彙編

方法二:
動態除錯
先打一個斷點

linux端輸入一個長度為14的字串並回車


F7單步到call rdx;judge 然後F7進入judge


在剛開始進入judge的時候按一下p

然後F5檢視虛擬碼

相關文章