aps32777

MapleShark 的使用方式

發表於 2026-3-30 16:03:04
aps32777 發表於 2026-3-30 16:03:04 | 顯示全部樓層 |閱讀模式
🐟 MapleShark 使用教學一、工具介紹
MapleShark 是一個專門用來:
  • 攔截(sniff)封包
  • 解析(decode)封包
  • 分析 opcode / 資料格式
👉 常用於:
  • 私服開發
  • 封包逆向

二、準備工具
你需要以下幾樣東西:
1️⃣ MapleShark 主程式2️⃣ WinPcap(抓封包必備)
https://www.winpcap.org/

三、啟動前設定1️⃣ 以系統管理員執行 MapleShark (不用也可)
2️⃣ 選擇網卡(Network Adapter)
打開 MapleShark 後:
  • 點選 File => MapleShark Setup
    螢幕擷取畫面 2026-03-30 153811.png
  • 選擇你的網路卡(通常是)
    螢幕擷取畫面 2026-03-30 153900.png
    • Ethernet
    • 或 Wi-Fi


四、開始抓封包1️⃣ 點擊「Start Capture」(預設會自動啟動)
👉 開始監聽封包

2️⃣ 打開《新楓之谷》
👉 登入遊戲後你會看到:
  • 封包開始出現
    螢幕擷取畫面 2026-03-30 154154.png
  • 分為:
    • Outbound(你發出去)
    • Inbound(伺服器回來)


五、封包解析(重點🔥)1️⃣ 選擇封包
點一個封包後會看到(範例為handshake packet):
螢幕擷取畫面 2026-03-30 154340.png
  • Hex 資料
  • ASCII
  • 解碼後結構(如果有 script)

2️⃣ Opcode 概念
每個封包前面會有:
👉 Opcode(操作碼)
例如(假設):

0x0015 → Login Request
0x00A3 → Move Player













👉 你需要:
  • opcode table(不同版本可能不同)

3️⃣ 解密(最關鍵)
MapleStory 封包通常有加密:
因此你開發新版本需要更新AES key
然後打開在資料夾底下的cached_keys.txt 輸入key 並儲存
每個版本的key 格式為下:
'''
<地區(TMS為6)>:<遊戲版本(如277)>.1
<AES key>
'''
例如TMS v277為
6:277.1
5E4CEC034C73E605B4310EAAADCFD5B0CA27FFD89D144DF4792759427C9CC1F8

六、載入 Script(進階解析)
MapleShark 支援 script:
👉 功能:
  • 自動解析封包結構
使用方式:
快速點擊兩下封包 會跳出script編輯器
螢幕擷取畫面 2026-03-30 155708.png
script的基本使用方式為下(AI協助翻譯)
📘 Interface(介面)
保留(Reserved)

📘 Scripting(腳本系統)
所使用的腳本引擎為 ScriptDotNet,也稱為 S#。
關於 S# 語法,可參考:
http://www.protsyk.com/scriptdotnet/

📌 函式說明格式
所有函式皆遵循以下格式:

<回傳型別> <函式名稱>(<參數>)














📌 Script 環境說明
在腳本中只會暴露一個物件:
👉 ScriptAPI
所有函式都需透過此物件呼叫,例如:



ScriptAPI.AddByte("Example");














🧩 資料解析函式
🔹 byte AddByte(string name)
新增一個「無符號位元組(byte)」欄位到結構視圖中,並以指定名稱命名,回傳該值。

🔹 sbyte AddSByte(string name)
新增一個「有符號位元組(sbyte)」欄位,並回傳其值。

🔹 ushort AddUShort(string name)
新增一個「無符號短整數(ushort)」欄位,並回傳其值。

🔹 short AddShort(string name)
新增一個「有符號短整數(short)」欄位,並回傳其值。

🔹 uint AddUInt(string name)
新增一個「無符號整數(uint)」欄位,並回傳其值。

🔹 int AddInt(string name)
新增一個「有符號整數(int)」欄位,並回傳其值。

🔹 float AddFloat(string name)
新增一個「4 位元組浮點數(float)」欄位,並回傳其值。

🔹 double AddDouble(string name)
新增一個「4 位元組雙精度浮點數(double)」欄位,並回傳其值。
(⚠️ 注意:此描述可能為舊版本錯誤)

🔹 bool AddBool(string name)
新增一個「布林值(bool)」欄位(1 byte):
  • 0 → false
  • 1 → true
並回傳其值。

🔹 long AddLong(string name)
新增一個「有符號長整數(long)」欄位,並回傳其值。

🔹 double AddDouble(string name)
新增一個「8 位元組雙精度浮點數(double)」欄位,並回傳其值。

🔹 string AddPaddedString(string name, int length)
新增一個「固定長度字串」欄位:
  • 長度由 length 指定
  • 若不足會補齊
並回傳該字串內容。

🔹 void AddField(string name, int length)
新增一個指定長度的欄位到結構視圖中(純資料區塊),不回傳值。

🌳 結構節點(用來分層顯示)
🔹 void StartNode(string name)
建立一個子節點(Node),並作為新的父節點,直到呼叫 EndNode。

🔹 void EndNode(bool expand)
結束最近一次的 StartNode:
  • expand = true → 預設展開節點
  • expand = false → 預設收合

📂 檔案操作
🔹 void Write(string file, string line)
將指定文字 line 追加寫入到檔案 file 中。

📊 其他功能
🔹 int Remaining()
回傳封包中「尚未被解析的剩餘位元組數量」。

大概這樣 如果需要script實戰範例  底下留言敲碗



瀏覽 1971 回復 11

您需要登錄後才可以回帖 登錄 | 註冊會員

返回頂部