冰楓論壇

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

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

  [複製鏈接]

2

主題

0

好友

21

積分

新手上路

Rank: 1

UID
22592
帖子
34
主題
2
精華
0
積分
21
楓幣
835
威望
19
存款
0
贊助金額
0
推廣
0
GP
11
閱讀權限
10
在線時間
45 小時
註冊時間
2013-2-6
最後登入
2026-10-17
跳轉到指定樓層
1樓
發表於 2026-9-1 23:57:09 |只看該作者 |倒序瀏覽
本帖最後由 604759123 於 2026-9-21 23:56 編輯

前言

各位壇友們好

近期古早味的楓之谷熱潮再現,除了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-12 114648.png
        那這樣就是ZF=1 (Zero Flag=true)的效果了
        也可以利用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(CS):
我們前面找到了人物座標,可以進行"找誰改寫",原本想先測試移動速度或距離的調整
查找影響座標的內容時
  1. MapleStory.exe+5D4FA7 - 89 03                 - mov [ebx],eax
複製代碼
看到這個EAX值可以先手癢改看看,EAX改成FFFFFFFF(-1)
Screenshot 2026-09-05 000117.png
形成了一個詭異的X值吸怪,並且座標位於-1,那估計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.以上幾點可知,並非完全修改了物件真正的座標
5.我查找了下AOB,發現這個改法就是古早時期所謂的CS(Client Side)吸怪

--20260907更新
全體界王拳: (人物怪物加速、跳躍高度增加):
看到修改座標的指令附近有個的float 增加0.5的註解,直接先改看看,直覺上是加速度之類的
我們先把0.5修改掉看看
Screenshot 2026-09-07 190121.png

先點擊這個位置,他是從這個地址取值,我們將其加入代碼列表
值是0.5,所以把顯示改成float或double才能正確顯示
Screenshot 2026-09-07 201346.png


接著先修改大一點試試,把他改成5
發現人物跟怪物都被加速了,而且連跳躍力也倍增
大概是十倍界王拳的效果
Screenshot 2026-09-07 200121.png

這個功能我以前沒有玩過,不知道舊版是叫什麼咧

--260917 更新
攻擊/技能加速V1:
近期在嘗試弓箭手相關的技能修改,剛好在尋找進行技能初始的位置,方便後面做break and trace的完整起點
我使用 技能發射、角色不動,利用變動的數值來尋找,大約還剩下4~50個地址,有一排明顯的是正在倒數,直接對他找誰改寫,然後測試看看
Screenshot 2026-09-17 210833.png
這個位置會在使用技能後不斷將-1E的值寫入,就可以改看看,蠻多時候都是這樣誤打誤撞搞到些新花樣
我想將數值改多一點,但是改大這條的byte會不夠被吃掉,因此需要使用數據寫入
Screenshot 2026-09-17 211054.png
接著我們回到遊戲測試,可以看到技能跟攻擊都會被加速,連人也開始抽搐起來
有發現的問題是它有個初始值,要再針對初始做優化才行,而修改的值也有上限
Recording 2026-09-17 211649.gif
可以觀察原本的指令在Memory view上下有什麼
由於ecx, edi在此下斷時都是0
其實上面那行改成imul ecx,ecx,00000001可以同樣效果
下方的jg是大於0就跳,改成不跳也是同樣效果 (ZF改1 or 跳下一行執行)
Screenshot 2026-09-17 230124.png

--260921更新
近戰不揮弓:
近戰無延遲(揮弓也是):
近戰怪物僵直時間:
找尋攻擊發動:變化的值、站著不動:變化的值
找到一個位置顯示不同攻擊狀態,查找誰改寫
這條指令可看到每次使用攻擊,是揮弓+射箭都有+1 (另外一條是攻擊完才觸發就先不管了)
Screenshot 2026-09-21 233410.png

從這邊就可以獲得攻擊狀態指針
EDI的值=攻擊方式的狀態,改成要的狀態則下次攻擊是該狀態,測試後只有改變動畫,實際上是原本的攻擊方式
意思是數值直接改成射箭,近戰時也只是射箭型態的揮弓…
推測要馬是要找出誰給值,或者找出判斷近戰的指令
而在這邊下斷的時候可以注意到揮弓、射箭在memory view右下角的return address不一樣,而給的內容剛好是我們看到的動作值

Screenshot 2026-09-21 233901.png
猜測程式應該是這樣跑:  揮弓->跑到這,再回去某處;射箭->跑到這,再回去某處
那可以先進入到近戰揮弓那條返回位置去找,看誰對他做了判斷或給值
返回點的上一條指令是call原本找到的那條指令,所以往上看判斷,並下斷測試是不是揮弓相關
Screenshot 2026-09-21 235250.png
順便發現了額外功能
這可能不是最快的搜尋方法,比我想的複雜了一點



其他後續補充

--

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



已有 7 人評分楓幣 威望 鑰匙 GP 收起 理由
Grave + 5 + 1 + 1
mm811127 + 15 + 1 + 1 + 2 太認真了
玉米悠 + 20 + 2 + 1 + 2
冰楓 + 10 + 1 + 1 讚一個!
このすば + 1
OuO880412 + 2 + 1 + 1 有神快拜!
qqwwerwe + 10 + 1 + 1 + 2 讚一個!

總評分: 楓幣 + 62  威望 + 6  鑰匙 + 5  GP + 9   查看全部評分

收藏收藏1 推推4 噓噓0

分享這篇文章



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

2

主題

0

好友

21

積分

新手上路

Rank: 1

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

使用道具 舉報

0

主題

0

好友

0

積分

新手上路

Rank: 1

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

點評

604759123  其實我想感受的是古早時期的探索之旅 :D  發表於 2026-9-2 20:21
點評回覆

使用道具 舉報

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樓
發表於 2026-9-3 21:21:59 |只看該作者
好猛,一步一步走出歷史感

點評

604759123  走一次先人走過的足跡,很好玩的  發表於 2026-9-7 00:43
點評回覆

使用道具 舉報

0

主題

0

好友

15

積分

新手上路

Rank: 1

UID
514911
帖子
24
主題
0
精華
0
積分
15
楓幣
1190
威望
14
存款
0
贊助金額
0
推廣
0
GP
0
閱讀權限
10
性別
保密
在線時間
13 小時
註冊時間
2026-6-12
最後登入
2026-10-17
5樓
發表於 2026-9-6 23:17:28 |只看該作者
版主有料推推
到時候假日有空也想來摸索看看><

點評

604759123  現在CE新增的功能,能幫助很多,歡迎加入重生回2010  發表於 2026-9-7 00:44
點評回覆

使用道具 舉報

5

主題

0

好友

32

積分

新手上路

Rank: 1

UID
336558
帖子
92
主題
5
精華
0
積分
32
楓幣
642
威望
29
存款
0
贊助金額
0
推廣
0
GP
5
閱讀權限
10
性別
保密
在線時間
63 小時
註冊時間
2022-3-10
最後登入
2026-10-2
6樓
發表於 2026-9-7 00:01:44 |只看該作者
为什么不做正式服呢,更加有挑战的难度

點評

604759123  任何版本的正式服都得先搞定相關Anti-Cheat, CRC bypass, 甚至有debugger問題,等這些歷史功能的實現方式達成,或許會參與吧  發表於 2026-9-7 00:42
點評回覆

使用道具 舉報

5

主題

0

好友

32

積分

新手上路

Rank: 1

UID
336558
帖子
92
主題
5
精華
0
積分
32
楓幣
642
威望
29
存款
0
贊助金額
0
推廣
0
GP
5
閱讀權限
10
性別
保密
在線時間
63 小時
註冊時間
2022-3-10
最後登入
2026-10-2
7樓
發表於 2026-9-7 01:14:27 |只看該作者
763410932 發表於 2026-9-7 00:01
为什么不做正式服呢,更加有挑战的难度

你说的这些内容论坛上都有的卖,只是希望多点作者可以做出来给我们用

點評

604759123  但是我並不是在賣呀 XD 主要是能自己依照同樣邏輯自行找到功能 也不限於冒險島的遊戲囉  發表於 2026-9-7 09:49
點評回覆

使用道具 舉報

6

主題

0

好友

55

積分

新手上路

Rank: 1

UID
26350
帖子
128
主題
6
精華
0
積分
55
楓幣
1405
威望
49
存款
0
贊助金額
0
推廣
0
GP
3
閱讀權限
10
性別
保密
在線時間
124 小時
註冊時間
2013-3-14
最後登入
2026-10-15

2021中秋節紀念勳章

8樓
發表於 2026-9-7 09:59:48 |只看該作者
很棒的教學耶 雖然都是老東西了 過去頂多拿著數據去CE勾選 現在有你這篇可以自己摸索一下 期待你繼續更新反盾跟召喚獸無延遲~

點評

604759123  歡迎加入重生回2010楓之谷  發表於 2026-9-7 14:18
hi hi hi
點評回覆

使用道具 舉報

0

主題

0

好友

0

積分

新手上路

Rank: 1

UID
455238
帖子
2
主題
0
精華
0
積分
0
楓幣
-8
威望
0
存款
0
贊助金額
0
推廣
0
GP
0
閱讀權限
10
性別
保密
在線時間
6 小時
註冊時間
2024-9-8
最後登入
2026-10-13
9樓
發表於 2026-9-24 16:30:37 |只看該作者
走路和释放技能call能不能找出来

點評

604759123  我沒有在研究自動化相關的欸  發表於 2026-9-25 14:29
點評回覆

使用道具 舉報

42

主題

0

好友

1022

積分

金牌會員

Rank: 6Rank: 6

UID
19511
帖子
412
主題
42
精華
0
積分
1022
楓幣
504
威望
184
存款
153987
贊助金額
0
推廣
1
GP
122
閱讀權限
70
性別
保密
在線時間
16750 小時
註冊時間
2013-1-3
最後登入
2026-10-14

2016年紀念勳章 性別(女) 神手勳章 太陽勳章 幼兒勳章 私服達人 2017年紀念勳章 Android勳章 Apple勳章 音樂勳章 懶人勳章 論壇粉絲 積分勳章 解說達人 2018年紀念勳章 發帖達人 論壇支持王 長老勳章 在線終極王 2018端午節紀念勳章 2019年紀念勳章 2020年紀念勳章 2021年紀念勳章 2023年紀念勳章 2025年紀念勳章 屁孩勳章 2026年紀念勳章

10樓
發表於 7 天前 |只看該作者
也太認真了XD
現在已經沒有過去的動力搞這些東西了
話說三轉即將開放,接下來要迎接召喚獸無延遲的時代了

點評

604759123  主要是小時候沒機會好好研究 現在回味童年的多巴胺  發表於 6 天前
點評回覆

使用道具 舉報

高級模式
B Color Image Link Quote Code Smilies

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

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

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

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

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

GMT+8, 2026-10-17 15:28

APP Store下載 Play Store下載
回頂部