C/C++之win98扫雷外挂基础篇

本次以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;
	
}



评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT1995

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值