12558网页游戏私服论坛

 找回密码
 立即注册
游戏开服表 申请开服
游戏名称 游戏描述 开服状态 游戏福利 运营商 游戏链接
攻城掠地-仿官 全新玩法,觉醒武将,觉醒技能 每周新区 经典复古版本,长久稳定 进入游戏
巅峰新版攻 攻城掠地公益服 攻城掠地SF 新兵种、新武将(兵种) 进入游戏
攻城掠地公 散人玩家的天堂 新开 进入游戏
改版攻城掠 上线即可国战PK 稳定新区 全新改版,功能强大 进入游戏
少年江山 高福利高爆率 刚开一秒 江湖水落潜蛟龙 进入游戏
太古封魔录 开服送10亿钻石 福利多多 不用充钱也可升级 进入游戏
神魔之道 签到送元宝 稳定开新区 送豪华签到奖励 进入游戏
神奇三国 统帅三军,招揽名将 免费玩新区 激情国战,征战四方 进入游戏
龙符 三日豪礼领到爽 天天开新区 助你征战无双 进入游戏
王者之师 免费领豪华奖励 免费玩新区 6元送6888元宝 进入游戏
查看: 639|回复: 0

[原创] CE基础-自动汇编:魔兽争霸3之指针修改篇

[复制链接]

505

主题

505

帖子

1020

积分

实习版主

Rank: 7Rank: 7Rank: 7

积分
1020
发表于 2020-3-23 10:12:14 | 显示全部楼层 |阅读模式
应大家的回复,开篇,我们先来说一下一种找指针的方法,我把它称为“向上跟踪法”(其他相关视频也可能讲过,但多数可能只是一些略过)。顾名思义,需要不断向上查看汇编代码,看关键寄存器数据和堆栈数据的变化。这里我们以魔兽争霸3中的装备栏第一件物品的数量来说明其过程,最后做一个精简的小总结来说明它的实质。小提示:这种指针找法最基础成功几率也很高,但相对来说需要对汇编有较扎实的功底,从而不会晕头转向。

指针找法:向上跟踪法
  首先,找到它的动态数据值,并修改它的数量,如图1

  

  接着,右键查看谁写入了它,如图2

  

  接着,往上找,看谁给esi传输数据,这里是ecx,所以我们需要继续找ecx。当然也可能ecx与esi值一样,就另说,这里我们找ecx。往上查找,到顶点(这里顶点只指int3标识,另外的情况是:可能现在我们在找的这段代码只是一段过程而非一个函数,即int3并不代表往上查找的顶点,我们可能还需要继续往上查找,这里一般指过程间的跳转je/jmp/js等。如何辨识是一个函数还是一个过程呢,其实很简单,我给出一个简单方法:就是单步调试从本函数返回,然后查看这个CALL后面的地址是否是我们先前找到顶点的开始,若不是,则说明是一个过程,反之亦然),如图3

  

  接着,我们可以看到esp+8传送数据给了ecx,相当于倒数第二个参数(这里倒数还是顺数得看语言特征或编译器决定)。然后我们需要跟进上面的CALL,如图4
  这里普及一下CE断点管理,类似OD的b栏,我们可以在这里删除多余的断点,唯一不足的是(或许说这个是鸡肋也不为过),不能禁止,只能删除

  

  接着,我们首先分析一下这个参数CALL(我暂时把它这样称呼,原因是因为它只是在使用参数存值,而不传送关键数据),如图5

  

  这里,可以小作分析,可以看到push了6个数,pop了7个数(eip总会自动压栈和弹出,所以不计算),很容易得到此函数必有1个参数(此参数在CALL外面push的)。单步调试,会发现里面存在一个CALL,先push了eax,格式和我们现在正在单步调试的CALL几乎一致,但这里不需要分析,因为参数CALL的使命就是对参数进行存取,修改它的情况很少见。当然,不放心的话,这里有一个技巧:我们在CALL上下处分别下一个断点,查看关键数据(这里关键数据指esp+8处,注意这里esp是从这函数返回后的esp,而不是现在的esp,因为它后面还将被修改。所以我们需要时刻注意栈的数据变化)是否被修改。如果上下处关键数据不一致,就需要跟进查看是谁改变了它,否则继续往上查找,如图6

  

  接着,这里可以看到eax正好是一级指针(这里说一级是相对C/C++级数指针的相反说法,因为暂时无法确定到底会有几次传输,所以按C/C++习惯就麻烦了)。然后我们首先往上查看有没有改变eax的汇编代码,这里如1处。我们运用小技巧在两处下断,可以知道eax前后不一致,说明CALL改变了它的值,因此,我们需要跟进CALL,如图7

  

  接着,我们一下可以看到 mov eax, [eax+54] 这段代码,这里再讲一个小技巧:如果遇到一段小代码,我们可以直接从下往上看,这样可以节省时间,否则从上一步一步调试。当然从上往下一步一步调试更安全,因为代码会跳来跳去,我们不能保证我们从下往上看到的都会经过,所以一般都会直接在CALL头部下一个断点,方便调试。这里 eax+54传送数据给了eax,所以我们继续找eax。如图在1、2处各下一断点,发现eax值改变了,所以继续跟进CALL,如图8

  

  接着,我们单步调试,来到函数尾,发现eax被ecx改变,而ecx又被eax+ecx*8+4改变(这里又普及一下小知识:一般来说,我们要找的关键数据,就是[xxx+x*4+x]里的xxx,而无[]的普通传输,比如mov eax,ecx只表示暂存或者add、and的改变几乎不用管)。然后eax又被esi+0c改变,我们继续往上找esi,如图9

  

  最后,调试完毕,可以看到mov esi,Game.dll+xxx,这种就代表寻找结束或成功,Game.dll+xxx就是基址!

指针找法-向上跟踪法 小总结
  实质:我们找基址的过程,其实就类似C/C++的指针。我们最后找到的基址,并填写偏移到CE或写到易语言内,都类似这种格式[[[Game.dll+ACE5E0+C]+F9F*8+4]+54]+84。其实就是:Game.dll+ACE5E0+C处的值是一级指针,而一级指针+F9F*8+4处的值是二级指针,二级指针+54处的值是三级指针,三级指针+84处的值就是数据
  知识点总结
    1. CALL的开头:一般来说,int3指令下一条有效指令就是某CALL开头。但被int3标识为顶点的不一定是CALL,也有可能是一个过程,被跳指令跳转过来的过程。这里可以可以简单的返回到CALL处,看CALL后面的偏移是否是先前暂时认为的开头。若不是则需要继续进CALL向上找跳转进行分析,这里有短跳转,也有长跳转,短跳转CE或OD很容易标记清楚,长跳转从下往上看是看不到的,需要仔细往上找跳转偏移是否与开头偏移一致
    2. 参数CALL:一般来说,参数CALL只进行存取参数,而不修改参数,所以可以不要分析,直接分析CALL前的参数,没有就往上。如果担心,就跟进分析。
    3. 快速分析CALL:其一是在CALL上下处下断点,看关键数据是否改变,若不改变则不用分析,否则跟进;其二是对于短代码断,可以采取从下往上看而不调试,长代码视情况而定,熟练了,长代码也可以先从下往上看
    4. 关键数据:一般来说,关键数据只指[xxx+xx*4+x]中的xxx,而无[]的数据改变,只认为是暂存数据,但也要注释一下


下面,我们开始正式分析魔兽争霸3的指针修改分析(授人以鱼不如授人以渔)
指针修改分析
  当你研究怎么修改这个2002~2003发行的经典游戏时,你会发现普通的指针修改,只要重新启动游戏或者更换地图,指针就???了。这是因为它的程序逻辑所决定的!游戏并不会为每个中文名(汉化版,英文版也一样)绑定一个指针,而是为它的每一个英文缩写名绑定一个指针,然后再批量复制。比如圣骑士的标识为lapH,大法师的标识为gmaH,山丘的标识为gkmH等等。但有多少个英雄或人物,还是需要那么多份动态数据块的。因此,我们换一个思路,不再找单个英雄的对应指针,而应该假设它存在一个共用指针(比如,我点击某人或某建筑,它会得到一个数据,然后一组数据)。步骤如下:
  1. 先用worldeditor新建一个地图,最好有加力量/敏捷度/智力/护甲/攻击力/攻速等道具,然后建一圈炮楼,防止干扰,如图10
   
  

  2. 先假设:我点击一个英雄是一个值,点击另一个英雄是另一个值,这里像地址值
    技巧:英雄存在某种序号,因此大魔法师的地址比圣骑士的大。所以可以增加减少,而不是查找变化的值
  
  3. 最后可以寻找到指针如下,如图11

  

  实际效果,如下
  点击山区之王时-上,点击大法师时-下,如图13-14

  

  

最后总结
  魔兽争霸3分析过程,只讲解了一下思路,指针找的过程如开篇一致。当然找指针还有些额外的技巧,等有时间再补充
  扎实的理论基础+有质量的实践才能有更多的收获,读者可以找一些适当难度的游戏来实践一下,不要高估自己现在的能力,也不要低估,否则容易吃尽苦头,或者骄傲自大
  下一篇将讲 魔兽争霸3脚本分析,即实现许多超级功能,魔兽争霸3有一半以上是多数据共用代码,可以用来练习共用代码块分析,并不是简单的区分敌我,而还要区分自己的数据的!
来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
楼主热帖
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|12558网页游戏私服论坛 |网站地图

GMT+8, 2024-3-29 20:34 , Processed in 0.156250 second(s), 31 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表