C# 从零开始编写一个修改“植物大战僵尸”阳光的内存辅助

相信很多朋友都喜欢玩游戏,那么大多数人都会选择开挂

虽然最近在做一个C#天谕模拟G(类小精灵) 目测账号已被

要求5000天币解冻 不然等三天、当时差点没吓一跳500

软妹币 知道有很多人都开过小挂挂 但是开的时间久以后免

会萌生自己研发外挂的想法

 

那么我先简述一下外挂有哪几种、第一种也就是以前比较

主流的即“内存辅助”,这种外挂现在的话 网络游戏很少了

一般应用在单机游戏,该方式的话需要一定的汇编基础,

否则不好找CALL 也需要HOOK、包括代码注入方面知识

 

第二种是现在最多的一种它安全可不需要开发者有特别

牢厚的编程基础,即按键小精灵(模拟辅助)、主要通过后

识图(OCR / 光学识别)与后台窗口绑定 后台模拟用户一

操作的一种外挂、

 

第三种是很高级的一种了、即TCP/UDP层面的一个外挂

可以理解为网络层的辅助 难度的话高于“内存辅助”大牛玩

的、TCP/UDP层面的外挂使用“封包/截包”技术目前主要

有两方式一SOCKET SPI+,二(API-HOOK + DLL注入),

相对于第一种第二种是最多的,但是这类外挂会涉及到

密码心理学方面的知识,应为需要去“解包”然后在“封包”

属于中间人(第三方)、每个游戏都有自己的加密所以解密

会变得会相当麻烦、当然也有办法从OD反汇编中去找加

密的代码、当然有兴趣的朋友们可以去研究

 

外挂与网络游戏之间,如同鼠与猫的一样 网络游戏每次

更新堵外挂 外挂又绕过封堵 无限的死循环似乎没有终点、

 

那么网络游戏公司为什么会打击游戏辅助?如果说为了

“游戏平衡”似乎好像是那么回事 但似乎又不是 那么我谈

谈我的看法吧、

在我看来打击外挂 不如说是外挂动了网络游戏运营商的

金融蛋糕、我举个例子 盛大龙之谷(飞机辅助) 在正常情

况下如果没有很好的装备根本打不过黑龙 弄好装备则需

要大量RMB、如红龙不开挂那压根不敢想

蜗牛九阴真经自动采集挂 那么我怎么没有见到有查杀呢?

因为那些挂虽然出了材料 但是在游戏内部货币交易 那么

我们需要知道一个定律 在任何世界里面你交易的货币一

有抵押资产才有效 否则就是无效的

 

而游戏里面是否有抵押资产?原来我还充钱那时候豪气

现在再看我那是愚蠢游戏里面不存在抵押资产 而人们所

见的物品只是虚拟 如换一种看法它一分不值 它只是一

串代码常量 它背后没有任何可以做抵押的物品 也可说是

精神上的物品 玩游戏是精神消费 所以它又不是愚蠢

 

但是归根结底 外挂之所以被网络游戏运营提供商打击在于

动了金融蛋糕、至于动了那么才会惊扰他又是另一回事 但

是可以从它成本预算 如果你造成他的损失低于它“找/告你”

的成本,那么你是安全的 因为它不会花这个钱 当然如果超

过预算10~20%我估计他也不会找你麻烦、若再多不敢保证

C# 从零开始编写一个修改“植物大战僵尸”阳光的内存辅助_第1张图片

首先打开CE(Cheat Engine)后点击左上角“小电脑 / 进程列表”

然后在弹出的窗口中选择“PlantsVsZombies.exe”植物大战僵尸

的执行文件,点击打开按钮

在游侠网或这里下载“植物大战僵尸年度中文版”这个挂只支持该

版本 至于其它的基址不一样 但是大家把下面的内容搞懂了 那么

找其他版本的基址会很轻松 因为方法都差不多

http://fenxiang.qq.com/x/0SmMvFZ8cfFOc3CFVprd3~hPIcT5rX133GNxon3MZF9L

C# 从零开始编写一个修改“植物大战僵尸”阳光的内存辅助_第2张图片

搜索阳光的数量,单机游戏还好些说50一般都是

而现在的网络游戏大多在内存中存放的都不是50

而是计算出的值坑爹到了极点、所以只能OD调

不过那些游戏似乎早预料到该情况 所以不是自结

束就是报错、反正让你调不了 当然会有办法解决

输入50的值到“数值:”下的编辑框中,然后选择

“精确数值”点击“新的搜索”按钮后会出现很多结果

C# 从零开始编写一个修改“植物大战僵尸”阳光的内存辅助_第3张图片

在“数值:”下的编辑框中输入“0”点击“再次搜索”

“再次搜索”时指在“新的搜索”结果中搜索

再上图中看到一个值,刚好包含的值等于0与

阳光的值相同,那它到底是不是呢? 

C# 从零开始编写一个修改“植物大战僵尸”阳光的内存辅助_第4张图片

选择这个地址点击红箭头或双击 拖动到下方的报表列表框

中 然后我们把鼠标放在数值上面 去修改它的值试试是不是

这块内存地址

C# 从零开始编写一个修改“植物大战僵尸”阳光的内存辅助_第5张图片

在“更改数值”窗口中的“输入新的数值:”下的编辑框内输入

将要修改的数值,举个例子是100 然后点击确定 看看游戏

阳光的值是不是变成100

C# 从零开始编写一个修改“植物大战僵尸”阳光的内存辅助_第6张图片

可以看到阳光与被测试修改的值相等,也就说明这个地址

是阳光值、但是这个地址不是静态的值是一个动态的值

第一次是这个地址 关闭游戏后重新运行后又运行 阳光的

地址又不一致了怎么办?那么就需要去找内存基址(静态)

通过一定地址偏移到阳光的地址

 C# 从零开始编写一个修改“植物大战僵尸”阳光的内存辅助_第7张图片

在报表列表框中选择刚才被加入的“阳光”地址右键,

“找出是什么改写了这个地址”你也可以使用“找出是

什么放了这个地址”反正看心情

C# 从零开始编写一个修改“植物大战僵尸”阳光的内存辅助_第8张图片

然后打开游戏随意浪费点阳光、看看类似上图的框框

内会不会出现访问代码的汇编指令包括内存地址、然

后随意选择一个双击或点击“详细信息” 会弹出一个信

息框里面包含很多信息

C# 从零开始编写一个修改“植物大战僵尸”阳光的内存辅助_第9张图片

在上图中有一串红色的代码则表示,刚才搜索的1EA013B8

等于这里的mov [edi+5578], esi 怎么理解这句话

esi是32位来源索引寄存器、我记得好像是 记得不太清了

mov是移动指令,上面这句话说把esi复制给[edi+5578]

而不是把[esi]的值复制给[edi+5578]这是有很大区别的

所以说不需要看esi的值,只需要找edi因为[edi+5578]的值

等于1EA013B8

C# 从零开始编写一个修改“植物大战僵尸”阳光的内存辅助_第10张图片

在“数值:”下的编辑框中输入“1EA013B8”且勾选上“十六进制”

击“新的搜索”会出现一大堆地址,怎么选择呢?把第1~5个选择

并移动到下方的报表列表框内 观察那个地址的值没有被改变 因

为有些时候那个地址内恰好包含被搜索的值 但是过一会会自己

修改 所以需要观察一下但是不可以修改它的值 谁知道会出现什

么问题 好的观察前五个中第五个不会发生修改 那么它相对应其

他4个地址是伪静态的把其他4个不用的地址全部删除掉、

C# 从零开始编写一个修改“植物大战僵尸”阳光的内存辅助_第11张图片

右键刚才被筛选出的地址,选择“找出是什么访问了这个地址”

C# 从零开始编写一个修改“植物大战僵尸”阳光的内存辅助_第12张图片

然后在候选列表里面随意的选择一个双击或点击“详细信息”

查看它的汇编代码,然后再上图中看到又出现了一串红色

的汇编代码mov edi,[esi+868],怎么理解呢?其实与上面

的大同小异,只是两者顺序不一样了而已

edi等于[esi+868]的值而不是edi等于esi+868 但是不需要去

看edi的值,先找要去找esi的值是多少 但是这里的esi与上

面的esi不一样 它是一个寄存器在不同的代码段所产生的值

不一定是一致的因为作用域不一致 而esi等于0264B0A8

那么则需要在搜索找包含0264B0A8的地址 (额,但是似乎

有些 太多了找了那么多层还在找真的好蛋痛、呵呵 但其实

这是很少的那种了呢,毕竟不是专业的没那恒心)

C# 从零开始编写一个修改“植物大战僵尸”阳光的内存辅助_第13张图片

在“数值:”下的编辑框内输入“0264B0A8”勾选上“十六进制”

点击“再次搜索”然后又出现一大堆“地址”但是突然出现一些

“绿色”的地址,这些地址就是“基址”即静态不变的地址 好一

下出现四个 每个值都一样 随意选择一个地址记录下来

C# 从零开始编写一个修改“植物大战僵尸”阳光的内存辅助_第14张图片

表达式:阳光=[[[7794F8]+868]+5578] // 二级偏移

C# 从零开始编写一个修改“植物大战僵尸”阳光的内存辅助_第15张图片

点击“手动加入地址”按钮,然后勾选上“指针”然后

把找到“基址”输入进去 点击Add Offset /添加偏移

填写上相应的地址偏移 然后看看结果与游戏中的

阳光数量是否相同,OK一致 那么下面有请C#了

C# 从零开始编写一个修改“植物大战僵尸”阳光的内存辅助_第16张图片

当点击修改阳光按钮被点击后,寻找窗口(FindWindow)“植物大战僵尸”

窗口句柄 在通过GetWindowThreadProcessID函数(获取与窗口相关联

的进程标识),因为这个是内存挂所以需要通过OpenProcess(打开进程)

为C#分配一个访问游戏的有效句柄、下面则很简单了

ReadProcessMemory(读进程内存)怎么去读,根据上面偏移去读去最后

C# 从零开始编写一个修改“植物大战僵尸”阳光的内存辅助_第17张图片

再把新的“阳光”值写入游戏内存,然后切换到游戏看看是否修改成功

GameModifyExample: http://pan.baidu.com/s/1dDnWRYD

上面是这个游戏修改器的示例源代码,当然也希望你看了本文有所收获

你可能感兴趣的:(C#,Plug-in,elf.)