文档章节

C#开发 植物大战僵尸 修改阳光值 源码无私分享

编程码农
 编程码农
发布于 2016/05/15 11:31
字数 445
阅读 803
收藏 0

码上生花,ECharts 作品展示赛正式启动!>>>

源代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
//Win32 API
using System.Runtime.InteropServices;
using System.Timers;

/**
 *uint PROCESS_ALL_ACCESS = 0x001F0FFF; 
 */

namespace plantsVsZombiesAux
{
    public partial class Form1 : Form
    {
        public bool isStart = false;
        public bool isCheckStar = false;
        public uint processGame;
        public const string gameName = "PlantsVsZombies";
        public const uint PROCESS_ALL_ACCESS  = 0x001F0FFF;
        public const uint lpGameBaseAddr = 0x007794f8;
        public uint lpGameAddr = 0;
        public uint smallThreshold = 500;
        public uint bigThreshold = 50000;

        //导入win32 API
        [DllImport("kernel32.dll")]
        /**/
        public static extern uint ReadProcessMemory(
        uint hProcess,
        uint lpBaseAddress,
        uint[] lpBuffer,
        uint nSize,
        uint lpNumberOfBytesWritten
        );
        [DllImport("kernel32.dll")]
        public static extern uint OpenProcess(
        uint dwDesiredAccess, //渴望得到的访问权限(标志)
        bool bInheritHandle, // 是否继承句柄
        uint dwProcessId// 进程标示符
        );
        [DllImport("kernel32.dll")]
        public static extern uint WriteProcessMemory(
            uint hProcess,
            uint lpBaseAddress,
            string lpBuffer,
            UInt32 nSize,
            uint lpNumberOfBytesWritten
        );
        /**/
        public Form1()
        {
            InitializeComponent();
            
        }
        public static uint readMemory(uint processId,uint add)
        {
            uint[] r = new uint[1];
            try
            {
                ReadProcessMemory(processId, add, r, 4, 0);
                return r[0];
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
                return 0;
            }
        }

        public void initGamesInfo()
        {
            uint lpBuffer = 0;
            lpBuffer = readMemory(this.processGame, lpGameBaseAddr);
            uint lpBufferSec;
            lpBufferSec = lpBuffer + 0x868;
            lpBufferSec = readMemory(this.processGame, lpBufferSec);
            lpBuffer = lpBufferSec + 0x5578;
            //Convert.ToInt32(lpBuffer, 16);
            this.lpGameAddr = lpBuffer;
        }
        public uint getGamesSonValue(string sonVal = "")
        {
            if (sonVal.Length > 0)
            {
                WriteProcessMemory(this.processGame, this.lpGameAddr, sonVal, (UInt32)sonVal.Length, 0);
                return 1;
            }
            uint lpBuffer = 0;
            try
            {
                lpBuffer = readMemory(this.processGame,this.lpGameAddr);
               
                string valStr = lpBuffer.ToString();
                //更新控件变量
                sonValTextInput.Text = valStr;
                uint resVal = 0;
                uint.TryParse(valStr, out resVal);
                //更新控件
                Refresh();
                return resVal;

            }catch(Exception ex){
                MessageBox.Show(ex.ToString());
                return 0;
            }
            
        }
        //定时器自动修改阳光值
        private void autoSetTimer_Tick(object sender, EventArgs e)
        {
            this.isCheckStar = autoSetcheckBox.Checked;
            if (this.isStart && this.isCheckStar)
            {
                uint currSonVal = getGamesSonValue();
                if(currSonVal <= smallThreshold)
                {
                    getGamesSonValue(bigThreshold.ToString());
                }
            }
        }
        //点击开始按钮
        private void startButton_Click(object sender, EventArgs e)
        {
            this.isStart = true;
            /**/
            System.Diagnostics.Process[] GamesProcess
                = System.Diagnostics.Process.GetProcessesByName(gameName);
            if (GamesProcess.Length == 0)
            {
                MessageBox.Show("请运行植物大战僵尸!再启动本辅助!!");
                return;
            }
            uint ProcessID = (uint)GamesProcess[0].Id;
            /* */
            /*
            IntPtr hWnd = ::FindWindow(0,gameName);  //查找窗口句柄
            if(hWnd.ToInt32() == 0) return;
            
            uint ProcessID;
            GetWindowThreadProcessId(hWnd,&ProcessID);  //取得进程ID
             */
            this.processGame = OpenProcess(PROCESS_ALL_ACCESS, false, ProcessID);
            this.isCheckStar = autoSetcheckBox.Checked;
            //初始化游戏相关基址
            initGamesInfo();
            //获取阳光的值
            getGamesSonValue();

        }
        //暂停按钮
        private void pauseButton_Click(object sender, EventArgs e)
        {
            this.isStart = false;
        }
    }
}

效果图:

 

 

 

 

 

 

 

 

游戏参考:

http://www.pc6.com/z/zwdzjs2/

 

源码下载:

http://www.oschina.net/code/snippet_2697322_56153

 

© 著作权归作者所有

编程码农
粉丝 1
博文 19
码字总数 13170
作品 0
杭州
后端工程师
私信 提问
加载中
请先登录后再评论。
C# 操作地址 从内存中读取写入数据(初级)

本示例以植物大战僵尸为例, 实现功能为 每1秒让阳光刷新为 9999.本示例使用的游戏版本为 [植物大战僵尸2010年度版], 使用的辅助查看内存地址的工具是 CE. 由于每次启动游戏, 游戏中阳光地址都...

鸿焱
01/15
0
0
c语言----实战植物大战僵尸

原理   通过指针先找到阳光的地址,然后修改地址对应的值即修改阳光值。 2. 工具   CheatEngine --- 查询进程中变量的地址   Dll注入工具 ----- 注入   VS2017 3. 实战   (1) 现在...

osc_orozgpfx
2019/10/31
2
0
从植物大战僵尸开始一步一步带你入门逆向工程,

逆向工程扫盲篇 最近又来了一群对逆向工程感兴趣的同学,我这里带领大家来一次逆向工程初体验。 在这里我们会 修改弹框的值 修改植物大战僵尸的阳光 编译并运行以下C程序 使用的工具:Devcp...

osc_b7lz7dji
2019/09/24
2
0
cheat engine使用说明

1.下载地址 https://www.cheatengine.org/ --不行可以用蓝灯等工具连接外网 2.使用说明 安装打开之后,点击左上角的电脑图标: 选择需要查看的进程: 然后看一下植物大战僵尸游戏中的目前阳光...

osc_8vgjpfw9
2019/02/15
8
0
原生JS实现的h5小游戏-植物大战僵尸

代码地址如下:<br>http://www.demodashi.com/demo/12755.html 项目介绍 本项目是利用原生js实现的h5小游戏-植物大战僵尸,主要结合了一下自己对于h5小游戏的理解,结合面向对象的编程思想进...

osc_uhmvp9bs
2018/08/07
8
0

没有更多内容

加载失败,请刷新页面

加载更多

JDBC:ResultSet Types

ResultSet Types 用于确定ResultSet的某些特征和功能。 ResultSet.TYPE_FORWARD_ONLY 只能调用 next,不能调用 previous 。否则报错 ResultSet.TYPE_SCROLL_INSENSITIVE 能调用 next/previou...

mrsuperli
昨天
7
0
Cesium笔记(3):基本控件简介—ImageryProvider地图瓦片地图配

cesiumjs中可定制多种图层,可以使用互联网上很多地图提供商的图层数据,也可以使用自己的地图数据。Cesium支持多种标准化格式的GIS瓦片服务,可以把栅格图层绘制到地球的表面——cesiumjs的...

zhoulujun
昨天
15
0
跟小伟一起学习类加载机制

我们在学习 java 基础的时候,从宏观上了解了一个类到运行大致是:.java 文件通过 javac 编译器编译得到 .class 文件,在用到该类时,jvm 会加载该 class 文件,并创建对应的 class 对象,将...

niceyoo
昨天
8
0
Electron整合React使用搭建开发环境

Electron整合React使用搭建开发环境 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 简介 用于构建用户界面的 ...

归子莫
昨天
17
0
MyBatis常见面试题和答案

MyBatis是什么? MyBatis 是一款持久层框架,一个半 ORM(对象关系映射)框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。...

JaneRoad
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部