[分享] nProtect GameGuard 簡略分析

幫轉:John 大大以前在 TW-Share 寫過有關的遊戲作弊文章

【標 題】:nProtect GameGuard 簡略分析
【作 者】:john0312
【時 間】:2006-12-28 03:13 AM
【連 結】:http://bbs.twshare.net/viewthread.php?tid=124973

我中文不好,若有詞不達意,請各位見諒.
小弟再次獻醜,希望這裡的大大們多多指教.

1. 簡介
“知己知比,百戰百勝", 了解nProtect GameGuard, 才能"跳"它.
iNCA 是一間很霸道的公司 ( 別告我毀謗啊∼∼∼ ), 它的產品 — nProtect GameGuard 也一樣霸道.
楓之谷帶著一個霸道的nProtect GameGuard就譬如你請一個人來家裡裝冷氣,那人再多帶一個同伴來,他那同伴再裝冷氣時,在你家裡到處逛,開你的冰箱,吃你的東西,看你不爽就放

個炸彈,又不時請一幫人到你家裡來聊天,還在你家裡埋地雷,設陷阱,搞的一團遭.
由於nProtect GameGuard的原碼不是公開的(公開的還得了啊),iNCA也絕對不希望我們這些搞外掛的反編譯nProtect GameGuard,所以當然會有許許多多的防護措施. 這篇文章也只

是說明我知道的部分而已. 由於沒有元碼,能分析的自然不多,就不會像上一篇一樣長篇大論.

2. 整體結構

nProtect GameGuard 主要分成4個部分:
– GameGuard.des
負責確定硬碟上的GameGuard檔案沒有被改過,以及目前的版本是最新的. 它也幹一些檢查的工作.

– GameMon.des
主程式,是所有GameGuard檔案中防反編譯功能最強的,幾乎是不可能反編譯的,他確定所有其他的部分都正常運作

– npggnt.des
這是個DLL, 會被GameGuard inject到每一個執行中的程序裡,進行Usermode Detour Hooking以及掃描有沒有外掛,若有就向GameMon.des報告.

– dump_wmimmc.sys
核心驅動, 重新開機是他的專長, 核心模式的掃描也是他在幹的,Kernel Mode SSDT/SSDTShadow Hooking也是他的傑作,楓之谷主程式及GameMon.des也是他藏的

3. MapleStory.exe 和 GameGuard.des 以及 GameMon.des 的 溝通
楓之谷主程式一啟動,就先執行GameGuard.des.
我們用OllyDbg來查看楓之谷是如何執行GameGuard.des的

我們可以看到楓之谷主程式使用CreateProcess() 來執行
CreateProcess() 的用法請參考 MSDN: http://msdn.microsoft.com/librar … e/createprocess.asp
在參數的地方,我們可以看到一些亂碼,如:
\x01\x74\xc1\x5f\x8d\x71\xce\x1c\x97\x1d\x86\x75\x2f\xa0\xc9\xb9\x74\x08\xcd\x79\xde\x94\xb6\xb6\xfc\x9b\xd6\xcc\x99\x53\xe9\xf1\xc5\x38\xe4\xdd\x59\xa0\x89
我猜想這些亂碼是驗證GameMon.des沒有被掉包
另外值得注意的一點是bInheritHandles是TRUE,這代表GameGuard.des使用一些楓之谷主程式的Handle.

GameMon.des 也是由楓之谷主程式執行, GameGuard.des 有辦法通知楓之谷之主程式 nProtect GameGuard 已經下載好了, 至於他們怎麼做到的我就不知道了.
GameMon.des 執行後會載入核心驅動以及將 npggnt.des inject 到系統裡所有執行的程式裡. GameMon.des 有一個紀錄檔, 它不只有GameGuard的執行紀錄外,裡面也有你電腦裡偷

來的東東,例如: 你在執行甚麼東西… 等

紀錄一下也沒啥大不了的, 寄出去就另當別論了! 有關這紀錄檔的事,且參閱nForce在MPCForum的帖子

4. Mark Russinovich 真的很神!!
大家一定想我這下可離題了,那你們猜錯了. Mark Russinovich 寫的一個工具在分析GameGuard在搞啥鬼上是十分有用的. 這個工具叫 FileMon ( -_-" )
FileMon 能紀錄所有程式,或指定程式存取硬碟/檔案. 我們看GameMon.des存取哪些檔案就可以對他有進一步了解.

從FileMon的紀錄檔,我們可以看出以下幾點:

I. dump_wmimmc.sys
GameMon 把它寫到硬碟後,載入核心,然後直接刪除,避免我們這寫稿外掛的偷他拿去研究

II. pipeline
我們可以看見楓之谷主程式建立一組pipe,並且將Handle傳給GameMon,兩個以此方法溝通. ( 我懷疑有其他方法,但我不確定 ).

III. CreateFile
GameMon 運用時使用CreateFile嘗試聯繫外掛程式,若發現… 這用我說嗎?

5. npggnt.des 以及 Usermode Detour hook.
npggnt.des 其實是一個DLL, GameMon 將它 inject 到系統裡的每一個執行程式中. 目的是阻止程式使用某些編程介面(API/Functions), 例如, SendInput() 常被腳本程式使用,

而 WriteProcessMemory 常被外掛使用, 等.
npggnt.des 運用 Usermode detour hook 的方法來達成他的目的. Usermode detour hook, 指的就是將Function的前幾位元組改成jmp指令,因此,當這Function被呼叫

時,npggnt.des 就能攔截這呼叫.
舉例: SendInput():
沒執行GameGuard:
mov edx, 11F6h
mov eax, 7FFE0300h
call edx
ret 0Ch
有執行GameGuard: ( 那些x依GameGuard的版本而不同)
jmp xxxxxxxxh
mov eax, 7FFE0300h
jmp xxxxxxxxh
ret 0Ch

有關npggnt.des是如何Usermode Detour Hook, 以及他如何檢查的, 請參閱我的Blog. ( 今天懶得翻譯了…😛 )

注: 我附一份脫殼過的npggnt.des以及一份dump_wmimmc.sys給大家慢慢玩

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s


%d 位部落客按了讚: