MapleStory 客戶端連線的目標 IP 是寫死在 exe 裡的(Nexon 官方 IP)。除了直接用 HxD 或 STRedit 修改之外,還可以用 Redirector(重導向器)——不動 exe 本體,在系統或程式層攔截連線請求,把目標 IP 偷換成你的私服。
為什麼需要重導向?
直接改 exe 的缺點是:每次要換伺服器都得重新修改一次,改壞了還要重新下載客戶端。Redirector 讓你不用碰 exe,只要調整重導向的設定就能切換連線目標。
不管用哪種重導向方式,都要注意:MapleStory 在登入、切頻道、進商城時會建立不同的 TCP 連線,全部都要重導向,只做了登入 Port(8484)而漏掉頻道(8585起)或商城(8610)是最常見的問題。
三種方法比較
| 方法 | 難度 | 是否改exe | 適用情境 |
|---|---|---|---|
| netsh Loopback Adapter | ⭐⭐ | 否 | 自己測試、快速切換伺服器 |
| TCP Proxy(如MapleProxy) | ⭐⭐⭐ | 否 | 多伺服器、需要分發給玩家 |
| DLL Hook(如AuthHook) | ⭐⭐⭐⭐ | 否 | 發布通用登入器,玩家不需手動設定 |
方法一:netsh Loopback Adapter(最簡單)
原理是在本機新增一張「假網卡」,讓遊戲以為自己連到 Nexon 的 IP,實際上流量被導向本機(也就是你的私服)。
步驟
- 開啟「裝置管理員」→「動作」→「新增舊版硬體」→「手動安裝」→ 廠商選
Microsoft,安裝 Microsoft KM-TEST Loopback Adapter - 取得 Nexon 原始 IP(用未修改的原始 exe 以 HxD 搜尋 IP 字串可以查到)
- 以系統管理員身分開啟命令提示字元,執行:
cmd📋 複製
netsh int ip add addr 1 <nexon-ip> - 建立捷徑,在目標路徑後加上
GameLaunching參數啟動遊戲:text📋 複製"C:\Maple\GMSv83.exe" GameLaunching - 測試完成後記得清除:
cmd📋 複製
netsh int ip delete addr 1 <nexon-ip>
懶得每次打指令的話,可以用社群做的 GUI 工具 Localhost Redirector Tool 自動執行這個流程(不支援 Windows XP)。
伺服器端要記得在
CLIENT_START流程中加入認證成功的回應封包,才能繞過 Nexon 的 Login 驗證。
方法二:TCP Proxy(穩定、適合多人)
TCP Proxy 是架在客戶端和真實伺服器之間的「中間人」:客戶端連到本機端口,Proxy 收到後原封不動轉發到真正的私服 IP。比 netsh 更適合需要穩定運作、分發給多位玩家的情境。
不用自己寫,可以直接用現成的 MapleProxy v83:
java -jar MapleProxy.jar
localhost.exe 127.0.0.1 8480
Proxy 會監聽 8480 並轉發到你指定的私服 IP。連線成功時,遊戲內的世界事件訊息末尾會顯示 "Packet editor is working!" 作為驗證。
想自己動手寫的話,核心概念是監聽本機 Port、收到連線後開一個新的 Socket 連到真實伺服器,並把兩邊的資料流雙向轉發——同樣的邏輯需要套用在 Login(8484)、Channel(8585起)、Cash Shop(8610)三種 Port 上。
方法三:DLL Hook(給想做通用登入器的人)
如果你想發布一個「玩家不需要自己設定任何東西」的登入器,可以用 DLL Hook 攔截 Winsock 的 connect() 呼叫,在程式呼叫連線的當下直接把目標 IP 換掉。開源工具 AuthHook(支援 GMS v83~v130+)就是這個做法,依賴 Microsoft Detours 函式庫。
這個方法需要 C++ 和 Windows API 基礎,屬於登入器開發的範疇——如果你想深入理解 DLL Hook、Detours 這類技術的原理,可以參考路線 C 的 登入器完整開發課程。
新手建議
剛開始測試,直接用 STRedit 改 IP 最簡單。等到你需要同時測試多台伺服器、或想自己做一個登入器程式給別人用,再來研究 TCP Proxy 或 DLL Hook。