2019年12月13日 星期五

劍靈(Blade & Soul) 逆向分析研究 - 列舉人物技能ID

在自動化的過程中,必須要分析人物的攻擊,那麼就要知道程式是使用哪個函式來調用技能,在調用技能之前需要將技能的所有物件和ID列舉出來,所以這次的工作就是把技能物件、技能ID、名稱印出來。

一、技能列舉分析

技能的列舉方法跟上次分析怪物的遍歷非常類似,一樣是使用二元搜尋樹的架構,因此這次就能更快上手此演算法。

rbx是技能物件的起始位址,rax是技能物件的結束位址,只要兩者相等,代表列舉技能結束。



當然要繼續列舉其他技能物件,就需要透過樹的列舉,首先從左子樹開始列舉,mov rax,[rax]是獲取技能左子樹物件到rax。



接下來是獲取技能右子樹物件,mov rax,[rbx+8],是獲取技能右子樹物件到rax。



二、技能ID分析

技能物件加8後的4 Bytes就是技能的ID,0x27100是流風斬技能的ID,要使用此技能,就需要透過此技能ID來運作它。



三、技能名稱分析

對於想要使用什麼技能時,就需要知道那個技能物件的名稱,這樣才能正確的呼叫此技能,所以我們需要去分析是如何獲取技能名稱,那麼它跟獲取怪物名稱是同樣的方法,所以我們就直接拿上次的程式碼來獲取技能名稱。

在獲取技能的名稱,需要調用[rax+C8]的函式,第一個參數rcx是技能名稱表,第二個參數rdx是技能名稱ID,那麼要獲取技能名稱ID,需要在技能物件加0xBC,這樣就能獲取4 Bytes的技能名稱ID,最後再調用此函式就能成功獲取該技能名稱。





四、運行結果



由於是列舉人物的所有技能,因此沒有將全部的技能名稱截圖下來,最後可以比對遊戲裡面的技能名稱,是否跟列舉的一樣。