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

news/2024/5/18 15:39:15 标签: c语言, c++, 开发语言, 系统安全, 游戏程序

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

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.niftyadmin.cn/n/23739.html

相关文章

Kotlin 惰性集合操作-序列 Sequence

文章目录集合操作函数 和 序列序列中间和末端操作创建序列总结集合操作函数 和 序列 在了解 Kotlin 惰性集合之前,先看一下 Koltin 标注库中的一些集合操作函数。 定义一个数据模型 Person 和 Book 类: data class Person(val name: String, val age:…

python学习|第一天

文章目录1.输出函数print2.浮点数输出3.数据类型转换4.运算符优先级5.列表对象list1.输出函数print #输出数字,直接输出 print(2023) print(2023.1)#输出字符串,要加单引号或者双引号(实际效果都是一样的),输出后自动换行 print(hello 2023)…

Spring之ApplicationContext快速入门

目录 一:概述 二:代码演示 三:BeanFactory与ApplicationContext的关系 四:BeanFactory的继承体系 五:ApplicationContext的继承体系 一:概述 ApplicationContext称为Spring容器, 内部封装了…

Faster RCNN网络源码解读(Ⅺ) --- 预测结果后处理及预测过程(完结撒花)

目录 一、回顾以及本篇博客内容概述 二、代码解析 2.1 ROIHead类(承接上篇博客的2.1节) 2.1.1 初始化函数 __init__回顾 2.1.2 正向传播forward回顾及预测结果后处理 2.1.3 postprocess_detections 2.2 FasterRCNNBase类前向传播过程 2.3 Genera…

【MySQL进阶教程】 存储引擎详细介绍

前言 本文为 【MySQL进阶教程】 存储引擎 相关知识介绍,下边具体将对MySQL体系结构,存储引擎介绍,存储引擎特点(包含:InnoDB、MyISAM、Memory的特点及对比),存储引擎选择等进行详尽介绍~ &…

PS 矩形选区工具(1)基本用法 生成图层 选区方式演示讲解

我们先打开PS 然后打开一个项目 我们可以选择一个图层 然后 点击左上角 图像>调整>色相.饱和度 弹出操作框之后 我们拉动色相的色条 对应视图就会发生主体颜色的变化 然后 我们打开一个只有一个图层的图片项目 我们对这个图层操作 整个都会变化 但如果我只是想改其中…

Ubuntu 20.04 交叉编译opencv4.6.0

一、环境 sudo apt-get install build-essential sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjas…

Vue(五)

1. 绑定class和style样式 dom里自己拿到节点,改它上面的class样式 shift()移除第一个class属性 push想加哪个class属性都行 59行div知道自己只能用两个样式,四种情况 上面这种不合法,就算把样式加进div也得 样式对象:里面的key绿…