游戏基址查找思路

前言:这里选取植物大战僵尸作为案例,原因是这是一个典型的 3 级地址偏移的游戏案例,以下博文均以 3 级偏移为思考对象

思路

  1. 我们知道,用 CE 修改游戏数据的时候,我们 CE 获取到的当前某个数据的内存存储地址在我们重新打开游戏后就会失效。这里原因就是因为每次游戏重新开启后,数据在内存中存储的具体位置都发生了变化,故而我们无法使用某一次 CE 获取到的地址来重复修改游戏数据。
  2. 那么是不是说每次打开游戏后,游戏数据的存储位置的选择都是虚无缥缈的,无迹可寻的呢,每次都需要重新获取地址呢?并不是的这样的。当前内存地址变化的原因是由于计算机的本身存储的机制造成,并非开发者故意而为,这里是有规律可循的。
  3. 这里就要引入 基址 ,即一个数据无论游戏重启多少次,它在内存中的地址都是以基址为基础,加上偏移量最终计算处理的,因此,只要知道基址和偏移量,就能准确的找到游戏运行后某个数据的地址,并且只要基址不变,就一定生效。

正向思考

  1. 那么这里的算法是如何的?这里以单机游戏 " 植物大战僵尸 " 中太阳地址为例,我们先从正向的角度思考。
    1. 太阳基址指向二级基址地址
    2. 二级基址地址 + 二级偏移地址 = 三级基址地址
    3. 三级基址地址 + 三级偏移地址 = 当前内存太阳数据存放的地址
    4. 更改当前内存太阳数据存放的地址,就实现了对游戏中太阳数量的修改
  2. 图片示例
    游戏基址查找思路_第1张图片
    其中,17B3B430 确实是本次运行游戏中太阳数量存储的地址
    而且,第二行中 02569C98 + 768 是用 [ ] 括起来的,这意味着我们要取这地址中的值,也就是 17B35ED0

逆向思考

  1. 但是在 CE 的实际操作中,我们往往是逆向过来的,即我们会得到一个最终存储太阳数量的地址,比如上例中的:17B3B430,而我们的目标是找到 2A9F78。那么如何找呢?

  2. 我做了图片辅助理解这个过程
    游戏基址查找思路_第2张图片

  3. 以上图为例,我们解释逆向思路:

    1. 我们的目的是找到上图中的基址
    2. 现在我们通过 CE 知道了存储阳光数量的当前地址,也就是图中的 150
    3. 然后我们可以得到这个地址的偏移量 30 ,得到了 120 ,也就是我们的未偏移的三级基址
    4. 我们找到存储这个三级基址的地址,最终找到了 60,但是 60 仍然是二级地址偏移过后的地址
    5. 我们用 60 减去 10 就得到了未偏移前的二级基址 50
    6. 最终,我们找到存储这个二级基址的地址,即我们的基址,在 CE 中表现为这个地址的颜色是绿色的
  4. 以上,就是我们针对于 3 级基址的逆向查找的逻辑的思路

你可能感兴趣的:(逆向)