植物大战僵尸:学会使用人造指针

news2024/11/15 17:53:06

通过向游戏中注入一段特殊的汇编代码,实现自动获取动态地址,省略找基址的麻烦。该方法适用于游戏基址层数过多无法直接获取到基址,游戏根本无法找到基址。

1.打开CE工具并附加游戏进程,首先通过遍历的方式找到阳光的动态地址,然后在地址栏上右键选择找出是什么改写了这个地址如下所示我们选择mov eax,[esi+5560]这条汇编代码。

2.上图可以看到有两条汇编指令,而前面的计数器一直在增加,说明有时钟一直在访问这个地址,我们以第2条汇编指令为例,点击反汇编当前地址在XOR指令上按下F5下断点,其中mov eax,[esi+5560]则表示将当前阳光数量赋值给EAX寄存器,我们可以看到右侧寄存器窗口eax=32,其中的32正好就是阳光的十六进制表示形式,注意mov eax,[esi+5560]这条指令,观察该指令在注入前与注入后会有什么变化?

3.直接点击工具列表-> 选择自动汇编 ->模版->代码注入-> 确定按钮,如下图所示:

4.我们需要在mov eax,[esi+00005560]这条汇编指令执行之前获取到里面的阳光数据,此时可以在originalcode之前写入以下汇编代码,其中push eax,pop eax分别是压栈与出栈,因为我们要使用EAX寄存器暂存数据,此时必须要将原始的EAX寄存器里面的内容进行保存,在代码执行完毕以后必须通过POP指令归位,否则会导致程序异常或堆栈失衡,mov eax,[esi+5560]则表示将[esi+5560]中的数据取出来,此处就是阳光的数量。

5.接着我们需要找一个相对固定的内存地址,并将其填充到mov [xxxx],eax方框中,此时我们回到CE中(自动汇编窗口不要关闭),在内存查看器窗口选择视图->内存区域

我们需要浏览内存区域,找出一个具有读写权限的空地址,并且类型为映像的,这里还需要看后面的模块一定要是植物大战僵尸文件里的模块,此处我找到了一个内存地址 0B4CF000,双击即可跳转到相应的位置,这里我们不能选择02CA9000这个内存地址,因为这个地址是QQ拼音的模块。

6.通过双击0B4CF000地址,即跳转到相应的内存区域,如下在内存查看器中,标红处。

我们直接将0b4cf000这个内存地址填入到我们的汇编代码中,此时只要程序获取到阳光,会默认将阳光的数量放入0B4CF000这个内存中进行保存。

完成获取以后,我们直接在CE中添加这个内存地址,并开启自动汇编CT脚本,此时阳光的数量就可以获取到了。

我们再次来到反汇编窗口观察注入后的变化,可以看到CE是直接在D6679600处写入了 jmp 指令直接跳转到了我们自己写的代码中去执行了。

跟随00DF0000这个地址即可看到如下代码,没错!这些代码正是我们在CT表中分配的,当执行完获取数据以后则会自动跳转到原始地址0048982B继续执行原始代码。

总结:上方的的人造指针有一个小问题,那就是我们无法修改阳光的数量,其实这个问题很简单,在开头我们说过该地址有一个时钟一直在给这个地址赋值,而我们在开头查找的是内存访问,如果要修改数据,应该要找内存写入相关的地址。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/134591.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

zookeeper之master选举代码实现

master选举的基本概念 (1)假设有一个系统A,它向外提供了一个服务,叫做服务B。并且这个服务需要24小时持续不断的向外提供。也就是提供服务的机器不能够有单点故障。于是我们考虑使用集群。 (2)我们采用的是master-sla…

傻白入门芯片设计,如何做文献笔记(十九)

Article: 文献出处(方便再次搜索) 作者文献题目文献时间Data: 文献数据(总结归纳,方便理解) 这篇文章的目的结论背景介绍结果方法(可选)Comments: 对文献的想法 (强迫自己思考&#…

Java人脸识别相册分类按时间分类相册按城市分类相册app源码

简介 后台Java,前台mui开发的android app;主要是按拍摄时间,人脸,城市进行相册照片的分类。 演示视频 https://www.bilibili.com/video/BV1XP4y187rA/?share_sourcecopy_web&vd_sourceed0f04fbb713154db5cc611225d92156 技…

MySQL调优-Explain详解和索引最佳实践

目录 Explain工具介绍 Explain分析示例 explain 两个变种 explain中的列 1.id列 2.select_type列 3. table列 4.type列 5. possible_keys列 6. key列 7. key_len列 8. ref列 9. rows列 10.Extra列 索引最佳实践 1.全值匹配 2.最左前缀法则 3.不在索引列上做任何操…

2D 平台动作冒险游戏

本文实现比较流畅的跑和跳跃 跑的动画需要从idle经历到walk再到run的过程,这个过程可以用融合树实现 也可以让玩家在按下按键时先固定播放完一个walk的动画,然后再自动切换到run的状态。 只不过在任何状态时,只要玩家松开了按键,…

钧瓷产业数字化,将促使禹州走向更高级的社会形态——钧共体

讲好钧瓷产业的故事 有深度的故事,有温度的内容 有态度的文字,有立场的思考 版权声明:钧瓷内参独家发布,侵权必究 第334期 钧瓷内参 2023年1月1日 这里的上市指沪深的主板,创业板和科创板,区域的挂牌不算。 这个数据是根据禹州钧瓷产业2022…

GPU服务器之Colab配置及使用教程

在进行深度学习过程中,不可避免需要进行炼丹的操作,而博主的电脑本身性能就很拉跨,一旦再运行其他的应用便是寸步难行,最好的办法便是再买一台,哈哈哈,当然也可以使用一些云服务器来进行,博主这…

MySQL调优-深入理解MySQL索引底层数据结构与算法

目录 索引的定义 B-Tree (1) 非叶子节点不存储data数据,只进行存储索引(这个索引是冗余的索引,多余的),可以放更多的索引 (2) 叶子节点包含所有的索引字段 (3) 叶子节点用指针相互连接,提高区间访问的性能 Hash (1) 对索引的…

基于pybind11的c++开发cuda算子用于python调用

一、环境 win10VS2022python39pybind11最新版git下载源码,后边会用:https://github.com/pybind/pybind11同时通过pip install pybind11,python环境下也要安装cuda环境配置参考:https://zhuanlan.zhihu.com/p/488518526二、cuda核函数动态库生成 步骤一:创建cuda项目 创…

VueElement

一、vue 1.1 概述 接下来我们学习一款前端的框架,就是VUE。 Vue 是一套前端框架,免除原生JavaScript中的DOM操作,简化书写。 我们之前也学习过后端的框架 Mybatis , Mybatis 是用来简化 jdbc 代码编写的;而 VUE 是前…

绝对路径和相对路径

目录 1说明 2.相对路径的优势 3.注意 4./说明 1说明 绝对路径:文件真实的存放位置 例:D:\data\applogs\xxl-job\xxl-job-admin.log 不需要知道其他任何信息就可以根据绝对路径判断出文件的位置 相对路径:相对于当前位置的路径 前端开…

QT学 控件(四)步长调节框(QSpinBox + QDateTimeEdit)

文章目录QSpinBoxQDateTimeEditQSpinBox 允许用户通过单击向上/向下按钮或按键盘上的上/下来选择一个值来增加/减少当前显示的值。用户还可以手动键入值 常用于处理 选择 : 【1-99】 【星期1一 - 星期天】【1月-12月】 样式: 继承自: QAb…

网络协议(二):MAC地址、IP地址、子网掩码、子网和超网

网络协议系列文章 网络协议(一):基本概念、计算机之间的连接方式 网络协议(二):MAC地址、IP地址、子网掩码、子网和超网 目录一、MAC地址二、IP地址1、IP地址的组成2、IP地址的分类三、子网划分1、等长子网划分2、变长子网划分四、超网五、判断一个网段…

DIY NAS服务器之OMV 5.6入坑指南(四) -安装docker和Portainer

系列文章目录 DIY NAS服务器之OMV 5.6入坑指南(一)-openmediavalut 5.6安装DIY NAS服务器之OMV 5.6入坑指南(二)- 安装omv-extras插件DIY NAS服务器之OMV 5.6入坑指南(三)- 切换系统源​​​​​​​ ​​…

CentOS安装Vscode-yum+Vscode前端开发必安装的插件

CentOS安装Vscode-yum Visual Studio Code 是 Microsoft 产品和开源跨平台代码编辑器。 它提供内置调试支持、代码完成、集成终端语法高亮、嵌入式 Git 控制、代码重构和代码片段。 在本教程中,我们将介绍如何使用 CentOS 7 机器上的官方代码存储库安装最新版本的…

Python--你见过雪飘人间吗?

happy new year 突然想来一点雪花特效。 其实Python做前端效果还是很少的,也就大概记录一下画法啦 对了祝大家新的一年快乐,早点脱单吧!!! 附上一张女神的照片 Python-turtle 科赫曲线是一种分形。其形态似雪花&am…

地宫夺宝(三种方法)(第五届蓝桥杯省赛C++A/B/C组,第五届蓝桥杯省赛JAVAB/C组)

PS:方法一和方法看起来复杂,但其实较容易理解,大家不要跳过哦。至于方法三的动态规划则可能有点抽象,理解起来有点难度。 目录 题目描述: 三种方法: 方法一:暴力枚举(该方法只能获得30分&…

函数传参问题,桶排序去重,分治递归,摩尔投票求数组众数,数组中心下标求法

TIPS 1. 我们都知道,地址,指针这两者是完全等价的概念,但是有微小的差别。地址的话是不能够修改的(比如说数组名就是违法的),而指针的话可以与--。 2. 以后一旦在代码里面看到字符char类型的,…

安全回顾总结

xss反射型漏洞复现 观察源码&#xff0c;可以看出源码中通过get传参到变量xss&#xff0c;并将一些特殊符号过滤了&#xff0c;则后续需要考虑该规则的绕过 echo “<img src”{$xss}">"; img标签 <img src“aaa” οnerrοr“alert(1)” 如果img图片不存在…

自然语言处理-01神经网络

数学和PY 向量是同时拥有大小和方向的量。向量可以表示为排成一排的数字集合&#xff0c;在 Python 实现中可以处理为一维数组。 向量和矩阵可以分别用一维数组和二维数组表示。另外&#xff0c;在矩阵中&#xff0c;将水平方向上的排列称为行&#xff08;row&#xff09;&…