本帖最後由 adf99 於 2010-9-13 18:50 編輯
大概在1個月之前有網友艾莫斯請我幫他解一個遊戲的封包
我看了一下發現 , 這個遊戲送出相同動作的封包都是一模一樣的
心裡就有底 , 應該有80%的機會可以解出來
結果沒想到這款遊戲是用最原始的方式來加密(XOR , 與其說加密不如說只是編碼)
沒三兩下就找出了加密的Key值 , 成功的解出了封包
一問之下才知道這是最近廣告打很兇的線上遊戲 "天子傳奇"
於是就引起我對開發這款遊戲外掛的高度興趣!!
趕緊翻箱倒櫃找出當年開發亂online外掛時所自製的封包分析工具(VB寫的)
結果發現不是很合用 , 而且問題一堆
加上VB我已經荒廢多年 , 都忘的差不多 , 要修改起來非常痛苦
於是決定還是使用C#來重新撰寫這個工具吧!!!
由於從來沒有使用過.net攔截封包 , 於是上網搜尋了一下
發現有一個非常好用的Library 叫 "EasyHook" , 他能完全使用.net來撰寫注入的DLL
實在非常的方便 , 不過在開發的過程中發現 , 他雖然非常的好用
但可能是因為他Hook的方式非常特別 , 速度上似乎稍微慢了點
且有時候會發生無法將DLL完全的卸載乾淨
此時只能使用gacutil.exe /uf指令來移除
雖然有上述的一些缺點但EasyHook還是瑕不掩瑜的成為我首選的Hook工具
因此沒有多久新版的封包分析工具就完成了
▲封包分析程式
有了封包分析程式後 , 就是要來好好看看這個遊戲 , 是如何傳送資料的
基本的封包格式為 , 表頭 + 封包長度 + 控制碼 + 資料內容
- 表頭:是用來辨識該封包是何種格式 , 目前分析出來只有兩種 , 差別只在封包的長度
- 封包長度:記錄了該封包的總byte數 , 而不同的表頭決定了長度資料是用幾個byte存放
- 控制碼:決定了該封包的用途 , 例如:是移動還是說話封包
- 資料內容 : 由控制碼決定該內容的格式 , 例如:是移動封包的話就存放著座標的資料,說話則是對話的內容
掌握了封包格式後 , 就開始想要來測試看看能不能在遊戲裡達成一些"不可能的任務"
例如:送出移動封包來個瞬間移動 , 或是送出攻擊封包來個隔空打怪....等等
結果發現事與願違 , 這遊戲在server端做得非常嚴謹 , 想要移動必須要知道所有移動的路徑
想要打怪就必須身處目標的附近 , 總而言之就是每個動作他都會檢查合理性
如果不合理 , 輕則沒有回應 , 重則直接斷線 , 真的是非常的嚴苛
比起之前的亂online , 隨隨便便就能施展乾坤大挪移來的好太多了
看來只好乖乖的慢慢分析封包內容啦!!
|