2019年7月5日 星期五

Windows踩地雷逆向工程

記得在剛上大學時,在電腦教室上課,發現隔壁同學非常認真的在使用電腦,仔細一看,原來是認真的玩Windows內建的踩地雷遊戲,回到宿舍後,我也來玩踩地雷,不過是將它丟到反編譯軟體,分析裡面的運作原裡。

一、初始化地雷

在運行踩地雷時,它會亂數運算所有地雷的位置。



二、存入地雷旗標

亂數完位址後,會將地雷旗標(0xFFFF)存到記憶體空間,其中edx是地雷格數的起始位址,eax是亂數運算值。



三、判斷是否為地雷

在記憶體空間,標示為地雷的旗標是0xFFFF,反之是0x0000,因此下圖的ecx為踩地雷的所有格數空間,eax是點擊到的格數,bx是0xFFFF,那麼如果點擊到地雷的格數,就會將所有地雷繪製出來,並結束遊戲。



四、繪圖API

在踩地雷遊戲,繪製空白格數、數字格數和地雷格數,都是使用BitBlt的API來繪製的。



五、地雷位址與記憶體空間對應

每個地雷都會對應到0xFFFF的旗標。



六、顯示所有地雷