2020年6月30日 星期二

劍靈(Blade & Soul) 逆向分析研究 - 人物移動方向計算

人物在移動時,如果遇到轉彎,需要讓它識別什麼時候是左轉、右轉或是往後移動,所以我們需要分析人物在移動到下一個坐標前,它的移動方向是哪裡。

劍靈人物移動方向有兩種方式:


1. 使用鍵盤來移動人物,方向的移動是透過滑鼠。

需要獲取人物坐標,然後自行去計算滑鼠移動的距離。



2. 透過滑鼠來移動人物和方向。

程式裡面就有計算人物移動方向的函式,因此我們可以分析它是如何計算的。



人物移動方向分析


步驟一:

xmm4是人物當前坐標x。

xmm3是人物當前坐標z。

xmm2是人物當前坐標y。

[rdi+80]是人物移動坐標x。

[rdi+84]是人物移動坐標z。

[rdi+88]是人物移動坐標y。

人物當前坐標減去人物移動坐標。



步驟二:

xmm1和xmm3是步驟一的坐標z相減後的值。

xmm1乘上xmm3。

xmm0和xmm4是步驟一的坐標x相減後的值。

xmm0乘上xmm4。

xmm1加上xmm0。



步驟三:

xmm1是步驟二的運算結果值。

xmm1平方根計算。

xmm2等於1。

xmm0是平方根運算後的值。

xmm2除上xmm0。



步驟四:

xmm3是步驟一的坐標z相減後的值。

xmm2是步驟三的運算後的值。

xmm3乘上xmm2。

xmm4是步驟一的坐標x相減後的值。

xmm1是步驟三的運算後的值。

xmm1乘上xmm4。



步驟五:

調用移動方向計算的函式,它需要2個參數,第一個參數是步驟四運算完的結果值(x、z),第二個參數是回傳值。

參數1和參數2都是浮點數坐標結構(x、z、y),其中回傳值是參數2的位移長度4 Bytes (rax+4)。