線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:20491
推到 Plurk!
推到 Facebook!

Hook or Proxy DLL 如何繞過 nProtect GameGuard ?

缺席
RootKit
資深會員


發表:16
回覆:358
積分:419
註冊:2008-01-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-02-16 12:10:10 IP:61.222.xxx.xxx 訂閱
這是非常有趣的議題。

我在嘗試 Hook DirectX (D3D8&D3D9) 目的為了 擷取 DirectX 畫面及在遊戲中顯示圖片。
經由 Hook Direct3DCreate8 在一般遊戲中我初步做到了。
但發現在某些遊戲上,由於使用了HOOK 技術會被發現進而終止執行。

OK,我猜想遊戲的反外掛裝置,可能 HOOk 了 HOOK SetWindowsHook 及某些 API
導致了我的HOOK被偵測出來。

既然Hook行不通,於是我使用 Proxy DLL 透過代理 D3D8.DLL 使用假的 D3D8.DLL
這樣一來照理應該不會被偵測到。因為我並沒有 inject or 其他容易被誤會的方式。

令人奇怪的是,還是被 nProtect 檢查到。
這是我無法理解?.... nProtect 是如何做到的。


註:nProtect GameGuard 是遊戲反外掛的程式(如楓之谷...)。
bugmans
高階會員


發表:95
回覆:322
積分:188
註冊:2003-04-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-02-17 20:48:56 IP:125.225.xxx.xxx 未訂閱
我以前也很迷破解,入侵,hook等技術,感覺作出來就像是高人一等
那時看到taksi能抓遊戲的圖而且還附原始碼簡直如獲至寶
花了好多時間從程式碼推敲其中的原理,雖然大概了解原理
但自己的能力根本無法實作出來,只留下一張潦草的日曆紙筆記當作紀念
http://delphi.ktop.com.tw/board.php?cid=30&fid=74&tid=39811&p=1#31

所以看到樓主的文章我心想花了不少心力吧,真心要為你拍拍手
只是來Ktop問應該是等不到答覆的,這類問題比較適合在國外或大陸的論壇
以前我常來這個論壇,雖然很多東西看不懂但我抱著閒逛心態到處看看
http://bbs.pediy.com/index.php
你可以用nProtect先搜尋,至少這裡是個不錯的起點
RootKit
資深會員


發表:16
回覆:358
積分:419
註冊:2008-01-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-02-17 21:18:55 IP:122.126.xxx.xxx 訂閱
看來似乎是我自己個人的痴心妄想吧!
一直以來我是非常想要克服這個議題。

不過,非常感謝您的參考意見。
Taksi 原碼我會研究一下。
目前主要是HOOK也做出來了,ProxyDLL 方式也做出來了
只是不瞭解 nProtect 在 Proxy DLL 也能檢測出來。
不排除 nProtect 會檢測 D3D8.dll 的特徵(應該不可能那麼閒吧~)。
. ...

===================引 用 bugmans 文 章===================
我以前也很迷破解,入侵,hook等技術,感覺作出來就像是高人一等
那時看到taksi能抓遊戲的圖而且還附原始碼簡直如獲至寶
花了好多時間從程式碼推敲其中的原理,雖然大概了解原理
但自己的能力根本無法實作出來,只留下一張潦草的日曆紙筆記當作紀念
http://delphi.ktop.com.tw/board.php?cid=30&fid=74&tid=39811&p=1#31

所以看到樓主的文章我心想花了不少心力吧,真心要為你拍拍手
只是來Ktop問應該是等不到答覆的,這類問題比較適合在國外或大陸的論壇
以前我常來這個論壇,雖然很多東西看不懂但我抱著閒逛心態到處看看
http://bbs.pediy.com/index.php
你可以用nProtect先搜尋,至少這裡是個不錯的起點
dominicx
一般會員


發表:6
回覆:10
積分:13
註冊:2007-05-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-07-30 16:46:10 IP:222.156.xxx.xxx 訂閱
我最近也在研究DLL injection
nProtect也造成我的困擾
不過從大陸討論區找到了破解方法
轉貼我從大陸討論區查到的資料

===========以下轉貼=============
nProtect GameGuard 是一款比較著名的防作弊軟體,在玩家使用外掛(無論任何遊戲的外掛,就算不是當前遊戲的外掛也不可以)的時候會提示"檢測到遊戲被破解修改"並強行關閉遊戲。
什麼是nProtect?
nProtect是設計用于保護個人電腦終端不被病毒和駭客程式感染的新概念的基於網路的反駭客和反病毒的工具。他幫助確保所有輸入個人電腦終端的資訊在網路上不落入駭客手中。在最終用戶在執行電子貿易時,可以通過將nProtect配置在那些提供電子商務、進口貿易,電子貿易的金融機構的網站上,來提高安全等級。
nProtect怎樣工作?
nProtect是一種基於伺服器端的解決方案並且當那些需要保護的任何網路應用被運行時而自動啟動。nProtect被載入內存,所以最終用戶不需要安裝任何應用程式,只要nProtect啟動,就開始拒絕駭客工具和病毒的入侵!
nProtect如何工作?
用戶登陸時nProtect自動啟動。
瀏覽器確認和自動安裝安全模塊到用戶的個人電腦。
掃描駭客工具和病毒
通知用戶目前的安全狀態
如果有駭客工具和病毒嘗試刪除
在被入侵時端駐留內存來鎖定駭客工具直到電腦或者nProtect關閉。
nProtect GameGuard 的主要功能介紹:
實時偵測並封鎖修改遊戲之駭客程式。
實時偵測並封鎖各類型系統病毒。
實時偵測並封鎖加速程式。
實時偵測並封鎖自動滑鼠(連點)程式。
封鎖不當外掛程式。
封鎖各種意圖遠程控制玩家個人電腦的動作。
限制意圖側錄鍵盤滑鼠動作的惡性程式。
限制可疑間諜程式,加強安全性。
使用此軟體的網路遊戲還有很多,比如:冒險島國際服,信長野望online,希望online等等
再來談談新版本的冒險島外掛問題:
目前在伺服器上能屏蔽掉的一般都是高速戰鬥,即兩次戰鬥的數據傳輸時間間隔少於遊戲設定的最少時間(比如說最快的攻擊是用小刀砍一下,假設這個時間是2秒,而某ip長時間以1秒傳送一次攻擊指令(既含有攻擊指令的封包),可以強制讓此ip斷線,但並不能做為封號的證據)高速採集原理也差不多,還有瞬移等。
什麼是封包?客戶端和伺服器之間往來的數據就是封包
有學過電腦的因該都知道電腦網路被OSI參考模型分為7層:
第1層:物理層;傳輸單位是比特流,既bit
第2層:數據鏈路層;傳輸單位是幀,既frame
第3層:網路層;這一層傳輸的就是包了,既packet
第4層: 傳輸層;傳輸單位是段,既segment
第5層:會話層;建立連接並保持連接暢通
第6層:表示層;將資訊"表示"為一種格式,可以理解為就是"格式轉換"
第7層:應用層。對軟體提供接口以使程式能使用網路服務
數據在網路中傳輸不是一整大段的傳輸的,而是分成小塊傳輸的,由於比較分散,所以封包。大家可以理解為"搬家的時候把東西打成包好搬運"。
目前的外掛都是內嵌於遊戲中,對遊戲所接收和發送的封包進行截取,修改,重構建等。
話說回來,nProtect GameGuard的確很厲害,從冒險島更新它又來到我的硬碟上以後,我的ZoneAlarm防火牆就開始報警了,說它要監視你的進程,並且欲訪問網路,欸,沒辦法,為了玩冒險,只好放行咯。
試圖訪問internet

監視冒險島進程
切出遊戲後,你會發現右下角多了個這東西,翻譯過來就是"nProtect 遊戲監視程式 版本624"

什麼是ZoneAlarm?ZoneAlarm是世界著名的防火牆之一,它的強大只有用過才知道
順便說一句,世界頂級防火牆是 Look n Stop ,可惜在中文系統上使用時問題比較多,我就跟它88了(廣告先止住,免得有人扔磚)

值此,我想大家覺得冒險島純淨時代再次來臨了吧?
不過很可惜,答案是否定的。
很多人說nProtect GameGuard很厲害,但是我要告訴大家:中國人更厲害!!
破解nProtect:
nProtect GameGuard在啟動後使用SetWindowsHookEx(Inject DLL)方式進入所有的進程,並且在
OpenProcess()
ReadProcessMemory()
WriteProcessMemory()
PostMessage()
。。。。。。。。。。等等函數的頭部加入JMP XXXXXX的代碼跳入監測程式進行監測,如發現對遊戲進行操作便攔截該操作,所以以上函數均無法正常工作。於是,就避免了外掛問題。
解決方案:
1.運行時將要使用的動態連接庫(如:user32.dll kernel32.dll等)複製後改名,使用LoadLibrary和GetProcAddress載入函數。
要使用LoadLibrary和GetProcAddress載入函數,你需要有Visual Studio .NET,或者其中的Visual Basic和Visual C ,當然,你還要會使用他們,而且你還要知道nProtect GameGuard運行時到底調用了哪些動態連接庫(這時候大家就八仙過海各顯神通吧,想盡一切辦法,如果你搞錯了的話。。。。。後果自己負責咯。。。。。。。。。)
2.恢復JMP XXXXXX處的代碼
需要很高的技術並有很大的危險性,而且不知道會不會再被改。。。。。。一但失敗,後果自己負責咯。。。。。。
3.如果nProtect GameGuard非正常關閉(看大家本事了),JMP XXXXXX處的代碼不會被恢復而監測程式代碼卻已經被卸載,這時候如果被Hook程式調用函數。。。。。。後果自己負責咯。。。。。。
反正失敗後後果都好不到哪裡去,除了電腦爆炸之外,大家就自己去想吧,所以,小心,小心,再小心!

跳過nProtect:
首先要清楚,nProtect通過連接其更新伺服器獲得當前最新文件內容,然後與本地文件作比較,如發現伺服器端的文件與本地的不一致,則從更新伺服器重新下載文件更新本地的nProtect文件。如果nProtect更新成功,而新版nProtect又攔截外掛,那麼理所當然地nProtect每更新一次外掛就失效一次了。
通過分析遊戲客戶端用于解析該遊戲各程式與其對應遠端連接的IP列表文件,找出nProtect更新伺服器的地址,並分析出nProtect官方更新伺服器上的目錄文件結構。
目錄文件結構一般為: "更新伺服器的名稱\\GameGuard"
先自己構建一台模擬nProtect更新伺服器,伺服器上目錄文件結構與官方的相同,更新下載文件內容使用舊版nProtect的內容(舊的客戶端先別忙著刪除。。。。。)
將真實nProtect更新伺服器的地址,解析到你構建的模擬nProtect更新伺服器的IP地址.
例: 127.0.0.1gg.muchina.com
寫入到 system32\\drivers\\etc 的 host 文件中
這個 host 文件為系統TCP/IP協議配置IP解析服務, 沒有尾碼名,可用記事本或UE32打開編輯。
通常一個網遊的順利運行,是要連接伺服器端多個IP的("nProtect服務","連接服務","數據服務","登陸服務","主服務"。。。。。。。)
而這一系列的服務都是由一個遊戲主程式的啟動運行來完成(如"命運"的"WYDLaucher.exe","奇蹟"的"Main.exe","冒險島"的"MapleStory.exe")
由於host文件已被修改過,其中nProtect更新的連接IP被解析為指向自己模擬的更新伺服器,而模擬伺服器上的"更新文件"是舊版本的,所以nProtect不但不會被更新為新版,反而會版本倒退。並且往後都不會再更新。。。。。。。。
另一個方法,則是直接修改遊戲主程式代碼內容,就是暴力修改了。
由於nProtect的功能是附在遊戲主程式的開頭獨立執行的,所以,通過對遊戲主程式進行破解處理後,將遊戲主程式關於nProtect的執行部分的代碼打上無效化標記,就很自然地跳過了nProtect了。

補充一下,構建模擬nProtect更新伺服器可用本地機器完成(nProtect更新IP:127.0.0.1 有的安全軟體會屏蔽掉此個本地自連接IP);用VM虛擬機完成(VM虛擬的多系統可各自設置不同IP);或者。。。。。另外組一台機器來做也可。。。。。
還有,脫殼的方法比較不實際,因為一個當前網遊的完整客戶端主程式的脫殼工作是很繁重的, 須要多CPU伺服器級的技能才能比較有效率的完成(據程式外殼加密方式而定, 雙P4 1.8G/1G RAM的系統跑MU97d的main.exe脫殼,半天左右吧。。。。。。), 脫殼後也不是人人都有能力對程式作適當修改,進階C語言程式編輯能力的要求是跑不掉的。這個還是太難了點。。。。。。。
系統時間:2024-03-29 17:43:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!