9159金沙游艺场-奥门金沙游艺场-[欢迎您]

9159金沙游艺场为您呈现最新的面貌!,目前注册送体验金,欢迎您将成为影视娱乐行业新的风向标,是亚洲的优质娱乐先锋。

游戏外挂原理解析与制作

日期:2019-11-06编辑作者:服务器

游戏外挂原理解析与制作,游戏外挂原理解析

  上篇说到我们已经通过代码首次扫描,得到所有值=1000的内存地址,并将它们存入了集合中。

  附上链接:

  

  Demo界面:

    9159金沙游艺场 1

  

  首次扫描结果:

    9159金沙游艺场 2

   然后我们再从这32个结果中找到我们真正需要的那个变量地址。

 

  • 点击修改Button改变变量value的数值:

  9159金沙游艺场 3

  此时变量value=789,我们通过再次读取32个结果地址中的数据来进一步筛选,进行二次搜索:

        /// <summary>
        /// 继续搜索
        /// </summary>
        /// <param name="Value">在这里填入改变后的数值</param>
        public void ContinueSearch(int Value = 789)
        {
            int ReadSize = -1;
            byte[] FindArray = new byte[4];
            //临时地址字典 key=内存地址 value=存放数值
            Dictionary<int,int> TempAddressList = new Dictionary<int,int>();
            foreach (int Address in AddressList)
            {
                //因为知道是整数型,所以4字节确定了
                if (ReadProcessMemory(hProcess, (IntPtr)Address, FindArray, 4, out ReadSize))
                    //如果读取的字节数无误
                    if (ReadSize == 4)
                    {
                        //处理数据[对比分析]
                        if (CompareData(FindArray, Address, Value))
                        {
                            TempAddressList.Add(Address, Value);
                        }
                    }
            }
        }    

  取出值=789的地址:

        /// <summary>
        /// 再次对比第一次搜索结果的地址中存放的值与输入值是否一致
        /// </summary>
        /// <param name="DataArray">读取到的字节数组</param>
        /// <param name="Address">地址</param>
        /// <param name="Value">游戏中的实际数值</param>
        /// <returns>是否一致</returns>
        public bool CompareData(byte[] DataArray, int Address, int Value)
        {
            int num = BitConverter.ToInt32(DataArray, 0);
            if (num == Value)
            {
                return true;
            }
            else
            {
                return false;
            }
        }    

  调试输出下结果:

  9159金沙游艺场 4

  可以看到4字节{21,3,0,0}一个整形为789,地址:41632768。

  十六进制表示0x27B4400:

  9159金沙游艺场 5

   现在只有一个地址符合,那么这个0x27B4400极有可能是我们所寻找的地址,一般情况下建议照着上面再修改一次,确保0x27B4400的值的确跟随变化了,我这里就不再重复演示了。

9159金沙游艺场,  

  好了,得到地址不是我们的最终目的,最终目的是修改该地址的数值:

        /// <summary>
        /// 将自定义数值写入内存
        /// </summary>
        /// <param name="Address">内存地址</param>
        /// <param name="Value">自定义数值</param>
        /// <returns>是否写入成功</returns>
        public bool WriteValue2Address(int Address,int Value)
        {
            int WriteSize = -1;
            byte[] WriteArray = BitConverter.GetBytes(Value);
            if (WriteProcessMemory(hProcess, (IntPtr)Address, WriteArray, 4, out WriteSize))
            {
                //如果和实际写入字节数一样提示成功
                if (WriteSize == 4)
                {
                    Console.WriteLine("血量写入成功!");
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        }

  来看下效果:

    9159金沙游艺场 6

  

  这是原来的界面:

    9159金沙游艺场 7

  

  点击刷新后:

    9159金沙游艺场 8

  

  以上,最基础的一套修改流程就结束了,未完待续。

  PS:转载请附带原文路径: ,我已委托“维权骑士”为我的文章进行维权行动。

  欢迎关注微信公众号[游戏外挂原理解析与制作],对本文有不理解的地方或者不同的观点可以给我留言,一定回复。

       9159金沙游艺场 9

 

上篇说到我们已经通过代码首次扫描,得到所有值=1000的内存地址,并将它们存入了集合中。...

本文由9159金沙游艺场-奥门金沙游艺场-[欢迎您]发布于服务器,转载请注明出处:游戏外挂原理解析与制作

关键词:

API使用方式与和属性优化

1 lucene简介  1.1 什么是lucene  Lucene是一个全文搜索框架,而不是应用产品。因此它并不像百度或者googleDesktop那么拿来...

详细>>

Ubuntu 14.04 LTS Server 安装 LAMP Server

LAMP 是 Linux、Apache、MySQL、PHP 的简称。本教程使用的Ubuntu 14.04 LTS Server64 位的系统,安装 Apache2 web服务、PHP5 支持 (...

详细>>

0集群安装

1、希图条件  三台64位CentOS,安装在VMware虚构机下。   1卡塔 尔(英语:State of Qatar)安装普通话输入法:       1、...

详细>>

Redis搭建Nginx日志分析平台

使用ELK+Redis搭建Nginx日志分析平台 logstash,elasticsearch,kibana怎么进行nginx的日志分析呢?首先,架构方面,nginx是有日志...

详细>>