吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 20196|回复: 44
收起左侧

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

  [复制链接]
御坂00001号 发表于 2020-3-10 00:54
本帖最后由 御坂00001号 于 2020-3-10 00:54 编辑

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

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

   gaitubao_指针找法一1_jpg.jpg

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

   指针找法一2.PNG

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

   指针找法一3.PNG

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

   指针找法一4.PNG

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

   指针找法一5.PNG

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

   指针找法一6.PNG

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

   指针找法一7.PNG

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

   指针找法一8.PNG

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

   指针找法一9.PNG

  最后,调试完毕,可以看到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
   
   gaitubao_指针找法一10_jpg.jpg

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

   指针找法一11.PNG

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

   gaitubao_指针找法一12-前_jpg.jpg

   gaitubao_指针找法一12-后_jpg.jpg

最后总结
  魔兽争霸3分析过程,只讲解了一下思路,指针找的过程如开篇一致。当然找指针还有些额外的技巧,等有时间再补充
  扎实的理论基础+有质量的实践才能有更多的收获,读者可以找一些适当难度的游戏来实践一下,不要高估自己现在的能力,也不要低估,否则容易吃尽苦头,或者骄傲自大
  下一篇将讲 魔兽争霸3脚本分析,即实现许多超级功能,魔兽争霸3有一半以上是多数据共用代码,可以用来练习共用代码块分析,并不是简单的区分敌我,而还要区分自己的数据的!

免费评分

参与人数 12威望 +1 吾爱币 +31 热心值 +11 收起 理由
♂成成の + 1 + 1 大佬,下次研究一下修改攻击范围的教程呗
ddwwtom + 1 + 1 谢谢@Thanks! 期待魔兽争霸3脚本分析。
ashui2011222 + 1 + 1 兄弟能做一下1.32重置版的单机修改器吗?
gen + 1 + 1 用心讨论,共获提升!
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
柒汐 + 1 + 1 谢谢@Thanks!
sky天翔 + 1 + 1 谢谢@Thanks!
会吼的儒 + 1 + 1 谢谢@Thanks!
弗雷迪 + 1 + 1 热心回复!
wisoft + 1 谢谢@Thanks!
Dboykey + 1 + 1 用心讨论,共获提升!
bjxiaoyao + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 御坂00001号 发表于 2020-3-10 09:59
AIctiy 发表于 2020-3-10 09:37
这个方法不建议使用,魔兽几乎开源。jass的常规用法和规则知道以后,直接修改汇编代码比你这样在基础上修改 ...

多谢评价。你所说的jass、ydwe以及t,在此之前,我完全不知,因为我本身并不是war3地图制作者,勉强算一个war3爱好者,平常也只是玩玩推金矿模式/战役模式(对官方剧情或同人剧情感兴趣)。因为我现在爱好内存分析类的技术,所以只是拿一些游戏实践一下或模拟一下,来增加相关经验,实现外挂及反外挂的两面手
AIctiy 发表于 2020-3-10 14:01
御坂00001号 发表于 2020-3-10 09:59
多谢评价。你所说的jass、ydwe以及t,在此之前,我完全不知,因为我本身并不是war3地图制作者,勉强算一 ...

是的,你的方法和想法很好,但非常低效和落伍。外挂只需要达到自己想要的目标,而反外挂几乎不现实,相反可以从红警的联机开始着手,更快能够找到外挂的入口。
感谢你的经验与分享,希望你能够在war3上取得更大的突破。
关于war3补充,t的效率远远高于你自己一个个去摆放物品。
nj2004 发表于 2020-3-10 00:58
family0_0 发表于 2020-3-10 01:35
好东西 学习关注一下
从那以后的你 发表于 2020-3-10 02:04
有点迷糊~~求个金板砖,我~要加钱
lijinq 发表于 2020-3-10 02:15
学习了。。。很好。。。。。。。。。。。。。。
成国大吉大利 发表于 2020-3-10 03:52
一直都很喜欢 魔兽争霸 游戏。
尤其各种地图
longsui48 发表于 2020-3-10 04:12
厉害了 这篇看下来很多地方都明白了
dutyzqly 发表于 2020-3-10 07:41
需要的汇编太高深了,看着难受
bjxiaoyao 发表于 2020-3-10 07:45
学习了,太详细了,谢谢楼主分享教程
hyoulin68 发表于 2020-3-10 07:56
学习了。。。很好。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-23 22:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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