尝试一下帝国时代1单机修改器

尝试一下帝国时代1单机修改器

c++初学者

暂时只实现功能 代码很low 主要是这游戏基址找的很蛋疼 资源还是用的单精度浮点数

#include <iostream>
#include <string>
#include <windows.h>

using namespace std;

void changeGame(unsigned long &p1) {
	HWND gameHwnd = FindWindow(NULL, L"Age of Empires");
	//gameHwnd = (HWND)2596;
	//LPTSTR str=NULL;
	//GetWindowText(gameHwnd, str, 100);
	cout << gameHwnd << endl;
	DWORD processid;
	::GetWindowThreadProcessId(gameHwnd, &processid);
	cout << processid << endl;
	//打开指定进程
	HANDLE processH = ::OpenProcess(PROCESS_ALL_ACCESS, false, processid);
	cout << processH << endl;
	//读取指针
	int nSize = 0;
	unsigned long resourcesPtr1 = 0;
	ReadProcessMemory(processH, (void*)0x006a06b0, &resourcesPtr1, sizeof(resourcesPtr1), NULL);
	cout << "读取一级指针偏移" << (void*)resourcesPtr1 << endl;
	resourcesPtr1 = resourcesPtr1 + 0x40;
	unsigned long resourcesPtr2 = 0;
	ReadProcessMemory(processH, (void*)resourcesPtr1, &resourcesPtr2, sizeof(resourcesPtr2), NULL);
	cout << "读取二级指针偏移" << (void*)resourcesPtr2 << endl;
	resourcesPtr2 = resourcesPtr2 + 0x4;
	unsigned long resourcesPtr3 = 0;
	ReadProcessMemory(processH, (void*)resourcesPtr2, &resourcesPtr3, sizeof(resourcesPtr3), NULL);
	cout << "读取三级指针偏移" << (void*)resourcesPtr3 << endl;
	resourcesPtr3 = resourcesPtr3 + 0x50;
	unsigned long resourcesPtr4 = 0;
	ReadProcessMemory(processH, (void*)resourcesPtr3, &resourcesPtr4, sizeof(resourcesPtr4), NULL);
	cout << "读取4级指针偏移" << (void*)resourcesPtr4 << endl;
	p1 = resourcesPtr4;
	resourcesPtr4 = resourcesPtr4 + 0;
	unsigned long foodPtr = 0;
	ReadProcessMemory(processH, (void*)resourcesPtr4, &foodPtr, sizeof(foodPtr), NULL);
	cout << "读取食物" << *(float*)&foodPtr << endl;
	resourcesPtr4 = resourcesPtr4 + 4;
	unsigned long woodPtr = 0;
	ReadProcessMemory(processH, (void*)resourcesPtr4, &woodPtr, sizeof(woodPtr), NULL);
	cout << "读取木材" << *(float*)&woodPtr << endl;
	resourcesPtr4 = resourcesPtr4 + 4;
	unsigned long stonePtr = 0;
	ReadProcessMemory(processH, (void*)resourcesPtr4, &stonePtr, sizeof(stonePtr), NULL);
	cout << "读取石头" << *(float*)&stonePtr << endl;
	resourcesPtr4 = resourcesPtr4 + 4;
	unsigned long goldPtr = 0;
	ReadProcessMemory(processH, (void*)resourcesPtr4, &goldPtr, sizeof(goldPtr), NULL);
	cout << "读取黄金" << *(float*)&goldPtr << endl;
	for (size_t i = 0; i < 4; i++)
	{
		float bbb = NULL;
		if (i == 0) {
			bbb = *(float*)&foodPtr;
		}
		else if (i == 1) {
			bbb = *(float*)&woodPtr;
		}
		else if (i == 2) {
			bbb = *(float*)&stonePtr;
		}
		else if (i == 3) {
			bbb = *(float*)&goldPtr;
		}
		bbb += 1000000;

		cout << bbb << endl;
		WriteProcessMemory(processH, (void*)(resourcesPtr4 - 4 * i), &bbb, sizeof(bbb), NULL);
	}

	//DWORD pid = 5676;

}
int main() {
	unsigned long  p1 = NULL;
	changeGame(p1);
	cout << "资源指针" << (float*)p1 << endl;
	system("pause");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值