1. 程式人生 > >2018/11/29-NCTF-Some Box

2018/11/29-NCTF-Some Box

題目連結:https://pan.baidu.com/s/1n1a4VFdCkloDV3OBunbKQQ 

提取碼:wqs9 

題目是一個推箱子的遊戲,需要將兩個箱子推到終點。

在sub_400EB9中有一個smc,進行異或操作,作用是解鎖地圖map。

開始會有”sp-analysis failed“,修一下棧指標可以進行反編譯。

寫IDApython指令碼進行靜態解密。

address = 0x6020A0
for i in range(192):
    b = Byte(address+i)^i
    PatchByte(address+i,b)

並且在sub_400796函式中初始化了推箱人和兩個箱子的座標。

解密後的map與person和box座標如下(08代表牆,00代表通道,14代表終點):

我們來分析一下程式如何實現推箱子游戲的。

輸入的字串可以控制person的移動方向,我們分析一個控制向左移動函式為例。

然後每一次移動後都會跳轉到check函式對box1和box2座標值進行檢測,看是否都等於0x14即推到了終點。

現在我們知道了程式如何實現的推箱子,然後只需要先將box1推進左邊的14,然後把box2推進右邊的14,可以實現這樣的輸入為”WW44W444W45555555450050W0000WWWWW5444WW00050W4W0000W0550544“。