天天看點

天龍八部逆向分析二叉樹周遊周圍環境

作者:黑貓程式設計

什麼是周遊周圍?

以目前角色為中心,随着我們角色移動,周圍場景不斷變化,會有怪物、NPC等等,這些就是周圍環境。

我們可以先用CE搜尋一下周圍的NPC或怪物名稱,然後移動,觀察不斷變化的的字元串。

天龍八部逆向分析二叉樹周遊周圍環境

移動到大黃蜂附近:

天龍八部逆向分析二叉樹周遊周圍環境

xdbg附加

編碼選擇CP396,在該位置下硬體位元組寫入斷點。(0x066C7804)

天龍八部逆向分析二叉樹周遊周圍環境

斷點會立即斷下,因為雖然看起來人物還沒有移動,依然是顯示“大黃蜂”,然而周圍環境資料是不斷寫入的。

天龍八部逆向分析二叉樹周遊周圍環境

call下斷點,esi存儲周圍環境資料,追溯esi為[ebp+0x8],即上一層第一個參數。

天龍八部逆向分析二叉樹周遊周圍環境

追溯到二叉樹周遊周圍call,下斷點進入call。

周遊二叉樹

天龍八部逆向分析二叉樹周遊周圍環境

這裡的二叉樹為二叉查找樹,實作過程并沒有使用遞歸,而是循環。

每個周圍對象都有一個自己的ID,目标就是周遊二叉樹所有節點查找這個ID。二叉樹如果有左右孩子,就可以向下繼續周遊,如果沒有則停止周遊。

eax為二叉樹根節點位址:[[[0x00CEF4AC]+0x44]+0x4]
周圍對象:[[[[0x00CEF4AC]+0x44]+0x4]+0x14]

左子樹:eax+0x0
右子樹:eax+0x8
标志位:eax+0xD 是否可以繼續向下周遊
二叉樹ID:eax+0x10           

繼續閱讀