冰楓論壇

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

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

  [複製鏈接]

2

主題

0

好友

21

積分

新手上路

Rank: 1

UID
22592
帖子
33
主題
2
精華
0
積分
21
楓幣
834
威望
19
存款
0
贊助金額
0
推廣
0
GP
11
閱讀權限
10
在線時間
45 小時
註冊時間
2013-2-6
最後登入
2026-10-11
跳轉到指定樓層
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
帖子
33
主題
2
精華
0
積分
21
楓幣
834
威望
19
存款
0
贊助金額
0
推廣
0
GP
11
閱讀權限
10
在線時間
45 小時
註冊時間
2013-2-6
最後登入
2026-10-11
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

好友

14

積分

新手上路

Rank: 1

UID
514911
帖子
24
主題
0
精華
0
積分
14
楓幣
1123
威望
13
存款
0
贊助金額
0
推廣
0
GP
0
閱讀權限
10
性別
保密
在線時間
13 小時
註冊時間
2026-6-12
最後登入
2026-10-11
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
楓幣
1401
威望
49
存款
0
贊助金額
0
推廣
0
GP
3
閱讀權限
10
性別
保密
在線時間
124 小時
註冊時間
2013-3-14
最後登入
2026-10-9

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-5
9樓
發表於 2026-9-24 16:30:37 |只看該作者
走路和释放技能call能不能找出来

點評

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

使用道具 舉報

42

主題

0

好友

1021

積分

金牌會員

Rank: 6Rank: 6

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

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

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

點評

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

使用道具 舉報

高級模式
B Color Image Link Quote Code Smilies

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

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

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

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

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

GMT+8, 2026-10-11 14:54

APP Store下載 Play Store下載
回頂部