基本概念

什么是PE文件

  1. PE文件的全程:Portable Executable,即可移植的可执行文件
  2. 常见的PE文件:EXE文件、DLL文件、OCX文件、SYS文件、COM文件
  3. PE文件通常是指32位的,而64位的PE文件通常称为PE32+、PE+、PE64

文件偏移地址、虚拟地址与相对虚拟地址

  1. 文件偏移地址:PE文件存储在磁盘中时,某个数据的位置相对于文件头部的偏移量,通常将其称为文件偏移地址(File Offset Address)或物理地址(RAW Offset)
  2. 虚拟地址:在Windows系统中,PE文件会被系统加载器映射到内存中,而每个PE文件都有其自己的独立的虚拟空间,这个虚拟空间的内存地址就被称为虚拟地址(Virtual Address)
  3. 相对虚拟地址:当PE文件映射到内存之后,某个数据相对于文件载入点地址(即基地址,ImageBase)的偏移量,通常称其为相对虚拟地址(Relative Virtual Address),虚拟地址与相对虚拟地址存在如下关系:虚拟地址(VA) = 基地址(ImageBase) + 相对虚拟地址(RVA)
阅读全文 »

上一章我们实现了植物无CD的功能,主要使通过定位CDTimers间接定位到了if判断的位置,并通过使用nop填充jle指令,改变了程序的执行流程,使其总是运行植物不处于CD状态中的代码

现在我们希望实现另一个功能,即在同一个位置能够重复的放置植物

同一格重复放置植物

思路

  1. 思路一:我们假设放置植物是通过一个二维数组记录的,当二维数组中记录如-1之类的值时,代表位置空闲,可以放置植物,当数组中记录植物编号时,代表位置被占用,不可放置,该思路需要我们能定位到该二维数组,在放置植物时保证二维数组中的值不变,使该位置为空位置

  2. 思路二:在我们放置植物时,我们需要一个if判断,用于判断该位置是否可放植物,若可放置,则阳光会减少放置植物所需的cost,即该思路需要我们定位一个cmp指令,即

阅读全文 »

回顾一下上一章实现无限阳光的方法,我们首先猜想有一个变量存储了当前阳光的值,即在内存中有一块空间存储了阳光的值,只需要找到该空间,再将期望的阳光数写入该空间即可实现无限阳光的功能,通过CE多次搜索阳光,我们最终通过基址 + 2次间址的形式定位到了阳光的具体地址

取消植物放置CD

思路

现在我们实现取消植物放置CD的功能,可以猜想有一个变量存放了某个植物的放置CD,而另一个变量存放了CD计时器,然后通过一个函数判断,当CD计时器从0开始增长到大于等于CD时CD计时器从CD值开始减少到0时,可以再次放置植物,即

阅读全文 »

植物大战僵尸是一款很适合逆向入门的游戏,而设计的辅助主要实现了下面几个功能:
1. 无限阳光和无限金币
2. 取消植物放置的CD
3. 同一个位置可以重复放置植物

无限阳光

静态基址与动态地址

  1. 静态基址:是指静态基址中的内容,不会因程序的重新启动而改变,只有在程序重新编译后才会变动

  2. 动态地址:是指地址中的内容,会因程序的重新启动而变动的地址,也就是说,当前状态下,地址中保存的信息是我们所需的信息,但程序重新启动后,该地址中的内容就不再是我们所需的信息了

阅读全文 »
0%