本帖最后由 肥蛋仔 于 2021-9-13 10:46 编辑
重装机犬是一款Roguelite动作冒险游戏,本作是重装机兵MAX的衍生外传,这是这次玩家将会扮演狗狗在末日荒野上作战。战斗和探索主要采用的是富士佳ode形式,玩家可以操控的狗狗也非常多,能采用的武器也很丰富,你能在这个即时制战斗、且关卡比较随机的MM衍生作中得到足够多的乐趣。
一只衰老的战犬碰到了一位神秘的老科学家。
故事发生在富士山脚下支离破碎的世界中,猎杀系列中熟悉的怪物!在系列30周年纪念新作中,您玩家将可以享受独特的世界观以及与该系列正传不同的简单操作。 《重装机兵》系列:背景设定在后启示录世界时代,玩家可以乘坐属于文明遗迹的“坦克”,在不同的地方追捕被通缉的怪物(获得悬赏),并使用奖励来改装自己的坦克。 这款Roguelike动作游戏是最新主机游戏《重装机兵Xeno:重生》的续作,它讲述了战斗犬Pochi的故事。
作为忠实的重装系列粉,终于终于等到了波奇当主角.......鉴于时间关系,我也微微修改了一下,速通了游戏,下面就重装机犬分享一下逆向过程
首先,你需要懂得一些知识点:
Unity是一个非常受小型独立游戏欢迎的游戏引擎,但是也有很多大型游戏在使用它。它是跨平台的,游戏可以针对PC (Windows、OSX、Linux)、移动(安卓/iOS)发布,甚至可以通过WebGL针对浏览器发布。它是免费的,使游戏开发非常容易,并使用C#或Javascript脚本引擎
当入侵一个普通的本地游戏时,你通常可以找到指针和偏移量并轻松使用它们。内存映射和可执行文件加载到内存的方式是可预测的,每次都遵循相同的模式,这就是PE文件格式和Windows加载程序的工作方式。但是攻击Unity游戏是不同的,因为像Unity这样的游戏引擎是大型基础设施,它们加载并运行实际游戏的开发者创建的游戏逻辑。他们有自己加载动态代码和数据的方法。游戏引擎增加了另一层抽象,并且经常利用大量的继承、重载和多态性,这使得反转它们和编写Unity黑客更加困难。
你会注意到的第一件事是,当你攻击Unity游戏时,你很难找到在重启游戏后有效的指针。因此,模式扫描和挂钩通常更容易。我不建议在编写Unity hacks时试图去追求多级指针。
第二件事你会看到的是,统一游戏的代码位于一个Assembly-CSharp.dll模块,而不是在主EXE。这样做的好处是,您可以轻松地使用dnSpy这是一个. NET反编译器/调试器。
静态分析
您可以使用. NET反编译程序静态分析游戏代码。你会看到结构和功能。请记住,所有的游戏引擎代码都不会在那里,这只是游戏逻辑。并非游戏使用的所有功能和结构都在Assembly-CSharp.dll。有时它会包含所有结构、变量和函数的名称。其他时候,开发者会把这些去掉或者混淆。即使去掉名字,也很容易逆向工程这样的功能。一些拆装器,如IDA,也可以让你反转。NET字节码,尽管这不会直接与内存中的游戏匹配,因为它将被及时(JIT)组装成x86代码,并且每次都会出现在内存中的不同位置。
总结一下,就是:
1.Unity游戏启动遵循的是设计者的逻辑,整体不会有太大的变动但是细节会有许多不同。(100个游戏100个逆向方法?)
2.Unity游戏每次进入游戏,进入关卡等都会从新定义血量,坐标等结构,所以,所以,所以,尽可能的不要去用指针扫描或者一层层的找多级指针,因为基本都不能用(重点)
3.逆向源码永远是最快捷的方式。
进入游戏,游戏是2.5D的,自带范围瞄准,大小地图,并未加相关验证,为了保证游戏的可玩性,我们从角色属性,武器属性,技能,金钱等方面入手
选择出击,进入教学关卡,装备生锈的机枪,波奇有三个武器槽位,根据引擎结构,会有一个武器数组进行管理,我们从最简单的子弹数量入手,搜整数型,几颗子弹就搜几
我的调试环境为WIN7,WIN10环境下数据会有不同
如图,F5访问下断,跳到地址右键 访问了什么地址,得到枪械子弹数组
然后Ctrl+D内存分析 7DEB0730
两者进行对比得到
未完
|