吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

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

[会员申请] 申请会员ID:LoveCpp2021

[复制链接]
吾爱游客  发表于 2021-9-10 21:12
1、申 请 I D:好好学习的abc
2、个人邮箱:lg224@foxmail.com
3、一直在学习滴水的视频,发现有些知识点需要下载论坛源码参考。一直也想注册一个账号,希望能通过此文章获取一个账号。内容主要是用C实现植物大战僵尸无限阳光。



系统环境

- 系统:Windows 10 专业版 64位
- 软件:植物大战僵尸年度版
- 工具:Cheat Engine 7.0
- 开发工具: VS2019
- 目标:实现无限阳光

思路

- 找到阳光存放的内存地址,然后写个循环定时判断阳光是否小于某个值,小于的话就更改

查找过程

1、打开游戏进入游戏,然后打开CE,附加进程:



#### 2、搜索阳光值,获取阳光地址:

第一次先搜索50





一共11294个结果,然后回到游戏,等待阳光数值发生变化当阳光发生变化时候,在CE中输入游戏中的阳光值,然后再次扫描:



扫描完成之后发现只有一个结果。



把数值0改成10000,发现游戏中也变成了1000





我们就找到了内存地址,但是游戏重启之后他就变了,我们需要找到一个不变的地址也就是全局变量,这个全局变量通过一定的偏移可以得到阳光的地址,查看什么访问了这个地址,然后返回游戏之后,阳光变化之后CE里面也出现了指令,因为不断调试,所以下图内存地址有些变化:




因为edx这个地址也会变,所以我们要找到一个CE里面绿色的地址,绿色就是exe编译好之后不会变的地址,搜索243DF690,发现有38个。


我们需要一个个看是什么访问了这个地址,也就是谁在调用这个地址,。一般CE都会排序好前面几个就是,找了一下 发现02C8A930就是



然后我们搜索02C8A0C8,发现有几个绿色的地址;



我们手动添加地址,随便哪个+868+5578 都等于阳光的内存地址。


找到基址之后我们开始写代码,VS2019创建一个控制台项目:

VS2019 -工具-spy++获取到游戏的窗口名称:Plants vs. Zombies 1.2.0.1073 RELEASE


代码如下:
[C++] 纯文本查看 复制代码
// zwdzjs.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <stdio.h>
#include "windows.h"
int main()
{

    DWORD PID=0;
    HANDLE Process = 0;
    DWORD SumTotal = 0;
    DWORD  BaseAddress = 0x0075799C;


    //1.首先我们需要获取到游戏的进程pid,然后读取游戏的内存
    HWND Hwnd  = FindWindow(NULL, L"Plants vs. Zombies 1.2.0.1073 RELEASE");
    if (Hwnd == NULL)
    {
        printf("植物大战僵尸僵尸没有运行,请先运行游戏\n");
        return 0;
    }
    //2 获取进程PID
    GetWindowThreadProcessId(Hwnd, &PID);				//获取进程PID

    if ( PID == 0 )
    {
        printf_s("获取PID失败\n");
        return 0;
    }
    //打开进程
    Process = OpenProcess(PROCESS_ALL_ACCESS, 0, PID);
    if (NULL == Process)
    {
        printf_s("进程打开失败\n");
        GetLastError();
        return 0;
    }
    //获取内存地址
    DWORD SunAddressValue = 0;
    
    if (ReadProcessMemory(Process, (char*)BaseAddress, &SunAddressValue, 4, 0) == false)
    {
        GetLastError();
        return 0;
    }
   //获取一级偏移地址
    DWORD SunAddressFirstValue = 0;
    if (ReadProcessMemory(Process, (char*)(SunAddressValue + 0x868), &SunAddressFirstValue, 4, 0) == false)
    {
        GetLastError();
        return 0;
    }
    //获取二级偏移地址 也就是阳光的内存地址

    if (ReadProcessMemory(Process, (char*)(SunAddressFirstValue + 0x5578), &SumTotal, 4, 0) == false)
    {
        GetLastError();
        return 0;
    }
    printf("阳光的地址%d", SumTotal);
  
    //如果阳光小于9999
    while (SumTotal < 9999)
    {
        DWORD WriteSumTotal = 9999;
        printf_s("没有阳光了,修改阳光9999");
        WriteProcessMemory(Process, (char*)(SunAddressFirstValue + 0x5578),&WriteSumTotal , 4, 0);
        Sleep(5000);
    }

}

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

Hmily 发表于 2021-9-13 15:01
抱歉,未能达到申请要求,申请不通过,可以关注论坛官方微信(吾爱破解论坛),等待开放注册通知。

PS:过程太简单了,类似分析往上太多了,可以补充一些其他技术内容来申请。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2024-5-4 12:12

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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