远程调用call时间长会导致游戏崩溃
eip注入时间长会导致游戏卡死而且稳定性差(如果eip注入有更好的办法希望朋友们可以指点一下)
然后想尝试一下远线程子类化主线程,但是前提是不通过注入dll,完全的远程创建使用,朋友们有没有好的办法或者指点一下流程
引用 皆我百晓生 小程序回复内容作答:
远程子类化函数是指在一个进程中,通过远程线程来创建并执行子类化操作,即远程在主线程上创建和处理子类窗口消息。
实现远程子类化函数需要进行以下步骤:
获取目标进程的句柄:通过OpenProcess函数打开目标进程,获取其句柄。
在目标进程中分配内存:使用VirtualAllocEx函数在目标进程中分配一块足够大的内存,用于存储远程线程执行的代码。
在目标进程中写入代码:使用WriteProcessMemory函数将远程线程执行的代码写入之前分配的内存空间。
创建远程线程:使用CreateRemoteThread函数在目标进程中创建远程线程,并将代码的入口点设置为之前分配的内存空间。
等待线程执行完成:使用WaitForSingleObject等待远程线程执行完成。
以下是一个简单的示例代码:
#include <windows.h>
#include <iostream>
void SubclassProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
// 子类窗口处理过程
}
int main()
{
HWND hWnd = FindWindow(nullptr, L"Window Title"); // 获取窗口句柄
if (hWnd == nullptr)
{
std::cout << "Window not found" << std::endl;
return 0;
}
DWORD dwProcessId, dwThreadId;
dwThreadId = GetWindowThreadProcessId(hWnd, &dwProcessId); // 获取进程ID和线程ID
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId); // 打开进程
// 在目标进程中分配内存
LPVOID pRemoteMem = VirtualAllocEx(hProcess, nullptr, 4096, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);
// 在目标进程中写入代码
// 创建远程线程执行子类窗口操作
BYTE code[] = {
0x68, 0x00, 0x00, 0x00, 0x00, // push 0 (hWnd)
0x68, 0x00, 0x00, 0x00, 0x00, // push 0 (uMsg)
0x68, 0x00, 0x00, 0x00, 0x00, // push 0 (wParam)
0x68, 0x00, 0x00, 0x00, 0x00, // push 0 (lParam)
0x68, 0x00, 0x00, 0x00, 0x00, // push 0 (SubclassProc)
0x68, 0x00, 0x00, 0x00, 0x00, // push 0 (Return Address)
0xC3 // ret
};
memcpy(code + 1, &hWnd, sizeof(HWND));
memcpy(code + 6, &uMsg, sizeof(UINT));
memcpy(code + 11, &wParam, sizeof(WPARAM));
memcpy(code + 16, &lParam, sizeof(LPARAM));
memcpy(code + 21, &SubclassProc, sizeof(PROC));
WriteProcessMemory(hProcess, pRemoteMem, code, sizeof(code), nullptr);
// 创建远程线程
HANDLE hRemoteThread = CreateRemoteThread(hProcess, nullptr, 0,
static_cast<LPTHREAD_START_ROUTINE>(pRemoteMem), nullptr, 0, nullptr);
// 等待远程线程执行完成
WaitForSingleObject(hRemoteThread, INFINITE);
// 清理资源
CloseHandle(hRemoteThread);
VirtualFreeEx(hProcess, pRemoteMem, 0, MEM_RELEASE);
CloseHandle(hProcess);
return 0;
}
需要注意的是,远程子类化函数需要具备足够的权限(如PROCESS_ALL_ACCESS)才能打开目标进程并操作其内存空间。同时,关于系统安全、测试用例、安全架构、远程调用等问题,需要根据具体情况进行详细分析和考虑。