文档章节

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

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

源代码:

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
杭州
后端工程师
私信 提问
转载:安卓使用教程:(八门神器)破解游戏内购方法及原理

小编一直反对游戏修改,认为那样会失去游戏的乐趣,但最近在玩《萌军敢死队》,努力了好多天发现,无论你如何努力,不内购游戏就无法继续下去了,对于这样的游戏我只能说一个字:改! 八门神...

科技创造
2015/07/21
408
3
游戏AI的开发框架组件--Behaviac

Behaviac是游戏AI的开发框架组件,也是游戏原型的快速设计工具。支持行为树BT,状态机FSM,HTN等多种范式,方便的编辑和调试。支持全平台,适用于客户端和服务器,助力游戏快速迭代开发。 编...

匿名
2016/03/29
14.9K
5
scratch中植物大战僵尸之会收集太阳的的太阳花

昨天我们已经学习了如何收集豌豆,那么太阳花如果想生产太阳的话,那么太阳怎么出现呢,我们该如何做呢?这个需要怎么实现呢,那么,这就需要考验大家对于昨天的收集豌豆的小游戏是不是完全掌...

h_snow_1
03/23
0
0
学习逆向知识之用于游戏外挂的实现.第三讲,通过游戏外挂.分析红色警戒金钱基址.以及确定基址小技巧.

                          分析红色警戒金钱基址.以及确定基址小技巧. 一丶基址简介   通过第二讲.我们寻找植物大战僵尸无限阳光.学习到了相关的逆向知识.以及...

iBinary
08/22
0
0
android小游戏制作基础,View实现游戏布局和方法

在使用android的朋友们,相信大家对android的游戏不陌生吧,像愤怒的小鸟,植物大战僵尸等等优秀的游戏,给我们带来了很好的用户体验 下面我来教大家一点android游戏开发的一点基础,大家可以...

鉴客
2011/11/01
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

局域网共享文件读写的实现方式

首先是设置共享目录,支持用户和密码等权限控制 然后我们可以使用Windows资源管理器操作共享目录下的文件 这中间隐藏了资源管理器帮我们建立目录映射和连接的过程,如果设置了用户名和密码,...

夏至如沫
15分钟前
2
0
Elasticsearch安装与配置

一、Docker安装ES 开发模式 可以使用以下命令快速启动Elasticsearch以进行开发或测试: $ docker run -p 9200:9200 -p 9300:9300 -d --name es -e "discovery.type=single-node" docker.ela...

吴伟祥
22分钟前
1
0
移动页面滚动穿透解决方案(荐)

移动页面滚动穿透解决方法目前有多种解决方案,我介绍下几种方案: 解决方案1:阻止冒泡。 //关键代码$(".sliders,.modals").on("touchmove",function(event){    event.preventDefau...

壹峰
22分钟前
0
0
调用infura实现java项目调用智能合约

https://infura.io/dashboard 注册一个帐号 添加一个project 可选择主网或者其他网络,然后复制地址放进pom.xml中 复制智能合约地址复制到pom.xml中 复制任意一个帐号的private key到pom.xml...

八戒八戒八戒
29分钟前
3
0
vue+koa2+token 登录验证

https://segmentfault.com/a/1190000017379244?utm_source=weekly&utm_medium=email&utm_campaign=email_weekly...

Js_Mei
32分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部