C/C++之win98掃雷外掛基礎篇

來源:互聯網
上載者:User
本次以win98掃雷"進階"場為例子的基礎篇代碼,稍後會寫出所有場通用篇

掃雷"進階"場是指

下面是OD和win98掃雷下載

連結:http://pan.baidu.com/s/1gfA10K7 密碼:eiqp


下面開始示範本次實驗:

1.開啟OD後,把winmine.exe拖入OD

2.在WM_LBUTTONUP上設定斷點

3.然後單步步過到此位置

在注釋為訊息處理(地址為01001FE1)跟隨

4.跟隨後我們在此處可以找到棋盤資料

提取當前位置的資料如下:

我們就知道地址010055330前雙字為0x63(十進位為99)這表示雷數,後面雙字分別是寬度和高度,0x10表示棋盤的邊,0x8F表示雷

所以我們只要檢索此段記憶體0x8F,並且把他改成0x8E(標誌為紅旗),就成功了

如下所示

下面是C/C++代碼

#include <windows.h>  #include <stdio.h>    int main()  {      HWND hWinmine = FindWindow(NULL, L"掃雷");      DWORD dwPID = 0;      GetWindowThreadProcessId(hWinmine, &dwPID);      HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, dwPID);        //基礎地址、雷數、寬度、高度      DWORD dwBaseAddr = 0x01005330;      DWORD dwNum = 0, dwWidth = 0, dwHight = 0, dwSize = 0;          //讀取記憶體資訊      //讀進程的記憶體空間資料      //參數:第1個參數:    HANDLE hProcess進程控制代碼。      //第2個參數:    LPCVOID lpBaseAddress基址指標。      //第3個參數:    LPVOID lpBuffer接收資料緩衝區指標。      //第4個參數:    DWORD nSize接收資料緩衝區緩衝區大小。      //第5個參數:    LPDWORD lpNumberOfBytesRead讀入資料量大小指標。            傳回值:       成功:TRUE          失敗:FALSE      ReadProcessMemory(hProcess, (LPVOID)dwBaseAddr, &dwNum, sizeof(DWORD), &dwSize);      ReadProcessMemory(hProcess, (LPVOID)(dwBaseAddr +0x4), &dwWidth, sizeof(DWORD), &dwSize);      ReadProcessMemory(hProcess, (LPVOID)(dwBaseAddr + 0x8), &dwHight, sizeof(DWORD), &dwSize);        //棋盤總大小=棋盤+空白邊+4角      DWORD dwReadsize = dwWidth*dwHight + dwHight * 2 + dwWidth * 2 + 4;      PBYTE pByte = new BYTE[dwReadsize];            ReadProcessMemory(hProcess, (LPVOID)(dwBaseAddr + 0x16), pByte, dwReadsize, &dwSize);        BYTE bClear = 0x8E;      for (size_t i = 0; i < dwReadsize; i++)      {          if (pByte[i] == 0x8F)          {              WriteProcessMemory(hProcess, (LPVOID)(dwBaseAddr + 0x16 + i), &bClear, sizeof(BYTE), &dwSize);          }      }      //函數功能:       得到表單客戶區的大小。      //第1個參數:    HWND hWnd表單控制代碼。      //第2個參數:    LPRECT lpRect客戶區RECT結構的指標。      RECT rt = { 0 };      GetClientRect(hWinmine, &rt);          InvalidateRect(hWinmine, &rt, true);//這個函數屏蔽一個視窗客戶區的全部或部分地區。這會導致視窗在事件期間部分重畫      delete pByte;      CloseHandle(hProcess);      getchar();      return 0;        }

以上就是 C/C++之win98掃雷外掛基礎篇的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.