剑侠情缘2(端游)无敌功能

本文详细描述了如何通过WindowsAPI,如`VirtualAllocEx`和函数hook,来找到游戏进程,注入内存并修改攻击函数,实现在游戏中实现无敌逻辑的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<windows.h>

int main()
{
	DWORD attFun = 0x41FD40;
	char hookCode[8] = { 0xE9, 0x00 , 0x00 , 0x00 , 0x00 };
	char allocFunc[] = { 0x56, 0x8B,0xF1, 0x57, 0x81, 0x7E, 0X04,0X02, 0X00, 0X00, 0X00, 0X75, 0X08, 0xC7,
		0x44, 0X24, 0X0C, 0x00, 0x00, 0x00, 0x00, 0xE9,  0x00, 0x00, 0x00, 0x00
	}; //无敌函数汇编指令对应的字节码,在CE里面编辑后进行转换以及复制到此处,最后四个字节是申请的内存空间和基址之间的偏移量,先填0
	// 1 找到游戏进程然后打开游戏进程
	HWND hwnd = FindWindowA(NULL, "Sword2 Window");
	DWORD piid = 0;
	if (NULL == hwnd)
	{
		MessageBoxA(0, "未找到游戏窗口", "提示", MB_OK);
		return 0;
	}
	GetWindowThreadProcessId(hwnd, &piid);
	if (piid == 0)
	{
		MessageBoxA(0, "获取进程id失败", "提示", MB_OK);
		return 0;
	}
	HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, piid);
	if (hProcess == NULL)
	{
		MessageBoxA(0, "打开进程失败", "提示", MB_OK);
		return 0;
	}

	// 2 申请一段内存空间(VirtualAllocEx)
	char* allocAddr = (char*)VirtualAllocEx(hProcess, 0, 0x100, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
	if (NULL == allocAddr)
	{
		MessageBoxA(0, "申请内存失败", "提示", MB_OK);
		return 0;
	}

	// 3 找到攻击函数:修改这个攻击函数的前8个字节(hook前8个字节) jmp到新开辟的内存空间
	DWORD oldProtect = 0;
	DWORD offset = (DWORD)allocAddr - attFun - 5;
	DWORD realWrite = 0;
	memcpy(&hookCode[1], &offset, 4);
	VirtualProtectEx(hProcess, (char*)attFun, 8, PAGE_EXECUTE_READWRITE, &oldProtect);
	WriteProcessMemory(hProcess, (char*)attFun, hookCode, 8, &realWrite);
	VirtualProtectEx(hProcess, (char*)attFun, 8, oldProtect, &oldProtect);

	// 4 在新开辟的内存空间里面, 实现无敌逻辑
	DWORD offset2 = 0x41FD48 - (DWORD)(allocAddr + 21 + 5);
	memcpy(&allocFunc[22], &offset2, 4);
	WriteProcessMemory(hProcess, (char*)allocAddr, allocFunc, sizeof(allocFunc), &realWrite);
	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值