ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

《红色警戒2·尤里复仇》-第三章 “打我唔死,吹我唔胀!!!”

2021-01-04 13:29:43  阅读:381  来源: 互联网

标签:尤里 第三章 对象 血量 无敌 秒杀 红色警戒 esi 指针


目录

 

第三章   无敌与秒杀( 传说中的  “打我唔死,吹我唔胀!!!”)

荒塘爽一爽:

思考:秒杀的原理是什么?怎么找?

逆向分析

①找血量

②找出是谁改写了这个地址

③修改

对象结构(重点)

①找对象结构地址

②打开CE的结构对比

③修改并测试

④寻找指向对象的指针

⑤获取指向该指针的指针

还原攻击代码结构


第三章   无敌与秒杀( 传说中的  “打我唔死,吹我唔胀!!!”)

荒塘爽一爽:

地址:0x5f5509  sub eax ,edx   改为  nop      //实现无敌,同理你知道秒杀了吧

 

思考:秒杀的原理是什么?怎么找?

原理:秒杀的原理其实就是我的伤害大于怪物的血量,攻击时直接将其血量<=0,又或者直接将对方血量改为小于等于0(提示:但是有时候小于0不一定成功)
要实现秒杀,就要找到血量或者攻击力。之所以把无敌与秒杀放一起,原因就是他们本身就是互斥的,实现无敌和实现秒杀几乎一样,无非就是让对方的血量归0
 


逆向分析

①找血量

红警有个命令(ctrl+攻击)为强制攻击,可以打自己军队,利用这点
搜索未知的初始值  -> 减少的值  ->减少的值 .........

②找出是谁改写了这个地址

发现 sub eax,edx

③修改

尝试nop掉 sub eax, edx 这段汇编,
发现真的都是“打我唔死,吹我唔胀”,大家都是无敌



emm................,哎!怎么办呢,这个.......

 

对象结构(重点)

来到重点了,每一个游戏角色都会有一个结构体,里面放有hp生命值、hpmax、mp、mpamx、act攻击、X坐标、Y坐标等属性值对吧,而红警里几乎所有对象都是同一个结构类基类继承而来,通过搜索和对比,我们就能发现很多秘密

而一般都是  [对象指针 + 偏移] 的形式来获取属性值

①找对象结构地址

在上面我们知道[esi+6c]是存放血量的,而这时候你不觉得esi+6c就是对象指针+偏移吗? 那下个断点不就得出了对象指针咯,走起



esi = dc90638 (美国大兵)

换个对象再来一次 ,得到   esi=0DC89900 (基地)

得到两个对象就可以进行结构体对比了

②打开CE的结构对比



观察+6c的地方,这个正是血量,修改能改变血量值
但是你会神奇发现,有两个,而且修改只有第一个有用,第二个没有效果,其实第二个是显示的血量

③修改并测试

往下走,主要看看不一样的地方,一个个测试看看有什么效果,你会惊讶得出各种结构属性的信息
+6c    //血量
+70    //显示血量
+9c    //X坐标
+a0    //Y坐标
+153   //三级,值大于40(传说中的三级,由于按照四字节列出的结构,有点难发现)
+21c   //所属方(这条数据,贯穿全文的重点,凭借这个,我们可以判断是否敌方我方)

④寻找指向对象的指针

为了方便以后直接得到对象的指针,必须找到一个地方专门存放对象的指针的(更加方便的是,鼠标点击谁,就能获得他的指针),
这个时候有个小技巧了,先用鼠标点击一个对象,然后用CE搜索 对象的指针,再点击另一个对象,再搜,直到搜到为止

⑤获取指向该指针的指针

然后我们再搜  这个指针的指针  

这招是不是绝了?

那么这时候我们可以确定了 [ [ A8ECBC ] ] 里面就是存放鼠标点击的对象指针
[ [ [ A8ECBC ] ]+21c ]  为 鼠标点击的对象的所属方  (注意用词)
那么,只要我们判断,[esi+21c]是不是我方即可对吧

思路是有了,可是这个所属方的值也是谁专门控制的呢?
行吧,接下来,同样的方法搜呗。

直接搜“我方所属”的值,得到一个绿色的A83D4C ,这个就是专门存放“我方军队”的值。




换句话说,如果玩团战斗可以借此判断是否友军敌军,这是一个大收获啊,前几章埋下的伏笔就可以填上了

那么,只要我们判断,[esi+21c]  是否等于  [A83D4C]  即可

当[esi+21c]  ==    [A83D4C]  说明是我军(被打的是我军),让伤害edx =0 (无敌)
当[esi+21c]  !=   [A83D4C]    说明是敌军 (被打的是敌军),让血量eax=0(秒杀)//这里有个细节需要注意,如果是敌人打敌人呢?

 



还原攻击代码结构

原来的情况:
鼠标命令对象A攻击 对象B
鼠标获取对象 A和 对象B
攻击函数(对象A ,对象B)

{

       if(对象B. 血量 != 0 ) {

              对象B .生命 = 对象B . 生命 – 对象A. 伤害 ;

       }

}

无敌或者秒杀的情况:

鼠标命令对象A攻击 对象B
鼠标获取对象 A和 对象B
攻击函数(对象A ,对象B)

{

       if(对象B. 血量 != 0 ) {

              if( 对象A == 我军 && 对象B == 敌军 ) //我军在攻击敌军

                     {  对象B .生命 = 0 ; //秒杀  }

                     else  if( 对象A == 敌军 && 对象B == 我军 ) //敌军在打我军

                                   {  对象B .生命 = 对象B . 生命 –  0 ;  //无敌 }

                                   else {  对象B .生命 = 对象B . 生命 – 对象A. 伤害 ; }

       }

}
 

 


(荒塘虾说:当敌人无敌时候,不要急,不要怕,重新加载游戏!)
小白虾问:吾之坚,物莫能陷也,吾之利,于物无不陷也,以,何如?
荒塘虾说:Emm......你得看判断!

 

标签:尤里,第三章,对象,血量,无敌,秒杀,红色警戒,esi,指针
来源: https://blog.csdn.net/weixin_41798850/article/details/112172594

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有