>백엔드 개발 >C#.Net 튜토리얼 >C/C++ win98 지뢰 찾기 플러그인 기본 사항

C/C++ win98 지뢰 찾기 플러그인 기본 사항

黄舟
黄舟원래의
2017-01-22 14:16:552414검색

이번에는 기본 코드의 예로 win98 지뢰찾기 "고급" 필드를 사용합니다. 나중에 모든 필드에 공통 코드를 작성하겠습니다.

"고급" 지뢰찾기 필드는

C/C++ win98 지뢰 찾기 플러그인 기본 사항

다음은 OD 및 win98 지뢰찾기 다운로드

링크: http://pan.baidu.com/s/1gfA10K7 비밀번호: eiqp


이 실험의 시연을 시작하겠습니다.

1. OD를 연 후 winmine.exe를 OD로 드래그합니다

2. WM_LBUTTONUP에 중단점

3. 그런 다음 이 위치

C/C++ win98 지뢰 찾기 플러그인 기본 사항

댓글은 메시지 처리(주소는 01001FE1)이고

4. 팔로우 후 왔습니다. 체스판 데이터는

C/C++ win98 지뢰 찾기 플러그인 기본 사항

에서 확인할 수 있습니다. 현재 위치를 추출하는 데이터는 다음과 같습니다.

C/C++ win98 지뢰 찾기 플러그인 기본 사항

우리는 주소 010055330의 처음 두 단어를 알고 있습니다. 천둥의 수를 나타내는 0x63(십진수 99)입니다. 다음 두 단어는 각각 너비와 높이를 나타냅니다. .0x8F는 천둥

을 나타냅니다. 따라서 이 메모리 0x8F를 검색하여 0x8E(빨간색 플래그로 표시됨)로 변경하면 아래와 같이

성공합니다

C/C++ win98 지뢰 찾기 플러그인 기본 사항

다음은 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 중국어 홈페이지를 참고해주세요. (www.php.cn)!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.