2019年12月7日 星期六

劍靈(Blade & Soul) 逆向分析研究 - 附近怪物的遍歷

上一次的逆向分析是關於人物的血量和魔力值,那麼這次的分析是附近怪物的遍歷,只要是接近我們的怪物就印出怪物的名稱和血量,那麼在尋找遊戲中的遍歷程式碼就相當的關鍵,如果不熟悉遊戲的架構,在分析怪物的物件就會比較困難,因此只要了解任何一款MMORPG的架構,就能輕易的找到遍歷的位址。

一、物件遍歷分析

大多數的遊戲遍歷物件(怪物、NPC、玩家、物品等等)的架構都是使用二元搜尋樹的演算法,因此熟悉演算法的同學就能很快的理解遍歷的程式碼。

rsi是樹的起始位址,rbp是結束的位址,只要rsi遍歷到與rbp相同的位址,就代表已經遍歷完成了整個物件。



mov rax, [rax],是獲取左子樹的物件。



mov rax, [rsi+8],是獲取右子樹的物件。



二、怪物的血量分析

add rax, [rbx+0x320],其中[rbx+0x320]是存取怪物的血量。



我們可以從觀察怪物的血量為679 (十六進制是2A7),這樣就能確認怪物血量的偏移位址。



三、怪物名稱分析

獲取怪物的名稱,我們會需要call [rax+c8]來獲取怪物名稱的回傳位址,那麼第一個參數(rcx)是怪物名稱表,第二個參數(rdx)是怪物名稱的識別ID,最後呼叫完的rax就是怪物名稱的資訊。



四、運行結果