远程调用call时间长会导致游戏崩溃
eip注入时间长会导致游戏卡死而且稳定性差(如果eip注入有更好的办法希望朋友们可以指点一下)
然后想尝试一下远线程子类化主线程,但是前提是不通过注入dll,完全的远程创建使用,朋友们有没有好的办法或者指点一下流程
![](https://profile-avatar.csdnimg.cn/41bdac004be2453ca09c9bcc962a518f_tviko7teafy_.jpg!4)
远程子类化函数如何实现
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注
引用 皆我百晓生 小程序回复内容作答:
远程子类化函数是指在一个进程中,通过远程线程来创建并执行子类化操作,即远程在主线程上创建和处理子类窗口消息。
实现远程子类化函数需要进行以下步骤:
获取目标进程的句柄:通过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)才能打开目标进程并操作其内存空间。同时,关于系统安全、测试用例、安全架构、远程调用等问题,需要根据具体情况进行详细分析和考虑。
解决 无用评论 打赏 举报
悬赏问题
- ¥25 使用cube ai 导入onnx模型时报错
- ¥15 关于#微信小程序#的问题:用一个网页显示所有关联的微信小程序数据,包括每个小程序的用户访问量
- ¥15 root的安卓12系统上,如何使apk获得root或者高级别的系统权限?
- ¥20 关于#matlab#的问题:如果用MATLAB函数delayseq可以对分数延时,但是延时后波形较原波形有幅度上的改变
- ¥15 使用华为ENSP软件模拟实现该实验拓扑
- ¥15 通过程序读取主板上报税口的数据
- ¥15 matlab修改为并行
- ¥15 尝试访问%1服务的windows注册表时遇到问题。必须先解决此问题,然后才能运行安装过程。(请确认您正在使用管理员权限运行)373
- ¥15 (关键词-运算放大器)
- ¥15 关于#游戏策划#的问题:当浏览器输入兑换码,疯狂点击领取按钮,邮箱马上到账几十个兑换码礼包