CheatMaker 论坛

注册

 

发新话题 回复该主题

[教程] ArtMoney - 指针与“自动应用偏移地址”(二) [复制链接]

1#
我看大家都听说过“动态内存分配(DMA)”这种东西了吧。要想使自己变厉害些,你就要先知道它是什么东西,还有怎么搞定它。接下来我要介绍DMA是怎么起作用的。我尽量不涉及技术细节。当然,DMA也是“直接内存存取(direct memory address)”的缩写,不过这可和我们要讨论的动态内存分配的游戏一点关系都没有。

在使用动态内存分配的游戏中,内存是动态分配的。也就是说,游戏拿到了一块内存以后,谁需要内存,就把这块内存分给谁。

一般电脑工作的时候同时工作的进程有很多,所以当再次进入游戏时,想要上次的那些值还在原来的地址上是不太可能的。这就是为什么你明明锁定了一些值,下次游戏时就不好使了的原因。当你重开游戏时,游戏重新申请了一块内存,这样你原来找到的地址就都没有用了。

要想搞定DMA,让你的修改100%有效,你需要走出新手的圈子,来到一个新的世界

以上文字版权所有 (C) 《高级游戏修改》 作者 [sheep] a.k.a 特此声明!

自动应用偏移地址如果你找到了一些地址,但有一天突然发现它们不再有效了,你可以用这个功能。你需要在左面的窗口中选一个新找到的地址,再在右面的窗口中选相应的旧地址,在菜单中选择“自动应用偏移地址”。 ArtMoney用下面的方法计算偏移量Δ

Δ = “新地址” - “旧地址”。

右边窗口中的每个地址都会加上这个偏移量Δ。当然,实际上你必须——不是可以——要一个能够实际使用的表格。

举个例子,从ArtMoney的网站上下载“Warcraft 3 (hero)”的表格。运行ArtMoney和魔兽争霸游戏。用Alt-Tab切换到ArtMoney。载入这个表格,你会看到:




看来地址不对。查找你的英雄的经验值(比如600)。在游戏里砍一个人,经验值升到650。再次查找。你就会很容易地得到一个地址021D071C。 用“将偏移量应用到所有数值”或“将偏移量应用到本组数值”——如果你设置了组的话。




现在你就可以看到




酷!能用了。 指针关于指针的查找只在有可执行文件的Win32游戏中有效。在DOS,模拟器,浏览器和Flash游戏中不能工作。

尽管每次重开游戏后地址都会改变,但游戏还需要知道现在这个值在哪里。游戏对此有一种特殊的指针,也就是指向这个值现在地址的指针。




指针的地址在重开游戏后不会改变。 如果你存在表格中的地址是一个指针,我们就可以顺着指针找到这个值的实际地址,甚至是游戏重开之后。 在把偏移量应用到所有或本组数值之后,选中经验值的地址,用“查找指向此地址的指针”。





哎呀,什么都没找到? 这是因为在这个游戏中,指针指向的是一个所谓“数据结构”,但是我们不知道这个结构数组是从哪里开始。再次选中经验值的地址,用“查找指向此段内的指针”。




我们就找到了所有指向段首到经验值所在地址这段区间的指针。一共有521个指针。选中经验值的地址,“暂存当前地址/指针”。清空右侧列表中的地址,把左面的所有地址加入右侧。在右面的列表中,“所有指针偏移到暂存地址”。现在,右边列表中的所有指针都已经指向021D071C。




重开游戏。在右面的列表中,用650“过滤地址”。如果过滤以后仍然有一个以上的结果,重开游戏,接着过滤(这叫“指针的再次查找”)。一直到右面的指针个数不再减少,选择右面表格中值是650的指针,“暂存当前地址/指针”。



载入“Warcraft 3 (hero)”的表格。选中经验值的地址,“将暂存指针应用到所有数值”。 酷,能用了!现在不管你怎么重开,这个表格都100%可以使用。



指针6F71C7B8包含地址01420088
地址01420088是我们的英雄的结构数组的地址。
地址01420088加上偏移1684等于0142071C这就是经验值的地址。
经验值在结构数组中的地址是1684,这个结构是指针6F71C7B8指向的。
于是,我们就有了下面这个表格:
指针 6F71C7B8 + 1684 / 经验
指针 6F71C7B8 + 1688 / 点数
指针 6F71C7B8 + 1692 / 能量
指针 6F71C7B8 + 1712 / 敏捷
指针 6F71C7B8 + 1712 / 生命
指针 6F71C7B8 + 1744 / 法力




有关指针的命令:

  • 1) 暂存当前地址/指针 - 把地址/指针/指针的偏移保存起来以备后用。
  • 2) 将当前指针应用到所有(本组)数值 - 选中一个指针(左面的),和相关的值(右边的),使用这个命令。右面选中的数值(旧地址)和左面的指针(新地址)将被用来计算偏移。右面列表窗口中的每一个地址都会在自己原来的地址上加上一个偏移量,这个偏移量就是刚才计算的指针和对应数值之间的偏移量。(并且右边表格中的每个地址都会被转化成这个指针加上偏移地址的形式)。
  • 3) 将暂存指针应用到所有(本组)数值 - 同上,区别是新的地址的偏移量是由当前地址(旧地址)和暂存指针(新地址)计算得来。暂存指针就是你用“暂存当前地址/指针”命令存起来的那个指针。新的地址会被转换成'基地址+偏移'的形式,这个基地址也就是你刚才最后一次用“暂存当前地址/指针”命令存起来的那个指针的基地址。偏移就是在原来的偏移的基础上加上暂存指针的偏移。
  • 4) 所有指针偏移到当前地址 - 所有右面表格中的指针都将被指向当前地址。这个命令只改变偏移,不改变基地址!
  • 5) 所有指针偏移到暂存地址 - 同上,区别是指针将会指向“暂存当前地址/指针”命令存起来的那个地址。
  • 6) 将指针转换成普通地址 - 这条命令与前面地址转换成指针的命令正好相反。这条命令只对所选择的数值行起作用。
另外,你也可以像查找其他任何一个值一样查找指针。你可以用查找无法确定的值的方法来查找指针。
1) 开始游戏。假设你找到了生命值的地址A1。查找“无法确定的数值”。
2) 重开游戏。找到生命值的地址A2。查找“比原来增加(A2-A1)”
3) 重开游戏。找到生命值的地址A3。查找“比原来增加(A3-A2)”
最终你将会找到指针的地址。
这时候,偏移量=生命值的地址(A3)-指针的值。
最后编辑dfzetcc 最后编辑于 2015-11-17 13:00:44
分享 转发
我来人间一趟 奔着自由与光
TOP
2#

抢到了,不好意思,呵呵
新人不懂,多多照看
TOP
发新话题 回复该主题