2009年6月8日 星期一

外掛之後

碩士論文做的是關於外掛的研究,為了抓外掛的資料,忽然很感佩有"再生"功能設計的遊戲,例如"Quake系列",有很多玩家會把自己的遊戲過程PO上網,省了我很多找logs的時間,可是,對於沒有的絕大部分遊戲怎麼辦?起源於老闆的一句話"你有沒有辦法取得XX遊戲的按鍵紀錄?",當時想說,取按鍵紀錄?好像只要偷偷利用SetWindowLong函式,然後把處理訊息的WndProc換成自己的,接下來不是只要等在這個函式中就好了?

得意算盤打得精,誰知道這是一個很長的路,走了大概兩個月吧,要讓SetWindowLong可以執行,需要把自己的程式注入對方程式中,寫到最後,變成在寫外掛了,換掉WndProc? 簡單,五分鐘搞定,第一個犧牲的對象是某跳舞遊戲,但是為了精確對時,讓我延畢了一學期,本來以為不會再碰外掛的事了,忽然老師又給了個想法"你可不可以利用LUA抓取山口山的部分截圖?",想想,LUA?我會,抓圖?簡單,只要取得山口山的Direct3D繪圖裝置就搞定了,好吧,就接下來了。

這次,更累了,攔不到山口山的Device!!!

Device不是從IDirect3D9生出來的嗎?怎麼山口山這麼奇怪,硬是另闢蹊徑,問遍了GOOGLE,有文章提到可以從COM物件創建方面攔截,但是...失敗。老師說可以去掃描記憶體,我試了,在山口山程式記憶體中翻山越嶺,守著電腦執行4個多小時後,放棄了,就算成功,誰會願意每次執行山口山都要等個幾個小時? 好幾個禮拜,對著山口山這個大怪物,執行又跳出,跳出又不死心繼續執行,最後發現,我快到了極限,想不出任何的方法,只好準備向老師自首。有一句話是對的,山窮水盡疑無路,柳暗花明又一村,正當要放棄的時候,一個很偶然的錯誤,正當我的外掛開始跑,而不小心把山口山切成錯誤的視窗模式,把它改回全螢幕獨占模式時,莫名奇妙忽然抓到了繪圖裝置,一切都搞定了,好想哭!!後來修修改改,用了一個很醜的方法,但是總是可以透過LUA來自動執行抓圖,沒圖沒真相...


掛人程式,感覺沒那麼難,真的難的是,開了一扇門後面還有無數扇門,要跟原設計者鬥智鬥力鬥時間,我覺得,最後應該還是原設計者落下風,為什麼? 雖然我很累,花了好幾個月,可是他們更慘,花了好幾年來完成遊戲,被人破解,也不能怪他們了,那要怪誰? 微軟的濫OS吧,可是我得感謝微軟,沒有這個爛OS,我恐怕要等頭髮花白才有辦法畢業吧~~