Maison développement back-end Tutoriel C#.Net Bases du plug-in C/C Win98 pour le dragueur de mines

Bases du plug-in C/C Win98 pour le dragueur de mines

Jan 22, 2017 pm 02:16 PM

Cette fois, nous utilisons le champ "avancé" du dragueur de mines win98 comme exemple de code de base. Plus tard, nous écrirons un code commun pour tous les champs

Le champ du dragueur de mines "avancé" fait référence à

Bases du plug-in C/C Win98 pour le dragueur de mines

Ce qui suit est le téléchargement du dragueur de mines OD et win98

lien : http://pan.baidu.com/s/1gfA10K7 Mot de passe : eiqp



Commençons la démonstration de cette expérience :

1 Après avoir ouvert OD, faites glisser winmine.exe dans OD

2. point d'arrêt sur WM_LBUTTONUP

3. Ensuite, accédez à cet emplacement

Bases du plug-in C/C Win98 pour le dragueur de mines

Le commentaire est en cours de traitement de message (l'adresse est 01001FE1) et suivez

4. Après avoir suivi, nous sommes ici Les données de l'échiquier peuvent être trouvées sur

Bases du plug-in C/C Win98 pour le dragueur de minesLes données pour extraire la position actuelle sont les suivantes :

Bases du plug-in C/C Win98 pour le dragueur de minesOn connaît les deux premiers mots de l'adresse 010055330. Il s'agit de 0x63 (99 en décimal), qui représente le nombre de tonnerre. Les doubles mots suivants sont respectivement la largeur et la hauteur 0x10 qui représentent le bord de l'échiquier. . 0x8F représente le tonnerre

Il suffit donc de récupérer cette mémoire 0x8F et de la changer en 0x8E (marquée par un drapeau rouge), c'est réussi

comme indiqué ci-dessous

.

Bases du plug-in C/C Win98 pour le dragueur de minesCe qui suit est le code C/C

ci-dessus. Ceci est le contenu des bases du plug-in Win98 Minesweeper de C/C. Pour plus de contenu connexe, veuillez faire attention. sur le site Web PHP chinois (www.php.cn) !
#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;  
      
}
Copier après la connexion
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelles sont les différences entre php et c# Quelles sont les différences entre php et c# Jun 02, 2023 pm 01:45 PM

Quelles sont les différences entre php et c#

Pourquoi en C/C++, la taille de la structure n'est pas égale à la somme des tailles de chaque membre ? Pourquoi en C/C++, la taille de la structure n'est pas égale à la somme des tailles de chaque membre ? Aug 26, 2023 am 09:29 AM

Pourquoi en C/C++, la taille de la structure n'est pas égale à la somme des tailles de chaque membre ?

Un article explique en détail la configuration de vscode, l'environnement d'exécution C/C++ [enseignement au niveau nounou] Un article explique en détail la configuration de vscode, l'environnement d'exécution C/C++ [enseignement au niveau nounou] Feb 27, 2023 pm 07:33 PM

Un article explique en détail la configuration de vscode, l'environnement d'exécution C/C++ [enseignement au niveau nounou]

Créer un outil de formatage de code C/C++ à l'aide de l'outil Clang Créer un outil de formatage de code C/C++ à l'aide de l'outil Clang Aug 26, 2023 pm 01:09 PM

Créer un outil de formatage de code C/C++ à l'aide de l'outil Clang

En C/C++, il existe deux opérations : le pré-incrémentation et le post-incrémentation. En C/C++, il existe deux opérations : le pré-incrémentation et le post-incrémentation. Aug 25, 2023 pm 02:25 PM

En C/C++, il existe deux opérations : le pré-incrémentation et le post-incrémentation.

En C/C++, la fonction strcpy() est une fonction utilisée pour copier une chaîne dans une autre chaîne En C/C++, la fonction strcpy() est une fonction utilisée pour copier une chaîne dans une autre chaîne Sep 09, 2023 am 08:49 AM

En C/C++, la fonction strcpy() est une fonction utilisée pour copier une chaîne dans une autre chaîne

Configuration recommandée pour la programmation C/C++ à l'aide de Sublime Text sous Linux Configuration recommandée pour la programmation C/C++ à l'aide de Sublime Text sous Linux Jul 04, 2023 pm 05:57 PM

Configuration recommandée pour la programmation C/C++ à l'aide de Sublime Text sous Linux

Programme C/C++ pour calculer le nombre de zéros à droite dans la factorielle d'un nombre Programme C/C++ pour calculer le nombre de zéros à droite dans la factorielle d'un nombre Aug 29, 2023 pm 12:29 PM

Programme C/C++ pour calculer le nombre de zéros à droite dans la factorielle d'un nombre

See all articles