日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

004 两种方法找寻路call

發布時間:2025/3/21 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 004 两种方法找寻路call 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 關于尋路call
    • 通過參數找尋路call
      • CE搜索尋路目的地坐標
      • 通過參數定位尋路call
      • 尋路call參數分析
      • 尋路call代碼測試
    • 尋路狀態找尋路call
      • 搜索尋路標志位
      • 通過尋路標志位找尋路call

關于尋路call

尋路call在大部分的游戲里都是存在的,游戲的策劃為了用戶體驗,一般都會自帶尋路的功能,可以一鍵自動讓人物到目的地。

但是也有一些游戲不包含尋路call,那樣的游戲就需要我們去找一些地圖數據以及障礙的遍歷判斷等等,再自己用算法去實現。

這個尋路call不太適合用send斷點回溯去找,因為在尋路的過程需要不斷的向服務器發送數據包,是一個比較復雜的過程,里面可能有很多循環和邏輯算法。單純通過一個簡單的調用關系不一定能找到這個call。

通過參數找尋路call

CE搜索尋路目的地坐標

在找這個call之前我們先來思考一下這個call會有什么樣的參數,參數可能會有很多個,但是有一個參數是必然存在的,就是尋路的目的地坐標。

這里有三個坐標分別是XYZ,選擇任意一個即可。


先讓人物進行尋路,尋路完成之后,當前的人物坐標就是目的地坐標。接著搜索人物當前的坐標。

坐標在內存中的形式都是用的浮點數,浮點數的值是經過四舍五入以后顯示到游戲界面的,所以這里要搜索一個區間的值,而不是搜索精確值,區間盡量給大。

接著讓人物進行尋路,尋一個遠一點的位置,這個時候尋路目的地坐標發生改變,此時在CE里搜索變化的值。

然后在人物尋路的過程中目的地坐標是不變的,我們可以一直掃描未變動的值

等人物到達目的地以后,再用根據當前的人物坐標進行一個范圍的浮點數值掃描。

一直重復這個過程篩選掉CE的結果,最后會剩下二十多個,這二十多個值都是一樣的,都等于當前人物的坐標。那么說明這些值都是人物的目的地坐標。這種情況只能一個一個去測試。

通過參數定位尋路call

這里有兩個基地址,有基地址的情況當然優先考慮選擇用基地址。

打開OD,在這兩個基地址下四字節的硬件寫入斷點。然后讓人物尋路,此時OD斷下

此時[edi+0x2C]是我們的目的地坐標,然后下面這個call將坐標作為參數傳入下面的call,那么這個call有可能是尋路call,也有可能是在尋路call的內部對參數進行處理。

刪除硬件斷點,Ctrl+F9執行到返回,上面的這個call也可能是尋路call。

實際上這兩個call都是尋路call,里層的尋路call有點類似于封包,需要對數據進行組包,所有的數據糅合在一起,分析起來不是那么方便。外層的尋路call參數多,比較清晰,分析起來方便。這里我們選擇外層的尋路call進行分析。

尋路call參數分析

我們在外層的尋路call下斷,讓游戲斷下。

esi這個地方是一個常量1,多測試幾次會發現這個參數的含義是地圖ID。

往上翻一下也可以找到這個地圖ID的一個基址表達式

edx是一個地址,指向的地址內容是和當前的人物坐標是一致的,那么edx就是出發點的人物坐標,坐標在內存中的存儲形式是XZY

D1F930這個地址有點眼熟,回到CE

這個地址正是我們用于找call的切入點,也就是目的地的坐標

最后一個參數ecx是一個當前模塊的基址,沒有什么特殊含義

尋路call代碼測試

接下來用代碼注入器測試一下我們找到的這個call是否有效

首先隨便找一塊地址按照XZY的方式填入出發點的人物坐標

然后在0D1F930填上人物的目的地坐標

在注入器填上相關的匯編代碼,注入到游戲進程,效果如圖:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Ek4EuVau-1586586062769)(004 兩種方法找尋路call.assets/自動尋路.gif)]

尋路狀態找尋路call

搜索尋路標志位

當人物正在尋路的時候是處于跑動的狀態,不尋路的時候人物處于站立不動的狀態。在尋路call的內部一定會對這個狀態進行改寫。

利用這個特點我們可以利用狀態值作為突破口,來定位到尋路call

首先在人物尋路的過程中搜索1

然后在人物尋路結束的時候搜索0


最后可以篩選出三個地址,我這里正確的地址是第二個,大家需要去挨個測試。

通過尋路標志位找尋路call

打開OD,在尋路標志位下硬件寫入斷點,等游戲斷下

打開調用堆棧,找到最后一個call,顯示調用

這個地方,就是我們之前找到的尋路call。

代碼之前已經測試過了,這里就不再測試。另外這個call的參數有出發點的人物坐標,也就是說以當前人物坐標為切入點也是可以找到這個call 的,各位可以自行嘗試,到此分析結束。

相關工具:

https://github.com/TonyChen56/GameReverseNote

總結

以上是生活随笔為你收集整理的004 两种方法找寻路call的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。