例題
攻防世界 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檢視虛擬碼