天天看點

[逆向] x64dbg / od 設定消息斷點

背景

很多時候在我們不知道目标程式調用了哪些 api 時,需要使用消息斷點粗略的定位關鍵代碼位置。比如在遊戲裡點選一次滑鼠,可以根據這個消息向下跟蹤點選完滑鼠後遊戲執行的邏輯。

方法

一個簡單的消息循環是這樣的 :

while( GetMessage(&msg,NULL,0,0) )     
{
    TranslateMessage(&msg);            //将 WM_XXXKEYXXX 消息翻譯為 WM_CHAR 消息
    DispatchMessage(&msg);             //傳遞消息到視窗過程
}      

TranslateMessage

BOOL TranslateMessage(
  const MSG *lpMsg
);

typedef struct tagMSG {
  HWND   hwnd;
  UINT   message;          // 消息代碼
  WPARAM wParam;
  LPARAM lParam;
  DWORD  time;
  POINT  pt;
  DWORD  lPrivate;
} MSG, *PMSG, *NPMSG, *LPMSG;      

由此可知,隻要對 message 這個成員變量設定條件斷點就可以實作所謂的消息斷點 。

32位:

[[esp+0x4]+0x4]==0x1234      (這裡的 1234      
[[rcx]+0x8]==0x1234      (HANDLE 是 void* 類型,是以 64 位下偏移是 0x8)      

繼續閱讀