吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1455|回复: 5
收起左侧

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

[复制链接]
死磕丶 发表于 2022-5-23 17:15

昨晚点了一份炒螺狮粉外卖后,直接拉肚子到今天下午五点,人快被送去医院了。
躺着刷手机也好无聊,继续起来刚代码
即通过代码获取植物大战僵尸的阳光值,并修改,代码基于win控制台

[C++] 纯文本查看 复制代码
// PlantsVsZombies.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
    //通过基址获取阳光
    #include <iostream>
    #include <Windows.h>
    #define lpClassName "MainWindow" 
    #define lpWindowName "Plants vs. Zombies GOTY " 
    
    //获取传入地址内的值
    int mGetAddrValue(UINT_PTR memoryBaseAddress)
    {
        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,以获取进程全部权限的方式,取得进程句柄
        unsigned int readData = 0;//用于保存地址中的4字节值,一般都是无符号int     如果是读取地址,UINT_PTR readData这样可以兼容32-64为游戏
        //4.传入: 进程句柄 读取内存的基址 读出内容后输出的缓冲区的头地址 需要读取内存的大小:4,因为阳光就4字节  实际读取内存的大小,0默认不传值
        ReadProcessMemory(handleProcess, (LPCVOID)memoryBaseAddress, &readData,4,0);//读进程内存
        CloseHandle(handleProcess);//释放进程句柄
        std::cout << "返回数据:" << readData << "\n";
        return readData;
    }
    UINT_PTR memoryAddr;
    int main()
    {
        //0x028DAF38
        int ii = mGetAddrValue(mGetAddrValue(mGetAddrValue(0x7794F8) + 0x868) + 0x5578);
        std::cout << "原有阳光:" << ii;
    
        UINT_PTR writeAddr = mGetAddrValue(mGetAddrValue(0x7794F8) + 0x868) + 0x5578;
    
        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,以获取进程全部权限的方式,取得进程句柄
        unsigned int sunData = 3333;//最终要修改的阳光的值
        WriteProcessMemory(handleProcess, (LPVOID)writeAddr, &sunData, 4, NULL);//传入:1.进程句柄2.写入地址3.写入数值的指针4.写入字节数5.默认传NULL不去理解
    }

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
sam喵喵 + 1 + 1 谢谢@Thanks!有源码的分享怒赞

查看全部评分

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

chenran208 发表于 2022-5-23 20:14
兄弟加油
GuiXiaoQi 发表于 2022-5-23 23:06
wsf5201314 发表于 2022-5-23 23:16
email123 发表于 2022-5-24 18:02
兄弟,最好把植物大战僵尸的软件也附上啊,因为版本太多了
 楼主| 死磕丶 发表于 2022-5-25 16:45
email123 发表于 2022-5-24 18:02
兄弟,最好把植物大战僵尸的软件也附上啊,因为版本太多了

  不是完整代码就不传了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

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

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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