吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

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

[经验求助] c++ win32读取pvz阳光基址为啥会失败呀,求助大佬

[复制链接]
xarzhi 发表于 2024-8-30 23:41
25吾爱币
代码如下,把读取基址的代码放在WinMain里就行,但写成函数就不行

#include <windows.h>

void InfintSunine(HANDLE& process) {
        unsigned long baseAddress = 0x6A9EC0;
        unsigned long baseValue = 0;
        if (ReadProcessMemory(process, (LPCVOID)baseAddress, &baseValue, sizeof(unsigned long), NULL) == FALSE) {
                MessageBox(NULL, "fail", "", MB_OK);
        }
        unsigned long one = 0x768;
        unsigned long oneValue = 0;
        ReadProcessMemory(process, (LPCVOID)(baseValue + one), &oneValue, sizeof(unsigned long), NULL);
        unsigned long two = 0x5560;
        unsigned long towValue = 0;
        ReadProcessMemory(process, (LPCVOID)(oneValue + two), &towValue, sizeof(unsigned long), NULL);

        int changeVal = 99999;
        if (WriteProcessMemory(process, (LPVOID)(oneValue + two), &changeVal, sizeof(unsigned long), NULL) == FALSE) {
                MessageBox(NULL, "修改失败", "", MB_OK);
        }
        else {
                MessageBox(NULL, "修改成功", "", MB_OK);
        }
}




LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
        HWND pvz = FindWindow("MainWindow", NULL);
        DWORD pid = 0;
        GetWindowThreadProcessId(pvz, &pid);
        //HANDLE process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);

        switch (uMsg)
        {
        case WM_CREATE: {
                HWND hwnd1 = CreateWindowEx(
                        0,
                        "BUTTON",
                        "一键99999阳光",
                        WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                        10,
                        10,
                        100,
                        40,
                        hWnd,
                        (HMENU)1001,
                        ((LPCREATESTRUCT)lParam)->hInstance,
                        NULL
                );
                HWND hwnd2 = CreateWindowEx(
                        0,
                        "BUTTON",
                        "植物无冷却",
                        WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                        120,
                        10,
                        100,
                        40,
                        hWnd,
                        (HMENU)1002,
                        ((LPCREATESTRUCT)lParam)->hInstance,
                        NULL
                );
                break;
        }
        case WM_COMMAND: {
                switch (LOWORD(wParam))
                {
                case 1001: {
                        if (HIWORD(wParam) == BN_CLICKED) {
                                HWND pvz = FindWindow("MainWindow", NULL);
                                DWORD pid = 0;
                                GetWindowThreadProcessId(pvz, &pid);
                                HANDLE process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
                                if (process != NULL) {

                                        unsigned long baseAddress = 0x6A9EC0;
                                        unsigned long baseValue = 0;

                                        if (ReadProcessMemory(process, (LPCVOID)baseAddress, &baseValue, sizeof(unsigned long), NULL) != FALSE) {
                                                MessageBox(NULL, "读取成功", "", MB_OK);
                                        }
                                        else {
                                                MessageBox(NULL, "读取失败", "", MB_OK);
                                        }

                                        unsigned long one = 0x768;
                                        unsigned long oneValue = 0;
                                        ReadProcessMemory(process, (LPCVOID)(baseValue + one), &oneValue, sizeof(unsigned long), NULL);
                                        unsigned long two = 0x5560;
                                        unsigned long towValue = 0;
                                        ReadProcessMemory(process, (LPCVOID)(oneValue + two), &towValue, sizeof(unsigned long), NULL);

                                        int changeVal = 99999;
                                        if (WriteProcessMemory(process, (LPVOID)(oneValue + two), &changeVal, sizeof(unsigned long), NULL) == FALSE) {
                                                MessageBox(NULL, "修改失败", "", MB_OK);
                                        }
                                        else {
                                                MessageBox(NULL, "修改成功", "", MB_OK);
                                        }
                                }
                                else {
                                        MessageBox(NULL, "未查找到进程", "", MB_OK);
                                }

                        }
                        break;
                }
                case 1002:
                        if (HIWORD(wParam) == BN_CLICKED) {
                                MessageBox(NULL, "你好", "", MB_OK);
                        }
                        break;
                }
                break;
        }
        case WM_DESTROY:
                PostQuitMessage(0);
                break;
        case WM_PAINT:
        {
                PAINTSTRUCT ps;
                HDC hdc = BeginPaint(hWnd, &ps);
                FillRect(hdc, &ps.rcPaint, (HBRUSH)(COLOR_WINDOW + 1));
                EndPaint(hWnd, &ps);
        }
        return 0;
        }
        return DefWindowProc(hWnd, uMsg, wParam, lParam);
}


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR pCmdLine, int nCmdShow)
{
        HWND pvz = FindWindow("MainWindow", NULL);
        if (pvz == NULL) {
                MessageBox(NULL, "请打开游戏", "", MB_OK);
                return 0;
        }

        WNDCLASS wc = { };
        wc.lpfnWndProc = WindowProc;
        wc.hInstance = hInstance;
        wc.lpszClassName = "MainWindow";
        wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
        RegisterClass(&wc);

        HWND hwnd = CreateWindowEx(
                0,
                "MainWindow",
                "第一个窗口程序",
                WS_OVERLAPPEDWINDOW,
                0,
                0,
                800,
                500,
                NULL,
                NULL,
                hInstance,
                NULL
        );




        ShowWindow(hwnd, SW_SHOWNORMAL);
        UpdateWindow(hwnd);

        MSG msg = { };
        while (GetMessage(&msg, NULL, 0, 0))
        {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
        }

        return 0;
}

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

 楼主| xarzhi 发表于 2024-8-31 09:58
我找到原因了CreateWindow的类名和pvz的类名重复了,damn
walykyy 发表于 2024-8-31 08:12
基址放在main函数里没有问题,封装以后有问题,有没有可能是你写的代码有问题呢
flyer_2001 发表于 2024-8-31 09:39
设置字节对齐了吗?没有的话可以写在代码里,不知道是不是这个原因。
 楼主| xarzhi 发表于 2024-8-31 09:44
flyer_2001 发表于 2024-8-31 09:39
设置字节对齐了吗?没有的话可以写在代码里,不知道是不是这个原因。

字节对齐是啥呀,ReadProcessMemory函数放WinMain函数可以读取成功,封装成方法就不行,我最近刚开始研究这个还不是很懂
flyer_2001 发表于 2024-8-31 10:15
#pragma pack(n),n为1 2 4 8 16,具体为什么要对齐可以搜索篇文章看看。
这里失败的原因还不清楚,可以跟下两次取得的进程是否一致
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-12-11 20:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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