免責聲明:內容僅供學習參考,請合法利用知識,禁止進行違法犯罪活動!
本次游戲沒法給
內容參考于:微塵網絡安全
上一個內容:16.第二階段x64游戲實戰-分析二叉樹結構
上一個內容里把二叉樹的結構寫了寫,本次手動遍歷一次二叉樹,增加一下印象
首先來到下圖紅框位置,也就是二叉樹的基址
然后在內存窗口跳轉過去
然后右擊選擇地址
然后之前找人物名字、坐標的時候也找到了一個人物的公式
[[[[0x00007FF65557EE38]+0x98]+0x1B0]+0x18]+0x30 // 人物名字
[[[[[[[[[0x00007FF69E23EE38]+0x80]]+0x10]]]+0x28]+0x1B0]+0x18]+0x8 // 附近怪物的百分比血量
可以發現一件事都有 +0x1B0]+0x18] 這個,這可以說明 [[[[[[[0x00007FF69E23EE38]+0x80]]+0x10]]]+0x28] 是一個npc對象(就是玩家、怪物、寶箱、藥材等數據,這些東西其實也都屬于npc,只是叫法不同)
這也可以說明 [[[[[[[[[0x00007FF69E23EE38]+0x80]]+0x10]]]+0x28]+0x1B0]+0x18] + 0x30位置是npc的名字,接下來驗證這件事
驗證一下上方寫的是不是真的,首先右擊進入地址
進入之后來到0x80位置,如下圖紅框
可以看到下圖紅框像是一個數量0x88位置是數量,附近npc的數量
然后如下圖進入0x80的地址
它先進入的是0x8位置,也就是說第一個數據的公式應該是 [[[[[[[[[0x00007FF69E23EE38]+0x80]]+0x8]]]+0x28]+0x1B0]+0x18]+0x8,本來[[[[0x00007FF69E23EE38]+0x80]]+0x10]現在是[[[[0x00007FF69E23EE38]+0x80]]+0x8]
[[[[0x00007FF69E23EE38]+0x80]]+0x8]也就是下圖紅框的位置
然后如下圖,紅框里的是0x18位置數據是01,藍框里的是0x19位置,數據是00,代碼中對0x19判斷了是不是0,只有數據是0才會進入循環,也就表示當前二叉樹是有下一個數據的(下一個二叉樹結構)
然后下圖紅框位置0x20,二叉樹的id(應該就是用它進行的排序)
然后通過[[0x000001C776B1EA50+0x1B0]+0x18]+0x30這個公式應該可以得到一個名字,但它是一個無效的表達式,難倒我們的公式錯了?
然后進入左邊的數據(二叉樹結構)注意現在在第一個二叉樹結構進行的 在內存窗口中跳轉到知道QWORD
進入之后
然后使用它0x28位置的值 [[0x000001C7000001C7+0x1B0]+0x18]+0x30 也就是這個公式再次嘗試跳轉,還是不行
然后再回到第一個二叉樹(按鍵盤上的減號就能往上回了),如下圖這次進入它右邊的二叉樹里
再使用它的0x28位置的數據 [[0x000001C7656DABF0+0x1B0]+0x18]+0x30
這次就可以了
然后點擊確定進行跳轉,跳轉之后可以看到名字了,中文名看到的可能是亂碼,需要進行設置,如下圖選擇代碼頁
然后選擇GBK或System,Windows系統一般都是GBK,System會自動檢測系統選擇系統的編碼(代碼頁),選擇好點擊確定就可以看到名字了,
名字,現在是第二個二叉樹,放到是我們玩家角色的地址,下圖里是我角色的名字
然后再回到二叉樹,如下圖再看看其它二叉樹是什么
這個二叉樹沒有東西
再回到上一個二叉樹(我們玩家角色的二叉樹)看看右邊的二叉樹結構,下圖并不是從上一個二叉樹找到的是從第一個二叉樹里找到的,這是一個怪物的名字
通過上面的分析可以看出npc的數據并不一定在什么位置,手動分析很累,分析多了頭就暈了,反正就是這樣的一個邏輯了,可以證明我們玩家角色也在這個二叉樹里,附近npc也在二叉樹里,npc和我們的人物結構也都一樣不需要重新找了直接用就行了,下一章使用代碼遍歷這個二叉樹來得到附近的npc
0x00007FF7F244A0E8 - 0x00007FF7F1B00000=0x94A0E8