冰楓論壇

 找回密碼
 立即註冊
查看: 175|回覆: 3
打印 上一主題 下一主題

[原創] 楓之谷代碼分析 找出想要的功能&寫出想要的數據(260905更新)

  [複製鏈接]

2

主題

0

好友

8

積分

新手上路

Rank: 1

UID
22592
帖子
25
主題
2
精華
0
積分
8
楓幣
526
威望
6
存款
0
贊助金額
0
推廣
0
GP
4
閱讀權限
10
在線時間
34 小時
註冊時間
2013-2-6
最後登入
2026-9-5
跳轉到指定樓層
1
發表於 4 天前 |只看該作者 |倒序瀏覽
本帖最後由 604759123 於 2026-9-5 15:03 編輯

前言

各位壇友們好

近期古早味的楓之谷熱潮再現,除了Artale還有經典服

就想回味一下古早的功能是怎麼搞

最近開始重新探險,較少看到代碼查找攻略又或者是已經消失

因此結合網上有人分享過加自己研究的內容,做一個紀錄分享,也希望有興趣研究的朋友們一起耍

有些東西可能不是正確或有更好的做法,若有大佬看到也請不吝指點

(不好意思原本有附圖片,但文章內要進行上傳壓縮才能貼出來,我會再整理重新貼上,後續可能也考慮用影片比較適合)


--
環境說明

首先,因為主要的目的及體驗是找出功能及修改的樂趣,我只使用私服測試

第一、沒研究Anti-cheat相關的內容,第二、能使用私服GM指令可以輔助很多

當然其思路在對應的相關版本應該是通用的

感謝各位前人的傳承,以及後續開發私服、登入器的大佬們,讓小弟有機會能踏上這時空之旅

環境&工具如下:
CE(Cheat Engine) @dark Byte https://github.com/cheat-engine/cheat-engine
(必備工具,在使用下列的相同環境下,不用搞成UCE,大概只要改成VEH debugger,之後會研究下用x32dbg, ghidra來輔助找些花樣)

TwMs CEM @冰楓 https://bingfong.com/thread-6812-1-1.html
(想測試或比較不同的數據功能,可以參考不同版本)

TWMSv113伺服器 @D363N6UY https://github.com/D363N6UY/MapleStory-v113-Server-Eimulator
(自己開服用的工具,內容算很純淨,版本則是因為跟古老反盾、狂狼反盾接近,可玩私服也很多,適合拿來研究修改)

TWMSv113~v194登入器 @zhyon https://github.com/zhyonc/TMSLauncher
(這個登入器很重要,移除了HS、移除CRC校驗...等等反作弊的內容,用這款可以減少很多挫折)

代碼功能及數據方面,要感謝的太多了,列不完…

--
指針

基礎的CE操作的話,因為已經有很多教學,不太多贅述
但在找功能上,因為工具的更新,有些找法可以精簡些
先來找個簡單的,人物座標x方向開始搞起,這裡先打詳細一點,其他都可以以此類推

人物座標:

        1. 使用CE搜尋未知的值、變動的值
        2. 透過左右走、原地不動,來找出放x值的地址
        3. 剩下過濾完的地址,可以看出x往右是+,往左是-
        4. 找到x值的儲存地址後(可能會有多個,多切換地圖,可以過濾掉剩下幾個,加入到地址列表,
        右鍵看下"找誰訪問(Find out what accesse this address[F5])"、"找誰改寫Find out what writes this address[F6]",確認結尾偏移值
        5. 加入到代碼列表後,右鍵Generate pointermap,保存
        6. 重開遊戲,再找一次儲存x值的地址,右鍵選擇Pointer Scan,並使用剛才儲存的地址做比較
        (重開時的小技巧,記住幾個地圖傳送後的值,重開後直接搜尋這些值就好)
        7. 如果還有很多地址,可以使用工具列右邊的Rescan指定結尾的偏移值,或多做幾次儲存再比較
        8. 將剩下的指針都雙擊放入代碼列表,重開遊戲、換頻可以找到最後剩下唯一的(也可能還有數個)
        9. 遊戲設計上通常y座標位於X座標的偏移+4*n/-4*n,試了一下發現是+4,因此也獲取了y的指針,y是上-下+
        
        
牆壁座標:

        1. 因為我們有了人物座標,可以使用人物走到最左跟最右邊,來大概推測牆壁X左值、右值
        2. 走到最左邊,直接搜尋人物此時X座標範圍值,最右同理
        (info: 我原本是用範圍去抓,後來發現值跟人能走到的位置相同。此牆壁的值可以限制新產生的怪物座標)


滑鼠座標:
        
        1. 根據人物的左-右+,推測滑鼠也是,很快能找到


人物狀態:

        1. 切換人物左右、爬梯、跳躍、趴下,使用變動的值可以找到儲存地址,一樣使用Pointer scan能快速找出基址+偏移
        (找到人物狀態後,可以使用Memory View->Tool->Dissect structure,看出一些其他功能的端倪)
        (info: 面左5/左走3/左爬繩11/左趴B/左跳(含被撞)7/游泳左D/墓碑左13
        右邊等於左-1 ex:面右=4)


喘氣狀態(停止呼吸):

        1. 利用攻擊後、被攻擊後的狀態,搜尋變動的值可以找到
        (info: 5000ms倒數到0)
        
        
攻擊次數(攻擊不停):
        
        1. 假設我們不知道一開始沒攻擊的值=0,一樣搜尋未知的值、打幾下、增加的值,可以搜出來
        (info: 換地圖可以歸零)


--
指令修改&編寫數據&功能實現


根據歷史代碼及數據來看,早期沒有CRC bypass的時候,大部分是使用硬體斷點改變暫存器或改變Flag來完成功能
後來還有ICS數據的方式,而我們使用的登入器可以好好享受沒有這困擾

攻擊不停:
        一樣是Hello World的攻擊不停開始,其實打勾鎖定住指針就能實現,不過我不確定是不是因為私服關係
        這邊用修改指令&寫數據方式,可以不用找到基址跟偏移就達到功能了
        
        一開始搜到攻擊次數的值後,因為我們想知道哪邊寫入,直接右鍵"找誰改寫" ,接著攻擊一下,會跳出一條計數1的指令
        mov [ecx+08],eax 可以看出把eax內容放進我們找到的地址,剛好上一條很明顯是inc eax,我們可以請他不要+1
Screenshot 2026-09-01 235415.png
        有幾種作法:
                1. 就直接nop掉,用簡單的數據寫入,可以看到數字不會再增加,目前測試還沒有異狀

Screenshot 2026-09-02 103716.png

Screenshot 2026-09-02 103836.png
                2. 上面有個判斷可以改寫指令 (把比較值無限大、比較完的跳轉改成跳過計算那行...)
                mov eax,[ecx+08] //目前儲存的地址
                cmp eax,[ecx+0C] //下斷點可以知道這裡是100(停止攻擊)
                jl 0096ED66 //比較結果 小於等於100就去inc那行
Screenshot 2026-09-02 105730.png

        推敲出代碼前面的邏輯,就比較好操作了
      

無敵:
        先推測什麼情況下有無敵(假設是不會被碰撞): 1.被撞到之後短暫期間 / 2.MISS之後短暫期間 / 3.開啟某些技能 / 4.死亡 ...
        我們前面有找出人物狀態,可以利用被撞到時的狀態來下斷,並且是只有傷害時才改寫或訪問到這個位置
        可以看到只有一條是被撞到時才出現計數1
        查看指令位置可以看到有一條
U035784Glo
        cmp eax,12 //比較是否為墓碑狀態
        下面je則是如果是墓碑就跳轉,我們可以先測試有什麼效果
        讓他直接跳轉(jmp)過去,怪物會直接碰不到,原因大概是把你當成墓碑了
Screenshot 2026-09-01 234735.png
        

        補充說明 : 這邊可以用一下以前的硬體斷點改法演示,以前常看到 ZF[V][] 類似這種,意思是改暫存器標示,所以這邊根據JE判斷方式(ZF=1),我們可以做如下修改
Screenshot 2026-09-02 102736.png
        那這樣就是ZF=1的效果了
        也可以利用EIP直接指定你要跳轉地址哦

        (這邊的無敵算有點導果為因的找法...一來是我印象我有看過,二來是找傷害/碰撞判斷感覺比較正規,後續會再研究不同種類的無敵)


撞擊時間(連撞/無敵秒數):
        從無敵附近及相關代碼稍微閒晃一下,看到了一個特殊的comment,寫了1500
        這不就是撞擊後的冷卻時間嗎?(1500ms,根據喘氣時間大略計算)
        直接改成0測試 => 實現連撞
        那麼改成其他秒數 => 實現幾秒後無敵 (類似老版本58秒無敵那種效果)
Screenshot 2026-09-01 234642.png

      

MISS連撞:
        一樣在附近閒晃,看到-1500,直接狠狠地把它改成0 => 就變成了MISS連撞啦(還沒達成MISS無敵,所以有傷害)
Screenshot 2026-09-01 234519.png
      

--260905 更新
吸怪V1:
我們前面找到了人物座標,可以進行"找誰改寫",原本想先測試移動速度或距離的調整
查找影響座標的內容時
  1. MapleStory.exe+5D4FA7 - 89 03                 - mov [ebx],eax
複製代碼
看到這個EAX值可以先手癢改看看,EAX改成FFFFFFFF(-1)
Screenshot 2026-09-05 000117.png
形成了一個詭異的X值吸怪 那估計Y值的這個指令也加入,就會變成雙方向的吸怪了
看一下Y方向也下斷EAX改FFFFFFFF(-1)
所以猜測這個位置就是共用”座標寫入”指令 由於這邊是寫入的指令,所以修改後角色無法移動
我們可以推測一下,想吸怪的話,就是在寫這個值的時候,怪物的值直接跟隨玩家的值
我們大概有了基本的數據想法
  1. 偽代碼:

  2. 修改處:
  3. 目前這個寫入X座標的指令,把[玩家座標]放入
  4. 繼續執行

  5. X指令移動的地方:
  6. 跳到 修改處
  7. (Y同理)
複製代碼
接下來就是老用戶都知道了,Memory view->Tool->Auto Assemble->Cheat Table Framework Code
  1. [ENABLE]
  2. alloc(VacV1,1024)           //註冊一段區塊用來放我們寫的數據,取名為吸怪V1(VacV1)
  3. label(MobX)                 //設定一個數據內的標籤,X修改的位置
  4. label(MobY)                 //設定一個數據內的標籤,Y修改的位置
  5.                                       
  6. VacV1:                      //數據的內容   
  7.   MobX:                     //X修改的位置  
  8.   mov eax,[[00BF16E8]+EC0]  //EAX寫入為玩家座標(用指針取 值)
  9.   mov [ebx],eax             //X位置原本代碼
  10.   mov edi,[ebp+10]          //原本下一行代碼
  11.   jmp 009D4FAC              //原本下二行代碼
  12.                                       
  13.   MobY:                                                //Y修改的位置  
  14.   mov eax,[[00BF16E8]+EC4]  //EAX寫入為玩家座標(用指針取 值)
  15.   mov [edi],eax             //Y位置原本代碼
  16.   mov ebx,[ebp+14]          //原本下一行代碼
  17.   jmp 009D5011              //原本下二行代碼
  18.                                       
  19.   009D4FA7:                                        //原本寫入X指令的位置
  20.   jmp MobX                                        //跳去自己寫的數據
  21.                                       
  22.   009D500C:                                        //原本寫入Y指令的位置
  23.   jmp MobY                                        //跳去自己寫的數據
  24.                                       
  25. [DISABLE]                                        //取消時還原   
  26. 009D4FA7:                             
  27.   DB 89 03 8B 7D 10                  
  28. 009D500C:                             
  29.   DB 89 07 8B 5D 14                  
  30. dealloc(VacV1)                        
複製代碼
Screenshot 2026-09-05 144320.png
可以看到所有怪物都被吸過來了
延伸: 由於此時大家共用此代碼,會被強制寫入,角色不能移動,我們會希望只有怪物執行
那麼怎麼分別人物與怪物呢?
這時候在指令處右鍵使用”Find out what address this instruction accesses” 找出誰在原本這些指令
並將Value設置為signed(有符號顯示),比較好分辨那些是當前有在地圖座標內的地址

Screenshot 2026-09-04 233859.png
除了人物本身的座標位置,其他就是怪物的了,還有一些目前不明的資訊
我們先點選玩家,設定為Group1(群組1);怪物相關的Ctrl多點幾個設定為Group2,接著把這兩個群組的地址都選起來
按Scan for commonalties
Screenshot 2026-09-04 234615.png
用來比較區別的內容

然後來做一下這版本吸怪的實際測試,可以看到這個修改方法的已知問題:
1.取消時怪物會立即回到原本位置,
2.掉落物品在原本位置
3.NPC也會被吸過來
4.以上幾點可知,並非完全修改了物件真正的座標



其他後續補充

--

目前是下班有閒情逸致想到就會開機來搞一下,偶爾搞搞其他遊戲,結果最後也是在玩CE,哈哈
其他再陸續更新,也可能想用影片,或許邊研究邊錄邊說會方便一點,也期待壇友們或大佬可以分享一些思路提供
不要去打敗黑魔法師了,一起成為黑魔法師吧



已有 1 人評分楓幣 威望 彩票 GP 收起 理由
qqwwerwe + 10 + 1 + 1 + 2 讚一個!

總評分: 楓幣 + 10  威望 + 1  彩票 + 1  GP + 2   查看全部評分

收藏收藏1 推1 噓0

分享這篇文章



把本文推薦給朋友或其他網站上,每次被點擊增加您在本站積分: 1彩票
複製連結並發給好友,以賺取推廣點數
簡單兩步驟,註冊、分享網址,即可獲得獎勵! 一起推廣文章換商品、賺$$

2

主題

0

好友

8

積分

新手上路

Rank: 1

UID
22592
帖子
25
主題
2
精華
0
積分
8
楓幣
526
威望
6
存款
0
贊助金額
0
推廣
0
GP
4
閱讀權限
10
在線時間
34 小時
註冊時間
2013-2-6
最後登入
2026-9-5
2
發表於 3 天前 |只看該作者
卡個位置補充其他功能
[發帖際遇]: 604759123 在網咖通宵,花了 1 楓幣 幸運榜 / 衰神榜
Times
點評回覆

使用道具 舉報

0

主題

0

好友

0

積分

新手上路

Rank: 1

UID
389771
帖子
3
主題
0
精華
0
積分
0
楓幣
24
威望
0
存款
0
贊助金額
0
推廣
0
GP
0
閱讀權限
10
性別
保密
在線時間
3 小時
註冊時間
2023-5-10
最後登入
2026-9-5
3
發表於 3 天前 |只看該作者
怀旧服dump出来丢给AI想要什么跟AI讲就好了

點評

604759123  其實我想感受的是古早時期的探索之旅 :D  發表於 3 天前
點評回覆

使用道具 舉報

5

主題

0

好友

5

積分

新手上路

Rank: 1

UID
41531
帖子
83
主題
5
精華
0
積分
5
楓幣
83
威望
4
存款
0
贊助金額
0
推廣
0
GP
3
閱讀權限
10
性別
保密
在線時間
26 小時
註冊時間
2014-1-4
最後登入
2026-9-3
4
發表於 前天 21:21 |只看該作者
好猛,一步一步走出歷史感
點評回覆

使用道具 舉報

高級模式
B Color Image Link Quote Code Smilies

廣告刊登意見回饋關於我們管群招募本站規範DMCA隱私權政策詐騙防範及資料調閱

Copyright © 2011-2026 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|手機版|冰楓論壇

GMT+8, 2026-9-5 21:34

APP Store下載 Play Store下載
回頂部