吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 976|回复: 1
收起左侧

[学习记录] 游戏安全-外挂编写第4-5天

[复制链接]
死磕丶 发表于 2022-5-25 16:48
本帖最后由 死磕丶 于 2022-5-25 17:06 编辑

昨天看lol比赛了,没怎么撸代码,加上吃坏肚子了,
今天继续学习,今天主要学习的创建远线程调用call,模仿外挂调用游戏的call

假设外挂中有三个call:
image.png
call0为无参数就可以调用
call1为传入一个参数就可以调用
这里我把控制台1模拟成一个游戏,打印出了call的地址
image.png

为了模仿外挂远程调用call,我写了第二个控制台(方便理解可以看作exe应用)
即在第二个exe程序中,通过第一个exe中的call地址,在第二个exe中调用第一个exe中的call
效果如图:
image.png
代码:
[Asm] 纯文本查看 复制代码
// 调用call测试  以A002为测试
#include <iostream>
#include <Windows.h>

#define lpClassName "ConsoleWindowClass" 
#define lpWindowName R"(E:\A_SoftWare\Visual studio 2019\A_Code\PlantsVsZombies\Debug\A002.exe)" //转义字符常用写法,类似\\

//创建远线程调用call
void callTest(int addr,int value)
{
    HWND windowHandle = FindWindowA(lpClassName, lpWindowName);// 1.通过类名+ 窗口名获取窗口句柄
    std::cout << "窗口句柄:" << windowHandle << "\n";
    DWORD   processID = 0, threadID = 0;
    threadID = GetWindowThreadProcessId(windowHandle, &processID);//2.传入窗口句柄,进程ID地址,得到进程ID,线程ID
    std::cout << "窗口进程ID:" << processID << "\n" << "窗口所属线程ID:" << threadID << "\n";
    HANDLE handleProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, processID);//3.通过进程ID,以获取进程全部权限的方式,取得进程句柄
    //它能够创建一个在其它进程地址空间中运行的线程(也称:创建远程线程).
    CreateRemoteThread(handleProcess,//线程所属进程的进程句柄.
        0, //线程的属性通常设为0
        0,  //线程栈初始大小,通常设为0表示系统默认
        (LPTHREAD_START_ROUTINE)addr,  //在远程进程的地址空间中,该线程的线程函数的起始地址.
        (LPVOID)value,  //传递给线程函数的参数
        0, //线程创建标志,通常设为0
        0); //返回线程ID,通常设为NULL
    CloseHandle(handleProcess);//释放进程句柄
}

int main()
{
    callTest(0x00B31384,5);
    callTest(0x00B31325, 1111);
    callTest(0x00B31325, 2222);
    callTest(0x00B31325, 3333);
    std::cout << "Hello World!\n";
}



发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

头像被屏蔽
xiadongming 发表于 2022-5-26 22:41
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 11:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表