2019年11月23日 星期六

劍靈(Blade & Soul) - 血量與魔力值分析

在研究Bot時,分析人物的血量是開始的第一步,不過對於不熟悉逆向的同學,可能這步就非常困難,但對於逆向高手當然是輕而易舉,由於人物的血量在遊戲的介面是可以顯示他的數值,因此搜尋血量值就變得相較簡單,那麼在撰寫程式需要獲取他的位移值(Offset Value),這邊有人會有疑問,為什麼要獲取位移值 ? 因為遊戲重新啟動,他的DLL(Dynamic-Link Library)或EXE的模組起始位址可能每次都不一樣,所以如果不獲取到模組的位移值,就不能每次都穩定的抓取血量和魔力值。

一、血量與魔力值分析

在遊戲中,從介面上就能輕易的找到血量的數值,不過魔力值是沒有顯示數值,我們可以在記憶體附近找找看是否有類是的數值,恰巧介面上顯示十顆藍色的球,就是代表魔力值為十的數值,那麼這樣就完成搜尋血量與魔力值的步驟了。

a. [rcx+0x38]是人物的血量值,只要血量有變動,rdx會更新血量的數值。

b. 顯示暫存器rdx數值。

c. 遊戲介面上顯示血量的數值。

d. 在[rcx+0x38]記憶體上顯示血量的數值。

e. 從相同的結構下,找到的魔力值,與血量值相差0x40的位移。



二、搜尋血量與魔力的位移值

經過一連串的逆向奮鬥,終於找出[rcx+0x38]的rcx位移值,有時候遊戲會故意將位移值放置的非常遠,在分析時會花比較多點時間在找相關的數值,最後我們得到的血量位移值順序是add rcx,0x60、[rax+0x38]、[rax+0x88]、[141D39A20],其中只要獲取到[141D39A20]的完整數值,就是他的位移的終點([[[0x141D39A20]+0x88]+0x38]+0x60+0x38)。