ホームページ >バックエンド開発 >C#.Net チュートリアル >C/C++ win98 マインスイーパー プラグインの基本
今回は、基本コードの例として win98 マインスイーパの「アドバンス」フィールドを使用します。後ほど、全フィールドに共通の章を書きます
「アドバンス」マインスイーパのフィールドとは、以下を指します
OD と win98 マインスイーパーのダウンロード リンク
: http://pan.baidu.com/s/1gfA10K7 パスワード: eiqp
この実験のデモンストレーションを開始しましょう:
1. OD を開いた後、ドラッグします。 winmine.exe を OD
に追加します 2. WM_LBUTTONUP にブレークポイントを設定します
3. 次に、この場所にステップ実行し、メッセージ処理に注釈を付けます (アドレスは 01001FE1) 。チェス盤のデータはここにあります
次のように現在位置のデータを抽出します:
アドレス 010055330 の最初のダブルワードが 0x63 (10 進数で 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 マインスイーパ プラグインの基礎です。関連コンテンツの詳細については、PHP 中国語 Web サイト (www. php.cn)!