宝峰科技

 找回密码
 注册

QQ登录

只需一步,快速开始

宝峰科技 门户 调试工具 Cheat Engine 查看内容
宝塔服务器面板

Cheat Engine 动态地址变成静态,用Trainer maker做成修改器

2010-11-17 12:10| 发布者: admin| 查看: 13471| 评论: 0

摘要: 首先说明下,虽然我明白这个过程,但我的语言表达能力不是很强,可能会有让你不明白的地方,可以留言共同探讨。 这种修改过程等同于将动态内存地址变为静态地址差不多一个道理。 CE中的 Trainer maker 能够很简单的 ...
       首先说明下,虽然我明白这个过程,但我的语言表达能力不是很强,可能会有让你不明白的地方,可以留言共同探讨。

        这种修改过程等同于将动态内存地址变为静态地址差不多一个道理。

       CE中的 Trainer maker 能够很简单的做出修改器,但对代码的修改支持不是很好,只能使用nop代码修改。这里就是向你讲述下怎么做出具有代码修改的修改器。

        在CE中,有些游戏的指针是很难找,但我们找到第一个指针一般都很容易,找到第一个指针地址后,通过代码分析来对原代码进行修改来达到我们的目的。
    代码修改需要一点汇编知识,这里主要讲下修改中会遇到的主要问题。

        第一步:找到游戏空闲的内存空间。(这步非常重要)
        这是个关键的问题,虽然CE有分配内存空间的功能,但我们这里要做的是应用在修改器,而不是单机自己用。这样我们就得放弃他提供的功能,而要手动查找游戏的空闲可读写的内存空间。

    载入游戏后,进入CE主界面。

    点击“Memory view”-> “View”->“Memory Regions”

    在弹出的窗口里我们要注意观察的有三点

    1、Allocation Protect 项必须为 “Read+Write”
    2、Protect 项必须为 “Read+Write”
    3、在满足以上两条前提下,双击选中要察看的地址,CE会打开该地址的内存窗口,观察16进制内存窗口内的数值。例如我们选中的是“00124000”这段地址,双击后在内存窗口我们看到从00124000地址开始后面很多都是零,而在00124000之前的地址则是问号。在这里我极力建议找寻类似象00124000这样内存地址,因为它开头就是零并且前面的地址也是不可读写状态,这样的内存地址不会出现与游戏程序冲突的事情,也不会因内存控制出现错乱的情况。因为这步比较关键所以在这里多讲几句。如果实在找不到如 00124000 这样的内存空间时,可以用 图2 “00140000”样的也可以,不过要注意,取首地址时,应该离数据区远些,可以考虑这段内存的尾部,象图2这样首地址就要选在“001400e0”处,尽量离数据区远些。但尽管这样有的游戏退出时会因内存保护情况出现错误提示,虽然不影响游戏和修改功能,但看着会很不舒服,如果你在退出游戏前还原所修改的代码会避免出现错误提示,但这样会增加我们代码的输入量,到制成修改器时会很麻烦,给使用的玩家也造成不便。所以尽量找象00124000这样的空闲内存空间。

                   (图1)点击看大图

            (图2)点击看大图

    第二步:移植和修改代码

     这里我用一个游戏的例子来说明,不然光说很容易乱。先看代码,为方便说明我用数字代替。

原代码
--------------------------
(1)004307EE          8b 4e 54           -mov ecx,[esi+54]
(2)004307Ef            89 06                -mov [esi],eax   /此处就是我们要修改的地址
(3)004307F3                                   -call 00406fc0

--------------------------

1-3是游戏的原代码,其是2是我们要修改的地方,把eax换成数值,因为数值要占用四个字节,2处只有两个字节,1处正好有三个字节,我们的一个跳转刚好是五个字节,所以就在1处[004307EE]双击输入“jmp 00124000”,其中00124000就是我们先前找好的空闲内存的地址。点确定后因为要覆盖掉原来的代码,所以CE会问询问你,点两个同意就可以了。完成后1和3两行代码会变成4的样子。刚好占用了5个字节,而没伤到3。 其实也无所谓,我们这样做只是减少代码的输入量,到后来弄修改器时你就知道了。

修改后代码
--------------------------
(4)004307EE           e9 0d 38 cf ff       -jmp 00124000
          004307F3                                        -call 00406fc0
--------------------------


因为我们破坏了1和2两处的代码,而我们要修改的代码只有2,所以到空闲的这段内存地址时,先恢复1的代码,原来的1现在在这里是5.然后对原来的2进行修改成我们想要的代码,修改后就是6.把eax变成了1388[等于十进制的5000],原来的“mov”也变成了“add”。完成对我们想要的修改结果后,到7让程序跳回到3[004307F3]处继续。

添加的代码
--------------------------
(5)00124000             8b 4e 54                             -mov ecx,[esi+54]
(6)00124003             81 06 88 13 00 00              -add [esi],00001388
(7)00124009             e9 e5 c7 30 00                  -jmp 004307F3
--------------------------

        此步的主意就是:破坏原程序的内存代码并在破坏处改成一个跳转语句,跳到先前找到的空闲内存处。

        跳到空闲内存处后,恢复被破坏的那部分代码并加入修改后的代码,最后再跳回原程序没被破坏的代码处(就是跳到上面所讲的未被破坏的 3 处)让程序继续执行。

        用数字代码说明就是:破坏原程序1和2两处代码,之后再被破坏的1 和2的地址上写上如 4 样的跳转代码。之后在空闲内存处,5是恢复了被破坏的1处代码,6则是我们对2处修改整理后的代码,7跳回未被破坏的原程序3处继续程序运行。这个过程就完成了对动态的内存地址变为静态的内存地址,因为我们需要修改的值已经放在了不变的地方。

        因为有人问了所以就又加入了这些话,我的表达能力确实不太好,希望能让你明白。

        如果你对这个过程还有混乱的话,就直接看看CE的自动代码注入的功能吧,参看CE教学的第七步“代码注入”,一样的道理和过程,这里只是用动来完成这个过程。


    第三步:修改器地址修改值的确定。


       当你完成第二步的时候,进入游戏测试没问题后,就可以准备修改器的工作了。首先修改过的地址全部添加到CE的地址编辑栏里
       在做修改器的时候记得要“先”写空闲内存的代码,“后”写修改原代码处的代码,这样做的目的是防止程序正好执到此处而空闲内存的代码还没写好,就会出错。
       看图只有数值5000的地方用了四字节,不用讲大家就明白了,此处还可以让修改器生成时做成可由玩家自行修改的作用。

     地址有了,值也有了,将下面内容应用到KTM里也就简单了。记得下面地址的值是十进制。

                                               (图3)


鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

相关分类

免责声明

本站中所有被研究的素材与信息全部来源于互联网,版权争议与本站无关。本站所发布的任何软件编程开发或软件的逆向分析文章、逆向分析视频、补丁、注册机和注册信息,仅限用于学习和研究软件安全的目的。全体用户必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。学习编程开发技术或逆向分析技术是为了更好的完善软件可能存在的不安全因素,提升软件安全意识。所以您如果喜欢某程序,请购买注册正版软件,获得正版优质服务!不得将上述内容私自传播、销售或者用于商业用途!否则,一切后果请用户自负!

QQ|Archiver|手机版|小黑屋|联系我们|宝峰科技 ( 滇公网安备 53050202000040号 | 滇ICP备09007156号-2 )

Copyright © 2001-2023 Discuz! Team. GMT+8, 2024-12-21 21:58 , File On Powered by Discuz! X3.49

返回顶部