免責聲明:內容僅供學習參考,請合法利用知識,禁止進行違法犯罪活動!
本次游戲沒法給
內容參考于:微塵網絡安全
上一個內容:43.第二階段x64游戲實戰-封包-代碼實現獲取包裹物品
之前的內容找到了掉落物的物品id,然后想實現自動撿包,還需要一個東西,就是打開掉落物列表,之前說掉落物列表id在遍歷周圍里可以找到,但是有一個問題,游戲中點擊掉落的物品然后打開掉落列表,打開的動作發送了數據包,這里就有一個問題,光有數據包不行,打開的時候游戲會把當前打開的掉落物列表的id放到一個內存地址(當前掉落物列表),如果我們光發送數據包沒有給這個內存地址寫東西,游戲就可能會崩潰,所以還要解決這個問題,這個問題從拾取的封包往上找,就是說撿物品的時候會有掉落物列表id,然后我找這個id的值在哪來的就可以了
下方是抓的最新打開掉落物列表和撿包的數據包(后面要用它)
3400040000 E9 92260000
AC000C0000 EB 92260000 271E00002900EF4E
AC000C0000 EC 92260000 271E00002A00EF4E
AC000C0000 ED 92260000 271E00002B00EF4E
AC000C0000 EE 92260000 271E00002C00EF4E
AC000C0000 EF 92260000 271E00002D00EF4E
然后打開x64dbg,如下圖來著之前找的撿包函數
下圖紅框位置是掉落物列表id,下圖紅框位置怎么就是掉落物列表id了?因為它前面是1E27,上方271E00002D00EF4E,然后271E由于小端序問題在內存中的樣子是1E27,然后271E00002D00EF4E的前面也就是 92260000 是掉落物列表id,這個之前確定的,所以下圖紅框位置就是掉落物品列表id,注意這個掉落物列表id在偏移0x18位置,然后就看rdx的值哪來的
如下圖紅框rdx的值來自于rbp-0x58,然后rbp-0x58+0x18也就是說rbp-0x40位置是掉落物列表id
然后找rbp-0x40位置的值哪來的,如下圖紅框rbp-0x40的值來自于eax,eax的值來自于上方的call
然后在下圖紅框位置打斷點
然后撿物品觸發斷點
取消斷點
按F7進入call,eax的值來自于rcx+0x182A4
然后觀察它的值,可以看到它的值直接就是掉落物列表id
切換掉落物列表
rcx的值來自于基址
0x00007FF737CDB840 - 0x00007FF737390000 = 0x94B840
然后下圖紅框的call是一個虛函數,所以用的時候不能直接 rcx+0x182A4,要用的值rcx+0x1A8加0x2位置的數據
rcx+0x1A8的值加0x2位置(加完后是內存地址,需要取內存地址的值)是下圖紅框位置