热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用cheatengine修改植物大战僵尸

本文主要介绍关于安全,web安全的知识点,对【CheatEngine逆向修改植物大战僵尸(外挂)】和【用cheatengine修改植物大战僵尸】有兴趣的朋友可以看下由【瑶~why】投稿的技术文章,

本文主要介绍关于安全,web安全的知识点,对【Cheat Engine逆向修改植物大战僵尸(外挂)】和【用cheat engine修改植物大战僵尸】有兴趣的朋友可以看下由【瑶~why】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的【】相关技术问题。

用cheat engine修改植物大战僵尸

目录

一、实验工具介绍

二、针对植物大战僵尸

2.1 针对“阳光值”

2.1.1“阳光值”的内存地址

2.1.2 找出阳光值的内存基址

2.1.3 分析阳光内存的工作

2.1.4?分析阳光值功能实现的设计算法?

2.1.5 阳光所用内存和数据分布

2.2 针对植物

2.2.1 植物的内存地址

2.2.2 植物的内存基址

2.2.3 代码工作过程

3.3 针对金币

3.3.1 金币的内存地址

3.4 针对僵尸

3.4.1 僵尸数量的存放地址

3.4.2 僵尸血量分析

3.5 关卡跳跃

?三、心得与体会


一、实验工具介绍

Cheat Engine是一款专注于游戏的修改器。它可以用来扫描游戏中的内存,并允许修改它们Cheat Engine的用法也不是很复杂,首先是要先打开游戏,然后打开Cheat Engine,点击左上角的那个电脑图标,在弹出来的框中选择游戏进程,然后选择扫描类型和数值类型,进行扫描并修改。内存扫描是Cheat Engine的最主要功能之一,它可以扫描指定数值的内存地址,通过修改这些数值来达到修改游戏数据的目的,从而达到诸如无限生命、时间或弹药等优势。

针对植物大战僵尸 2.1 针对“阳光值” 2.1.1“阳光值”的内存地址

采用3种以上的方法扫描至少3关的“阳光值”的内存地址,并能修改;

第一种:精确数值修改阳光值

?

第二种:根据增加的数值或减少的数值改变阳光数

?

?

第三种:根据数值增加了…或数值减少了…改变阳光数

?

2.1.2 找出阳光值的内存基址

? ? ? 因为要实现修改阳光值,所以要找出游戏中存放“阳光”的内存地址,然后使用API函数进行内存修改,但是每次运行游戏时这个内存地址都会不一样,所以要找出基址。

? ? ? ?以上题为例,已经改好的一次阳光值为7777,在此基础上找基址,如上图所示,内存地址“2E1FA8E8”就是存放阳光的地址,我们可以随意的修改此内存中的数值。但是此地址是动态的,下次运行游戏时它存放的肯定就不是阳光了,我们要继续查找不会变的静态地址,看下一步。

? ? ? ?在此地址上点右键->查找写入该地址的代码,会看到一个对话框“下列代码更改选择的地址”,里面是空白的;切换回游戏,随便种一棵植物(目的是让阳光变少,好找出哪些代码修改了此内存)﹔再回到CE,会看到刚才的空白对话框中已经有内容了,双击或点“更多信息”出现下图内容:

? ? ? ?记住EDI 的值“2E1F5370“,下一步将上面的搜索框前的16进制勾选上一>将EDI的值填进去一>首次扫描,如下图所示:

? ? ? ?搜索出一堆地址,搜索了几次都发现有这个值“025DAD28”,将上一步搜索出的值添加到地址列表一>右键一>查找所有访问此地址的代码,稍等一下就出一大堆代码出来了,如下图:

双击第一个 mov指令查看更多信息,如下图:

原来ESI 的值是EDI+868得来的,EDI的值是2E1F5370,我们继续搜索025DA4C0,如下图:

? ? ? ?查找到了绿色内存地址,绿色内存地址表明该地址在游戏中是静态的,它就是我们要找的基址了。下面我们试着把这些内存地址连接起来,如下图,手动填加地址进行测试:

成功找到游戏的阳光基址

2.1.3 分析阳光内存的工作

2.1.4?分析阳光值功能实现的设计算法?

#include ??

class SunClass{

public:

??int SunTime;

??int SunValue;

??int SunAttr;

};

int main()

{

??SunClass *Sun=new SunClass;

??Sun->SunValue=100;

??printf("SunValue: %d

",Sun->SunValue);

??return 0;

}

2.1.5 阳光所用内存和数据分布

?HWND的hWnd = FindWindowEx(NULL,NULL,“XXXX”,“XXXX”);/ /这里是游戏过程中,窗口的名称和窗口类名。
PVOID PADDR =(PVOID)0x43158F“;
DWORD dwProcessId和= 0;
GetWindowThreadProcessId(HWND,dwProcessId和);
操作的hProcess = OpenProcess(PROCESS_VM_WRITE | PROCESS_VM_OPERATION,FALSE,dwProcessId和) / /适当的权限来打开游戏过程中得到处理。

和DWORD dwWritten = 0;
BYTE bCode =的0xe5;
的hProcess,PADDR,bCode,大小(bCode),与dwWritten WriteProcessMemory();
CloseHandle的(的hProcess);

2.2 针对植物 2.2.1 植物的内存地址

?假设植物拿起时(暗色)为0,放下时(亮色)为1,通过不断拿起放下进行01扫描,找到植物的伪地址。

2.2.2 植物的内存基址

?1.打开游戏(此时游戏内有三个或三个以上的植物),在CE中选择“未知的初始值”,点击“首次扫描”。

2.然后在游戏中点击某一植物,但不种下;随后在CE中选择“变动的数值”,点击“再次扫描”。

?

?

?扫描结果如下:

3.不对植物进行操作,选择“未变动的数值”,点击“再次扫描”,反复进行该项操作直到发现点击“豌豆射手”后,有的值变为0,点击“向日葵”,值变为1,点击“樱桃炸弹”,值变为2。将找到的两个地址其中之一添加到下方。

?4.点击地址,右键选择“找出是什么访问了这个地址”,随机点击某一植物,出现指令。

?

5.双击代码,显示详细信息,可以看到一级指针的偏移量为24。

6.在CE中勾选16进制,输入167410A0新扫描。然后把新地址16709430添加到地址栏,在地址上右键选择“找出是什么访问了这个地址”。

查看详细信息,可以看到二级偏移量为138

7.再搜索167092F8得到026BA368,在地址026BA368上右键选择“查看是什么访问了这个地址”

双击查看详细信息,可以看到三级指针偏移量为768

8.再搜索02819EB8看到绿色的基址

?9.最后添加指针,点击“手动添加地址”点击指针,点击三次“添加偏移”,输入基址和偏移后点击“确定”。

2.2.3 代码工作过程

?刚刚搜索到的第一个卡槽的内存地址 我们显示反汇编程序。

?发现通过一些add和mov指令进行植物cd的冷却改变,我们改为nop,发现植物是始终冷却好的。

?

3.3 针对金币 3.3.1 金币的内存地址

金币的数值进行了加密,当前数值=金币数/10,然后我们用精确搜索即可,如下图:

?在击败僵尸时,有时会掉落金币,金币数目增加到414,再次扫描

? ? ? ?也可以通过先扫描未知的初始值再改变金币数值,扫描变动的数值,也可以根据金币的变化,选择增大或者是减小的数值,金币数不变时也可以通过未变动的数值进行扫描,最后得到金币的内存地址。

3.4 针对僵尸 3.4.1 僵尸数量的存放地址

通过扫描精确的数值找出僵尸数量的存放地址,并找出其基地址和指针。

3.4.2 僵尸血量分析

?首先我们让僵尸被打一次,扫描一次减少的数值

?找到访问之后,

?进行再次查询

3.5 关卡跳跃

? ? ? ?首先进行精确值扫描“1”,然后通关第一关后,在第二关开始时扫描“2”,然后再通关第二关后,第三关开始时扫描“3”,就可以找出关卡的数据内存地址。找到后可进行跳关操作。

? 三、心得与体会

? ? ? ?信息安全的核心思想之一就是软件逆向,是指从可运行的程序系统出发,运用解密、反汇编、系统分析、程序理解等多种计算机技术,对软件的结构、流程、算法、代码等进行逆向拆解和分析,通过完成本次实验,利用ce对植物大战僵尸中的各种参数进行修改,对ce的使用有了更深刻的了解,对逆向思维的思考方式有了更加深刻的认识,受益匪浅。

本文《Cheat Engine逆向修改植物大战僵尸(外挂)》版权归瑶~why所有,引用Cheat Engine逆向修改植物大战僵尸(外挂)需遵循CC 4.0 BY-SA版权协议。


推荐阅读
  • Java开发人员知道Java语言并不总是每种任务的最佳语言。今年的JRuby和Groovy的1.0版本发行了对向Java应用程序添加动态语言的兴趣。借助Groovy, ... [详细]
  • ObjectiveC 基础教程第六章,源文件组织
    Object-C基础教程第六章,源文件组织0x00:前言到目前为止,我们讨论过的所有项目都是把源代码统统放入到了main.m文件中。这样随着项目越来越大,文件内容会越来越多,到后面 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了VoLTE端到端业务详解|VoLTE用户注册流程相关的知识,希望对你有一定的参考价值。书籍来源:艾怀丽 ... [详细]
  • 耳返概述:耳返主要实现监听的功能,在低延时的情况下可以给主播一个比较真实音频的反馈,在演唱会等专业场景里比较常用。技术实现上来说就是要时时的把录制进的音频数据立刻播放出去,当然这个 ... [详细]
  • 4HTTP响应报文
    1.HTTP响应报文分析HTTP响应报文效果图:响应报文说明:---响应行状态行---HTTP1.1200OK#HTTP协议版本状态码状态描述---响应头---Server:Ten ... [详细]
author-avatar
mobiledu2502885243
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有