开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

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

[完成] 怎么使用c++代码去实现修改阳光值

 关闭 [复制链接]
结帖率:100% (1/1)
发表于 2025-5-15 16:58:17 | 显示全部楼层 |阅读模式   广西壮族自治区梧州市
20精币
本人最近在学习辅助开发,有没有大神帮忙看看我找到了阳光的静态地址和两层偏移,怎么能使用c++代码去实现修改阳光值,或者有没有c++相关的辅助教程,注意是c++,不是c语言,拜托大家了,下面是我自己写的,实现不了修改,看能否修改下或者提供下思路,谢谢
  
/*
#include
#include
const DWORD sun_address = 0x2A9EC0; //阳光的静态地址
const int value1 = 0x768; //一级偏移
const int value2 = 0x5560;//二级偏移
using namespace std;
int main () {
// 获取程序的窗口句柄
HWND hwnd = FindWindowA ("MainWindow","植物大战僵尸杂交版v2.3.7  ");
if (hwnd == NULL) {
cout << "未找到游戏窗口,请检查是否开启游戏" << endl;
}
else {
cout << "游戏窗口已找到,窗口显示十六进制为:" << (int)hwnd << endl;
}
// 获取程序的进程PID
DWORD pid;
DWORD pids = GetWindowThreadProcessId (hwnd,&pid);
if (pid == NULL) {
cout << "未找到游戏进程,请检查是否开启游戏" << endl;
}
else {
cout << "游戏进程已找到,进程显示当前PID为:" << pid << endl;
}
// 获取程序的进程句柄
HANDLE process = OpenProcess (PROCESS_ALL_ACCESS,FALSE,pid);
if (process == NULL) {
cout << "进程句柄获取失败" << endl;
}
else {
cout << "进程句柄获取成功,当前进程句柄为:" << (int) process << endl;
}
//计算阳光的实际地址
DWORD sunaddress = sun_address+value1+value2;
//修改阳光数值
while (true) {
int yangguang = 0;
cout << "请输入阳光数值:";
cin >> yangguang;
//开始修改阳光数值
int sun1 = 0;
SIZE_T a = 0;
BOOL aa = WriteProcessMemory (process, (LPVOID)sunaddress, &sun1, 4,&a);
if (aa == 0) {
cout << "修改阳光数值失败" << endl;
}
else {
cout << "修改阳光数值成功" << endl;
}
//开始读取阳光数值
int sun2 = 0;
SIZE_T b = 0;
BOOL bb = ReadProcessMemory (process, (LPVOID)sunaddress, &sun2, 4, &b);
if (bb == 0) {
cout << "读取阳光数值失败" << endl;
}
else {
cout << "读取阳光数值成功,当前阳光数值为:" << sun2 << endl;
}
}
}

最佳答案

查看完整内容

帮你改了一下三个问题都给你标明了 #include #include const DWORD sun_address = 0x6A9EC0; // 阳光的静态地址 你的静态地址都是错误的 const int value1 = 0x768; // 一级偏移 const int value2 = 0x5560; // 二级偏移 using namespace std; int main() { // 获取程序的窗口句柄 HWND hwnd = FindWindowA("MainWindow", "植物大战僵尸杂交版v2.3.7");//这个2.3.7后面不要有空格不然找不到句柄 ...

签到天数: 16 天

发表于 2025-5-15 16:58:18 | 显示全部楼层   浙江省杭州市
帮你改了一下三个问题都给你标明了



#include <windows.h>
#include <iostream>

const DWORD sun_address = 0x6A9EC0; // 阳光的静态地址  你的静态地址都是错误的
const int value1 = 0x768;          // 一级偏移
const int value2 = 0x5560;         // 二级偏移

using namespace std;

int main() {
    // 获取程序的窗口句柄
    HWND hwnd = FindWindowA("MainWindow", "植物大战僵尸杂交版v2.3.7");//这个2.3.7后面不要有空格不然找不到句柄
    if (hwnd == NULL) {
        cout << "未找到游戏窗口,请检查是否开启游戏" << endl;
        return 1;
    }
    else {
        cout << "游戏窗口已找到,窗口显示十六进制为:" << hex << hwnd << endl;
    }

    // 获取程序的进程PID
    DWORD pid;
    GetWindowThreadProcessId(hwnd, &pid);
    if (pid == NULL) {
        cout << "未找到游戏进程,请检查是否开启游戏" << endl;
        return 1;
    }
    else {
        cout << "游戏进程已找到,进程显示当前PID为:" << dec << pid << endl;
    }

    // 获取程序的进程句柄
    HANDLE process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
    if (process == NULL) {
        cout << "进程句柄获取失败" << endl;
        return 1;
    }
    else {
        cout << "进程句柄获取成功" << endl;
    }

    // 读取jz  先要读,不能直接将静态地址和偏移相加  先读取基地址的指针一一读取相加
    DWORD baseAddress = 0;
    SIZE_T bytesRead = 0;
    if (!ReadProcessMemory(process, (LPVOID)sun_address, &baseAddress, sizeof(DWORD), &bytesRead)) {
        cout << "读取jz失败" << endl;
        CloseHandle(process);
        return 1;
    }

    // 计算一级指针地址
    DWORD firstLevelAddress = baseAddress + value1;

    // 读取二级指针地址
    DWORD secondLevelAddress = 0;
    if (!ReadProcessMemory(process, (LPVOID)firstLevelAddress, &secondLevelAddress, sizeof(DWORD), &bytesRead)) {
        cout << "读取二级指针失败" << endl;
        CloseHandle(process);
        return 1;
    }

    // 计算最终阳光地址
    DWORD finalSunAddress = secondLevelAddress + value2;

    while (true) {
        int yangguang = 0;
        cout << "请输入阳光数值:";
        cin >> yangguang;

        // 修改阳光数值
        SIZE_T bytesWritten = 0;
        if (!WriteProcessMemory(process, (LPVOID)finalSunAddress, &yangguang, sizeof(int), &bytesWritten)) {
            cout << "修改阳光数值失败" << endl;
        }
        else {
            cout << "修改阳光数值成功" << endl;
        }

        // 读取阳光数值
        int currentSun = 0;
        if (!ReadProcessMemory(process, (LPVOID)finalSunAddress, &currentSun, sizeof(int), &bytesRead)) {
            cout << "读取阳光数值失败" << endl;
        }
        else {
            cout << "当前阳光数值为:" << currentSun << endl;
        }
    }

    CloseHandle(process);
    return 0;
}
回复

使用道具 举报

结帖率:0% (0/8)

签到天数: 3 天

发表于 2025-5-15 19:57:30 | 显示全部楼层   江西省九江市
ReadProcessMemory (jz)

补充内容 (2025-5-15 19:59):
ReadProcessMemory (jz)
ReadProcessMemory (结果+一级)
WriteProcessMemory (结果+二级)
回复

使用道具 举报

结帖率:100% (1/1)

签到天数: 14 天

 楼主| 发表于 2025-5-16 07:47:22 | 显示全部楼层   广西壮族自治区梧州市
恶魔の佐翼 发表于 2025-5-15 19:57
ReadProcessMemory (jz)

补充内容 (2025-5-15 19:59):

您好,能具体实现怎么写吗
回复

使用道具 举报

结帖率:0% (0/8)

签到天数: 3 天

发表于 2025-5-17 17:18:57 | 显示全部楼层   江西省九江市
奔放的小青年 发表于 2025-5-16 07:47
您好,能具体实现怎么写吗

const DWORD sun_address = 0x2A9EC0; //阳光的静态地址
const int value1 = 0x768; //一级偏移
const int value2 = 0x5560;//二级偏移

结果=ReadProcessMemory (sun_address )
ReadProcessMemory (结果+value1 )
WriteProcessMemory (结果+value2 )
回复

使用道具 举报

结帖率:0% (0/8)

签到天数: 3 天

发表于 2025-5-17 17:19:29 | 显示全部楼层   江西省九江市
恶魔の佐翼 发表于 2025-5-17 17:18
const DWORD sun_address = 0x2A9EC0; //阳光的静态地址
const int value1 = 0x768; //一级偏移
const in ...

const DWORD sun_address = 0x2A9EC0; //阳光的静态地址
const int value1 = 0x768; //一级偏移
const int value2 = 0x5560;//二级偏移

结果=ReadProcessMemory (sun_address )
结果=ReadProcessMemory (结果+value1 )
WriteProcessMemory (结果+value2 )
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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