逆向bugku-game

bugku的遊戲過關

最初解題

在這裏插入圖片描述
意思是
在這裏插入圖片描述
其實這道題很容易憑實力做出來,只要明白它的意思就行。
說白了就是一開始八個線路都是關着的,你讓着八個都打開就行,但是你每改變一個就會影響 到周圍的兩個
經過堅持不懈五分鐘就做了出來,後來我查這道題的wp發現,直接從1按到8就出來flag了。

在這裏插入圖片描述
flag就是zsctf{T9is_tOpic_1s_v5ry_int7resting_b6t_others_are_n0t}

下面用正常的方法來解一下,第一步,拉入IDA中
進去以後
在這裏插入圖片描述
按F5之後就能得到僞代碼,然後進入這個主函數
在這裏插入圖片描述

進入之後我們快速地去發現重點

在這裏插入圖片描述
最後的sub_457AB4就是輸出flag的函數
這裏有個我剛知道的點就是當反編譯用戶自定義的函數名時就會sub_加上地址。
我們點進去看這個函數
在這裏插入圖片描述
分析這段代碼,先看這個for循環。
v2先與v59進行異或運算(兩個值不相同,結果爲1,值相同,結果爲0)
這就可以找個腳本跑一下。寫起來也挺簡單的。

腳本

在這裏插入圖片描述在這裏插入圖片描述

這就得到了flag。

代碼分析

現在我們來具體分析一下主函數的代碼。
在這裏插入圖片描述
上面那些藍色的字體就是遊戲動畫畫面
在這裏插入圖片描述
19—28行那就是我們打開這個程序後出現的那些文字就是遊戲介紹,
在這裏插入圖片描述
接下來是一個大的while循環。裏面又有一個while循環,兩個if循環
1.while循環是對用戶輸入的內容進行判斷,如果是1~8的數字,則跳出while循環,去執行下面的操作
如果不是這幾個數字,就會輸出 sorry,n error,try again.我們在命令行中可以得到驗證。
2.第一個if循環:如果輸入進來的v1不爲0的話就進行sub_4576D6這個函數
進入這個函數
在這裏插入圖片描述
這我們也看不太懂,但應該是遊戲規則的一部分。不重要。
3.看到第二個if循環我們就明白上面那個函數的意思了。
因爲在這兒要判定這些值是否都是等於1。
當都等於1之後纔會執行輸出flag的函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章