攻防世界 gametime 使用IDA pro+OD動調

demo41發表於2024-03-27

自學犟種琢磨動調的一個記錄,算是第一次動調的新手向,大佬請飄過

題目


準備工作——IDA pro(32X)

下載得到一個exe檔案,首先丟到PE裡面——無殼,32bit

丟到IDA pro(x32)裡面

剛好main函式就在左邊很矚目的地方,雙擊+F5,試圖反彙編,但是跳出一個彈窗

你點OK或者直接叉掉,也會反彙編,不解決也不影響本題解答——但是有些題目會被影響(我就遇到過,把關鍵傳輸的變數吞了...),程式碼會少一點東西,有時候是很關鍵的東西

所以這裡也提供解決方法:SHIF+F7

參考:[求助] write access to const memory has been detected, the output may be wrong!-求助問答-看雪-安全社群|安全招聘|kanxue.com

選中idata-->ctrl+e

解決完這個問題,我們來看看主函式程式碼———特別長,你要單純看程式碼理解也不是不可以,但是較為困難且還要花時間

這裡建議直接執行一下exe,看看題目給了我們什麼以及是怎麼執行的

很明顯這是一個遊戲,第一關遇到s就按空格,第二關遇到x就按x......後面的速度越來越快,還是要破解

來梳理一下游戲的執行過程:列印需要被觀察的字母,使用者按照要求輸入,系統應該會檢查我們的輸入是否滿足要求,不滿足遊戲直接GG,滿足的話進入下一關。

那我們想要開掛通關要怎麼辦?是不是我們不輸入或者隨便輸入,系統都判定我們合格要求,直接放我們去下一關?

所以有關判定的條件或者函式是解題的關鍵

視線回到反彙編程式碼,這時候就清晰很多了

主函式前面一堆亂七八糟的字元原來是遊戲執行介面的裝飾

我們還可以看出 sub_401A73 是一個列印函式

繼續往下,看到一個if條件判斷——應該是一個關鍵

點進去看看,發現是第一關的程式碼,失敗了應該會輸出“UDDER FAILURE! http://imgur.com/4Ajx21P”

所以緊挨著的上一條if,很有可能是用於檢查我們輸入

因為後面要動調,所以讓我們看看地址(按TAB,再按空格)

出現了jnz跳轉指令——這個是關鍵

這裡暫停一下,用IDA pro+OD(都是32X)的組合需要注意一點:這兩個的地址是不一樣的!!!!

我們把檔案丟到OD裡看看基址,ALT+E,找到我們的程式,記住基址:00F30000

然後返回IDA pro,Edit-->Segments-->Rebase program-->Value修改為0xF30000

這時候的地址全都變了,記錄下此時的jnz指令的地址 00F314DB

主函式的第一個if的關鍵地址的查詢就告一段落了

我們繼續看main函式後面,又發現if條件判斷

按照上面的思路點進去看看,跟上面情況一樣

又得到一個jnz指令的地址 00F31563


動調部分——OD(32X)

再上面我們得到兩個地址 00F314DB 00F31563

在OD中,ctrl+G,輸入上面第一個的地址,可以看到我們在IDA中找到的jnz

雙擊指令,進行修改,按一下“彙編”就可以

為什麼這麼修改,需要一定組合語言基礎,可以看這個:jmp、JE、JZ、JNE、JNT指令_je指令-CSDN部落格

可以看到指令發生了變化

同理可得,輸入第二個地址,修改指令

然後F9,執行,等待exe執行完,直到列印flag,暫停


flag

key is (no5c30416d6cf52638460377995c6a8cf5)