泽诺尼亚5吧 关注:23,741贴子:197,398
  • 13回复贴,共1

泽诺尼亚5游戏业务逻辑分析,辅助开发入门。申精……

只看楼主收藏回复

高大上的镇楼图


1楼2014-10-25 22:22回复
    安卓平台上的游戏辅助,到底是怎么做出来的呢?辅助能做到什么呢?
    我用八门神器、葫芦侠能做到辅助可以做到的事情吗?辅助能做到八门神器或葫芦侠可以实现的功能吗?
    带着这个疑问,石头人头石就在这里,分享一点干货,开一个安卓平台游戏辅助开发的知识讲座,在文章的最后,告诉大家答案。
    当然,本次讲座的部分技术原理也可以用在iOS、windows等所有的操作系统上,但因为不同的系统平台上,可能会有部分关键的技术节点不同,导致为不同平台开发辅助,存在或多或少的差异。
    今天第一课,我们用一款很火的游戏,《泽诺尼亚5》来做分析对象。为什么选择这个游戏呢?提前说一下游戏逆向的一个老话题,做游戏辅助,会碰到各种坑,让人抓狂的问题。但最幸福的就是,碰到一个无防御的游戏或应用。《泽诺尼亚5》就很符合辅助开发新手练习,无加密混淆,无外置脚本,无需脱壳,架构清晰,定义明确,代码逻辑条理分明,简直就是没穿衣服的*******(此处省略500字),对比的对象是刚上架安卓的《轩辕剑3天之痕》,十来年前的老游戏移植,用着老掉牙的SDL游戏引擎,十年前的程序架构,开发时完全没有面向对象的设计思维,导致各种函数接口一片混乱,我了个去,domo,你们的程序猿都是实习生吧……
    擦掉口水,抹掉汗水,让我们回到正题。
    百度下载《泽诺尼亚5》的apk安装包,让我们用winrar打开她,看看里面有什么……经过十秒钟的分析,我们就会发现,游戏主体,都在libgameDSO.so动态库中。石头人头石要在这再插句题外话,快速分析一个游戏是用什么方式编写开发出来的,游戏业务逻辑主体藏在哪里,是需要一定的熟练度的,只要有热情,去分析3、50个游戏,然后,对99%的游戏,谁都能做到秒杀。
    下面进入正题,如何逆向分析这个游戏的逻辑。
    运行我们的逆向神器IDAPro6.5(带HexRay插件会更方便一些,有不小的参考价值),载入libgameDSO.so,去喝杯咖啡,回来后,嗯IDA对泽诺尼亚5的so动态库的分析完成。


    2楼2014-10-26 15:56
    回复
      第一步,先让我们看看ida的exports表,啊哈,发现了什么?
      有海量的C++导出符号!没有lua,没有js、没有yoyo……啊,好幸福……
      看看这些C++的类名、函数名,都是什么!
      CMvBoss::DoAI(void), CMvBoss::GetSkillAction(int)……
      顾名思义,这些是操作处理游戏中Boss的属性和行为的各种函数,大约40种
      CMvCharacter::GetSPMax(void),CMvCharacter::GetSpeedBase(void)……
      这些是操作处理各种角色(玩家、NPC)的属性及行为等各种函数定义,大约200种
      CMvFairyObject::CheckLevelUp(unsigned int)……
      这些是处理操作小精灵的属性及行为的函数定义,大约30种
      CMvGameScript(游戏脚本)、CMvGameState(游戏状态)、CMvGameUI (游戏界面)、CMvItem(游戏中物品道具)……太多了,就不一一细说了。
      看到这里,只要你懂编程,就会明白,游戏中所有的“对象”(编程术语,面向对象Object Oriented,OO中的Object),都有很精致的封装,属性与行为都设定了极其清晰的定义。从这些导出函数的名称及逻辑中分析,我们知道,只要搞定这些函数,我们就可以实现自己梦想中的游戏。小到金钱、zen币、装备、大到敌人强度、人工智能,实现自己的mod,像GTA、上古卷轴一样,实现一个完全个性化的泽诺尼亚世界。
      石头人头石要在这里对GameEvil致敬,整个游戏全部用C++写成的,这就是良心厂家啊,纯C++的代码,在性能上比lua、C#之类的脚本游戏强多了。这需要一个有着资深的程序架构师领导下的实力派开发团队才能搞定啊。
      这里跑题一下,安卓平台上的3D游戏,凡是基于虚幻(Unreal)引擎开发的游戏,游戏逻辑都是C++的;而使用Unity3D引擎的游戏,游戏逻辑都是.net写的脚本。因为.net写脚本比C++简单了N个数量级,导致不管什么阿猫阿狗都来开发3D游戏,甚至用来开发2D游戏,然后又不懂优化,结果就是性能惨不忍睹。
      这里要强烈鄙视disney的《冰雪奇缘·冰纷乐》,游戏玩法山寨《糖果粉碎传奇》,游戏引擎用Unity3D,效果却是2D的。在石头人头石的挫逼联想手机上,糖果粉碎传奇一个场景加载2秒,这个游戏要加载5~10秒。这“神”一般的优化,除了竖中指,无言以对啊。
      看看现在的手机游戏界现状,石头人头石对是个阿猫阿狗,写个lua脚本,或者写个.net脚本,就能出、就敢出海外大作的山寨版,简直无力吐槽。
      空穴来风,必有其因,这些都是笔者石头人逆向分析、试玩过N多游戏后的感慨。你看人家《糖果粉碎传奇》,纯C++,天生丽质,从根基上保证了整个游戏高效率、高素质,而国内的一片山寨品,绝大多数都是用lua脚本快速堆砌出来的。《糖果粉碎传奇》和其它山寨作品装在同一部手机上,对比一下,你就知道什么叫天差地别了。
      跑题了,成了给《糖果粉碎传奇》做广告了(再插一句,要玩就玩GooglePlay原版,别玩腾讯代理的……),让我们回到正题,本期的研究对象:泽诺尼亚5.
      现在,让我们具体实战分析一下,如果我们要改游戏中的物品,要如何入手。
      通过Exports导出表的英文名称,我们可以迅速的发现,游戏中的道具物品,被封装为CMvItem类,我们通过IDA,快速的过一下CMvItem所有的定义,发现了一些关键函数:
      加载道具的所有属性:CMvItem::LoadTableInfo(short, int, bool)
      道具数量增加(道具全99就靠它了):CMvItem::IncCount(int)
      道具物品的攻击力总和(超级攻击力):CMvItem::GetAttackSum(void)
      获取道具耐久度(耐久999):CMvItem::GetBasicMaxDurability(void)
      获取道具装备位置(想全身佩剑不^_^):CMvItem::GetEquipPos(void)
      道具进化效果:CMvItem::GetEvolveEffectFromFormula(void)
      道具相关封装的函数太多了,就不一一列举了。从程序封装的这些函数名称来看,想实现超级装备,真是再简单不过了。
      但是,前途是光明的,路径是曲折的。


      3楼2014-10-26 15:56
      回复
        分析出来我们能改什么,只是简单的第一步,做辅助的第二步会难住99.99%的有志于辅助/mod开发的同好:如何改动态库中的函数或者调用动态库中函数。
        Cydia Substrate,可能很多手机辅助圈子里的人会立即想到它。
        嗯,这是一个逆向圈子里很大众化的东西,但对广大的,有志于辅助开发,对自己喜好的游戏二次开发的玩家来说,还是有些高不可攀。
        这里打个广告,安卓平台上新出的辅助新贵《GG助手》,封装了一整套的通用辅助开发SDK,笔者有幸拿到了这个内部测试版本,基于此SDK,两个小时内就完成了整个《泽诺尼亚5》的辅助开发。整个辅助开发完全就是标准android开发,你造吗,笔者基于GG助手团队内部流出的一些辅助Demo例程,整个泽诺尼亚5辅助的开发,笔者只写了不到五十行代码,大部分时间,都花在思考分析这个辅助到底要实现那些功能,那些功能可以让游戏更有乐趣,那些功能做了不如不做……
        笔者和GG助手团队的技术大拿聊天,知道GG助手团队因为SDK还有些不完善的地方,可能要到年底才能放出正式版。好东西要分享,既然GG助手团队没有说要保密,笔者就提前泄露一些消息。
        这里简单说明一下,笔者开发辅助的其中一个功能:技能无CD。
        笔者玩ARPG游戏,最喜欢像格斗游戏一样,各种必杀技狂轰滥炸,狂虐小怪。但游戏策划,总喜欢给技能加冷却时间,导致喜欢按格斗游戏风格来玩ARPG的笔者各种不爽。再跑题一句,什么时候,能在手机上复刻PS的tales系列、star ocean系列啊,我不要模拟器啊……
        话题拉回来,我的游戏我做主,技能搓出来,就要能发出来。我们看看,游戏技能的CD是怎么实现的。
        CMvPlayer::ResetSkillCoolTimeALL(void)
        这个函数好“酷”的名字,重置玩家所有技能的冷却时间……
        我只要借助GG助手辅助平台SDK,拿到这个函数的指针,随时都可以手动调用,把玩家此时的技能CD清空。
        如果我不想每次手动清空技能CD,而是让技能固定无CD呢?简单,让我们继续往下找
        CMvSkill::SetCoolTime(int)
        这是啥?设置技能的冷却时间!啊哈,技能无冷却,我来了。
        整个辅助的开发,笔者写的可能很简单,但石头人在这里严肃的告诉所有有志于辅助开发的新手,逆向有大坑,进洞需谨慎。


        4楼2014-10-26 15:58
        回复
          使用了GG助手提供的SDK后,你可以跳过辅助生效前,最麻烦的系统注入,游戏注入的实现,辅助开发中对游戏动态库函数注入与调用的实现,辅助界面与游戏界面对接的大坑,据说未来还会提供lua、.net等基于脚本的游戏的一些通用处理工具。
          使用了GG助手的SDK后,你可以忽略与游戏无关的所有技术坑,但Case By Case的分析每一个游戏,逆向你喜爱的游戏进行二次开发,仍旧是一个无底坑。
          做《泽诺尼亚5》、《糖果粉碎传奇》的辅助,你需要会C++,了解基本的AAPCS标准。
          做《保卫萝卜2》、《植物大战僵尸2》、《部落冲突》的辅助,你需要精通AAPCS,精通程序调试,还要有一定的运气。
          做《亡灵杀手夏侯惇》、《武士大战僵尸2》、《永恒战士3》、《崩坏学院》这类游戏的辅助,你要会.net语言相关知识。
          做《刀塔传奇》《时空猎人》的辅助,你要会lua
          更麻烦的还有,你想做腾讯的很多游戏,还要去学会脱壳……
          没有信心了?开心点,还有一些游戏,《小小指挥官1,2》《史诗塔防1,2》《雷电2014》这种游戏,你只要会java就好了,反射一下,世界就不一样了^_^
          回到开头的问题:八门神器、葫芦侠能做到辅助做到的事情吗?辅助能做到八门神器或葫芦侠可以实现的功能吗?
          答案就是:八门神器等内存搜索可以做到的,辅助都能做到,而辅助能做到的功能,八门、葫芦侠拍马也赶不上。
          八门神器的优点就是小白也会用;
          辅助开发的缺点就是只有有技术的真爱玩家才能做;
          八门神器的缺点就是对加密数据基本无能为力?对动态数据每次要搜(还记得保卫萝卜2每局都要搜一遍钱不?痛苦不?)
          辅助开发的优点就是,做一份辅助,永久受益,不用担心内存变动,而且所有普通玩家都能用。


          5楼2014-10-26 15:58
          回复
            大神话说有安卓的辅助吗? 纯手动 想开个大背包


            来自Android客户端6楼2014-10-27 18:44
            回复
              你说的太高端 我看不懂


              来自Android客户端7楼2014-10-27 18:44
              回复
                楼主万岁!!!!


                来自iPhone客户端8楼2014-10-28 14:25
                回复
                  表示大一刚开学,学的是里是网络技术,老师说会学到软件开发与应用。


                  来自iPhone客户端9楼2014-10-28 14:26
                  回复
                    楼主已然成为偶像。


                    来自iPhone客户端10楼2014-10-28 14:27
                    回复
                      看完本帖,我心中有一种敬佩的感觉。我已被触动!很想学辅助制作。
                      希望你把你说的那些制作游戏辅助的软件发给我,链接也行。
                      我是一名cocos开发学者,很希望想你讨教关于逻辑的分析!若是愿意的话加联系qq118077774


                      IP属地:上海来自手机贴吧11楼2015-01-08 00:48
                      回复
                        楼主,有ios版本没


                        IP属地:重庆来自iPhone客户端13楼2016-07-23 07:32
                        回复
                          好厉害!
                          看不懂


                          IP属地:重庆来自Android客户端15楼2018-05-01 10:16
                          回复
                            所以有什么用?一个过世的游戏,不就是毁在了你们这些所谓的高大上的辅助行业手机?


                            IP属地:广东来自Android客户端16楼2018-05-01 10:58
                            回复