當(dāng)前位置:
首頁 >
C/C++之win98扫雷外挂基础篇
發(fā)布時(shí)間:2025/3/15
36
豆豆
生活随笔
收集整理的這篇文章主要介紹了
C/C++之win98扫雷外挂基础篇
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
本次以win98掃雷"高級(jí)"場(chǎng)為例子的基礎(chǔ)篇代碼,稍后會(huì)寫出所有場(chǎng)通用篇
掃雷"高級(jí)"場(chǎng)是指
下面是OD和win98掃雷下載
鏈接:http://pan.baidu.com/s/1gfA10K7 密碼:eiqp
下面開始演示本次實(shí)驗(yàn):
1.打開OD后,把winmine.exe拖入OD
2.在WM_LBUTTONUP上設(shè)置斷點(diǎn)
3.然后單步步過到此位置
在注釋為消息處理(地址為01001FE1)跟隨
4.跟隨后我們?cè)诖颂幙梢哉业狡灞P數(shù)據(jù)提取當(dāng)前位置的數(shù)據(jù)如下:
我們就知道地址010055330前雙字為0x63(十進(jìn)制為99)這表示雷數(shù),后面雙字分別是寬度和高度,0x10表示棋盤的邊,0x8F表示雷 所以我們只要檢索此段內(nèi)存0x8F,并且把他改成0x8E(標(biāo)志為紅旗),就成功了 如下所示
下面是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);//基礎(chǔ)地址、雷數(shù)、寬度、高度DWORD dwBaseAddr = 0x01005330;DWORD dwNum = 0, dwWidth = 0, dwHight = 0, dwSize = 0;//讀取內(nèi)存信息//讀進(jìn)程的內(nèi)存空間數(shù)據(jù)//參數(shù):第1個(gè)參數(shù): HANDLE hProcess進(jìn)程句柄。//第2個(gè)參數(shù): LPCVOID lpBaseAddress基址指針。//第3個(gè)參數(shù): LPVOID lpBuffer接收數(shù)據(jù)緩沖區(qū)指針。//第4個(gè)參數(shù): DWORD nSize接收數(shù)據(jù)緩沖區(qū)緩沖區(qū)大小。//第5個(gè)參數(shù): LPDWORD lpNumberOfBytesRead讀入數(shù)據(jù)量大小指針。返回值: 成功:TRUE失敗:FALSEReadProcessMemory(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);}}//函數(shù)功能: 得到窗體客戶區(qū)的大小。//第1個(gè)參數(shù): HWND hWnd窗體句柄。//第2個(gè)參數(shù): LPRECT lpRect客戶區(qū)RECT結(jié)構(gòu)的指針。RECT rt = { 0 };GetClientRect(hWinmine, &rt);InvalidateRect(hWinmine, &rt, true);//這個(gè)函數(shù)屏蔽一個(gè)窗口客戶區(qū)的全部或部分區(qū)域。這會(huì)導(dǎo)致窗口在事件期間部分重畫delete pByte;CloseHandle(hProcess);getchar();return 0;}
總結(jié)
以上是生活随笔為你收集整理的C/C++之win98扫雷外挂基础篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt实现全屏下玫瑰花(含详细注释)
- 下一篇: C/C++判断操作系统(Win10,Wi