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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

003 通过内存关系找万能按键call

發布時間:2025/3/21 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 003 通过内存关系找万能按键call 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 什么是萬能按鍵call
    • 切入點
    • CE搜索背包狀態
    • 通過內存關系找萬能按鍵call
    • 萬能按鍵call參數分析
    • 總結

什么是萬能按鍵call

當我們在游戲中敲擊鍵盤的按鍵時,游戲會對鍵盤事件會做出響應,去執行某些功能。

以口袋西游為例,按B鍵會打開人物背包,通過B鍵打開背包的這個call就是萬能按鍵call。

只要找到這一個call,就相當于找到了所有的按鍵call,因為剩下的所有的快捷鍵功能都會走這一個call。而且這個call實用性也比較強,可以用來替代很多的游戲功能。

切入點

當我們點擊B鍵時,背包會被打開,再次點擊,背包會被關閉。

那我們就可以先用CE搜索到背包打開和關閉的狀態,之后再對這個狀態下一個寫入斷點,通過棧回溯的方式就能找到這個萬能按鍵call。

CE搜索背包狀態

背包打開和關閉的狀態是一個標志位,可能是0和1,也可能不是。這里只能進行嘗試,如果0和1沒找到就需要利用未知的初始值和變化的值來找到這個標志位。

在背包打開狀態下掃描1,注意這里需要用1字節進行掃描,4字節是掃不出來的

關閉狀態下掃描0

重復這個過程(沒啥技術含量),直到篩選出唯一一個背包狀態標志位,我這里過濾剩下兩個。

通過內存關系找萬能按鍵call

接著我們在這個地址下一個字節的硬件寫入斷點,這里有兩個要注意的點:

第一個點是吾愛的OD硬件斷點有點問題,建議換個OD;

第二個點如果下了硬件斷點之后這個地方斷的很頻繁,而且數值的變化范圍超出了0和1說明標志位找錯了。

然后點擊B鍵,讓游戲斷下

刪除硬件斷點,打開調用堆棧

挨個下斷點分析參數排查,6296F0這個call就是我們要的萬能按鍵call

萬能按鍵call參數分析

這個call和我們之前找的call有一定的區別。正常找的call一般是調用一次,而這個地方會斷下來兩次。

原因在于這個call是用來響應處理按下鍵盤事件的,按下鍵盤事件實際上分為兩個動作,一個是按鍵按下,另一個是按鍵抬起,對應Windows的鍵盤事件就是WM_KeyDown和WM_KeyUp。

接下來分析這個call的參數

ebx是300001,無論是按下還是抬起都是一樣的,具體含義暫時未知

ebp在第一次斷下的時候是0x42,第二次斷下的時候是62

正好是對應按鍵B的ASCII值,大寫的B表示按鍵被按下,小寫的b表示鍵盤抬起

再看eax,按下的時候eax等于100,,抬起的時候eax等于102

這個參數對應的是當前的鍵盤狀態是按下還是抬起,區別在于把KeyUp改成了102。

而ecx是一個數據結構,需要往上追ecx的來源,直到把基址追出來。這里就不一步一步追數據,本次的重點是找call,各位有興趣可以自己去追一下ecx數據的基址。

總結

在api斷點不方便逆向的時候,可以通過內存的訪問關系下斷,然后利用棧回溯來找到我們需要的call。

另外這個萬能按鍵call,如果是在實際寫代碼應用的時候,需要寫兩個call,一次是按下,一次是抬起,在按下和抬起的中間還應該加一個延遲,盡量去模擬真實的鍵盤事件。

相關工具:

https://github.com/TonyChen56/GameReverseNote

總結

以上是生活随笔為你收集整理的003 通过内存关系找万能按键call的全部內容,希望文章能夠幫你解決所遇到的問題。

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