首页 > 系统相关 >逆向 | Win7扫雷x64版本内存雷区读取

逆向 | Win7扫雷x64版本内存雷区读取

时间:2024-05-29 13:32:45浏览次数:29  
标签:LPCVOID ReadProcessMemory Win7 x64 printf BYTE GameBoard 雷区 hProcess

逆向 | Win7扫雷x64版本内存雷区读取

继续写书,这是我为书中实验编写的测试代码。

#include <windows.h>
#include <stdio.h>
#include <tlhelp32.h>
#include <string.h>
int main() {
	// 获取pid
	HWND hWnd = FindWindow(NULL, L"扫雷");
	DWORD pid = NULL;
	GetWindowThreadProcessId(hWnd, &pid);
	HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pid);
	if (hProcess == NULL) {
		return -1;
	}
	printf("hProcess: %p \n", hProcess);

	// 获取模块地址
	DWORD64 modaddr = NULL;
	MODULEENTRY32 modentry;
	memset(&modentry, 0, sizeof(modentry));
	HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid);
	modentry.dwSize = sizeof(MODULEENTRY32);
	Module32First(hSnapshot, &modentry);
	do {
		if (wcscmp(modentry.szModule, L"MineSweeper.exe") == 0)
		{
			wprintf(L"module: %s \n", modentry.szModule);
			modaddr = (DWORD64)modentry.hModule;
			CloseHandle(hSnapshot);
			break;
		}
	} while (Module32Next(hSnapshot, &modentry));
	printf("modaddr: %p \n", modaddr);

	// 获取Game结构体变量
	DWORD game_offset = 0xaaa38;
	BYTE* Game = NULL;
	ReadProcessMemory(hProcess, (LPCVOID)(modaddr + game_offset), &Game, 8, 0);      
	printf("  > Game: %p \n", Game);

	// 获取GameBoard
	BYTE* GameBoard = NULL;
	ReadProcessMemory(hProcess, (LPCVOID)(Game + 0x18), &GameBoard, 8, 0);
	printf("    > GameBoard: %p \n", GameBoard);
	// 获取难度/宽高/雷数量
	DWORD height, width;
	DWORD difficulty;
	DWORD mine_num;
	ReadProcessMemory(hProcess, (LPCVOID)(GameBoard + 0x24), &difficulty, 4, 0);
	ReadProcessMemory(hProcess, (LPCVOID)(GameBoard + 0x10), &width, 4, 0);
	ReadProcessMemory(hProcess, (LPCVOID)(GameBoard + 0xc), &height, 4, 0);
	ReadProcessMemory(hProcess, (LPCVOID)(GameBoard + 0x8), &mine_num, 4, 0);
	printf("    > [%d] (%d, %d): %d个雷\n", difficulty, width, height, mine_num);

	// 获取雷区数据
	BYTE* MineMap = NULL;
	ReadProcessMemory(hProcess, (LPCVOID)(GameBoard + 0x58), &MineMap, 8, 0);
	ReadProcessMemory(hProcess, (LPCVOID)(MineMap + 0x10), &MineMap, 8, 0);
	printf("    > MineMap: %p \n", MineMap);    // 获取到雷区列表起始位置

	// 获取雷区真实数据
	DWORD map_length = width * height;
	BYTE* map = (BYTE*)malloc(map_length);
	BYTE* tmp_line = (BYTE*)malloc(height);
	int i, j;
	for (i = 0; i < width; i++) {
		BYTE* arr = NULL;
		ReadProcessMemory(hProcess, (LPCVOID)(MineMap+i*8), &arr, 8, 0);
		// printf("       > line%d: %p \n", i, arr);
		ReadProcessMemory(hProcess, (LPCVOID)(arr + 0x10), &arr, 8, 0);
		ReadProcessMemory(hProcess, (LPCVOID)(arr), tmp_line, height, 0);
		for (j = 0; j < height; j++) {
			printf("%d ", tmp_line[j]);   // 输出临时数据
			// 存入map
			*(map+j*width+i) = (BYTE)tmp_line[j];
		}
		printf("\n");
	}
	printf("\n");
	// 输出地图
	for (i = 0; i < height; i++) {
		for (j = 0; j < width; j++) {
			printf("%d ", map[i * width + j]);
		}
		printf("\n");
	}

	// 清理资源
	free(tmp_line);
	free(map);
	CloseHandle(hProcess);

	return 0;
}


标签:LPCVOID,ReadProcessMemory,Win7,x64,printf,BYTE,GameBoard,雷区,hProcess
From: https://www.cnblogs.com/Mz1-rc/p/18220065

相关文章

  • Win7系统下网页字体模糊解决办法:安装KB2670838系统补丁
    原文地址:https://itxiaozhang.com/win7-webpage-font-blur-solution-kb2670838-patch/此教程配合视频学习效果最佳,视频教程在文章末尾。问题描述在Windows7系统中使用浏览器打开某些网页,网页中的字体非常模糊,且有锯齿,观感非常不好。问题来源在解决问题之前,首先应该判断这......
  • 解决老旧电脑在win7中浏览器访问https网站出现的Let‘sEncrypt证书过期的问题
        原因LetsEncrypt证书未过期,但是其顶级ca根证书“DSTRootCAX3”在2021-09-01过期了,老旧设备上的win系统会被影响到。解决步骤下载三张Letsencrypt的根证书“DSTRootCAX3”的最新版本,包含isrgrootx1.der+isrg-root-x2.der+lets-encrypt-r3.der:https://do......
  • x64 环境下_findnext() 函数报错——0xC0000005: 写入位置 0xFFFFFFFFDF47C5A0 时发生
    CSDN搬家失败,手动导出markdown后再导入博客园最近在搞单目相机位姿估计,相机标定参考了【OpenCV3学习笔记】相机标定函数calibrateCamera()使用详解(附相机标定程序和数据)提供的代码。/*@paramFile_Directory为文件夹目录@paramFileType为需要查找的文件类型@param......
  • x64汇编——汇编指令
     汇编指令 movdest,srcmovmove的简称将src的内容赋值给dest,类似于dest=src[地址值]中扩号[]里面放的都是内存地址一个变量的地址值,是它所有字节地址中的最小值word是2字节,dword是4字节(doubleword),qword是8字节(quadword)  注意地址取值是向高位扩展,如......
  • win7系统清理C盘空间方法实测
    问题描述:win7电脑C盘容易满,采用如下方法清理方法一:win+r,输入%temp%查看临时文件,手动删除不需要的文件方法二:减小休眠文件:如果你很少使用休眠模式,可以通过win+r输入cmd命令后进入命令窗口,输入powercfg.exe/hibernate/size50来减小休眠文件大小(这里的数字代表百分比),使用power......
  • Burp Suite Professional 2024.4 for Windows x64 - 领先的 Web 渗透测试软件
    BurpSuiteProfessional2024.4forWindowsx64-领先的Web渗透测试软件世界排名第一的Web渗透测试工具包请访问原文链接:BurpSuiteProfessional2024.4forWindowsx64-领先的Web渗透测试软件,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgBurpSuite......
  • Burp Suite Professional 2024.4 for macOS x64 & ARM64 - 领先的 Web 渗透测试软件
    BurpSuiteProfessional2024.4formacOSx64&ARM64-领先的Web渗透测试软件世界排名第一的Web渗透测试工具包请访问原文链接:BurpSuiteProfessional2024.4formacOSx64&ARM64-领先的Web渗透测试软件,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org......
  • [转]解决Win7和Linux Deepin双系统时间不同步的问题[2017.3.13 sina blog]
    原博地址:http://xsinger.me/diy/261.html/comment-page-1对于双系统的用户,有时候从Linux回到Windows的时候,时间总相差8小时。为什么LinuxDeepin和Windows双系统会有时间差因为安装LinuxDeepin时选择了UTC(协调世界时)时间,所以LinuxDeepin开机总是从互联网获取时间并且写入BIOS......
  • Win10_x64 21h2调试体系分析
    参考https://www.52pojie.cn/thread-1728894-1-1.html记的笔记,发出来参考下,抛砖引玉,有错误多纠正。还望各位大佬别嘲笑。平台如下:版本      Windows10专业版版本号      21H2安装日期      &#8206;2021-&#8206;08-&#8206;23操作系统内部版本  ......
  • Windows 10 x64 异常分发
    参考https://www.52pojie.cn/thread-1663524-1-1.htmlWindows10  x64异常分发系统版本: 系统版本.png(28.46KB,下载次数:0)下载附件2022-7-2000:49上传 这个版本吾爱破解论坛有人分享了,也可以下载我提供的ntdll.dll和ntoskrnl.exe(包括pdb符号文件)......