Arcadium游戏修改

最近手机上装了一个竖版打飞机的游戏,叫Arcadium – Space Shooter,apk的包名为:com.ihgyug.arcadium

游戏里通过收集Gems或直接花钱购买可以换购很多不同型号的飞机,每个飞机的属性有十几种。在设置界面发现有个gift code的选项,也就是输入优惠码可以直接获取Gems。最初的想法是分析下游戏代码,把优惠码都找出来。

用jadx载入apk后发现java代码并没有包含游戏逻辑,原来游戏是采用unity引擎开发的,也就说代码逻辑都是通过.net实现并打包到了libil2cpp.so,字节码的元数据包含在global-metadata.dat文件中。Il2CppInspector可以用来处理这两个文件生成IDA Pro可以识别的符号,导入后就能研究游戏的具体实现了。

看来看去,发现优惠码其实在游戏资源文件level0当中,每个优惠码的格式如下:

08 00 00 00 41 72 63 61 64 69 75 6D

11 00 00 00 48 61 76 65 20 61 20 6E 69 63 65 20 67 61 6D 65 21 00 00 00

F4 01 00 00

字串开头是长度,字符串要四字节对齐,最后一个字段0x1F4意思是优惠码会赠送250枚Gems。针对目前最新版本的游戏(1.0.66)提取出来所有的优惠码如下:

  1. Arcadium: 500
  2. SantaGift: 250
  3. HalloweenGift: 250
  4. NewYearGift: 250
  5. Cheater: 1
  6. Downloadx500: 250
  7. SummerGift: 250
  8. FullRelease: 250
  9. Downloadx1000: 250
  10. Downloadx5000: 250
  11. Downloadx10000: 250
  12. AutumnGift: 250
  13. WinterGift: 250
  14. Downloadx50000: 250
  15. Downloadx100000: 500
  16. SpringGift: 250

为了多搞点Gems,我索性直接把level0文件里Cheater对应的数值改成了99999999,这样进入游戏输入优惠码就拿到了用不完的Gems。

Uranus是我最喜欢的战斗机,也是Gems可以买到的最贵的型号。为了让游戏再省事一点,我又找到了Uranus对应的资源文件,把飞机的属性加强了一下。

飞机的属性文件为sharedassets0.assets.split15,飞机的属性值格式如下:

06 00 00 00|55 72 61 6E|75 73 00 00

05 00 00 00|00 00 80 40|00 00 80 40|00 00 80 3F

00 00 00 00|14 00 00 00|00 00 20 41|00 00 20 41

00 00 80 3F|00 00 00 40|CD CC CC 3D|00 00 00 00

00 00 00 00|00 00 00 00|00 00 00 00|01 00 00 00

00 00 00 00|10 00 00 00|00 00 C8 42|00 00 00 00

00 00 00 00|00 00 00 00|00 00 80 3F|00 00 00 00

最开始是飞机名称,接下来每个属性是4字节,有的是INT,有的是FLOAT。

我识别出来的属性有maxhp, damage, energygain, attackspeed, pickrange, droprate, glowyenemychance, bonusduration, debufduration, eneryleech, lifeleech, critchance.

这里我把maxhp, damage, bonusduration和debufduration稍微修改了一下。

最后再把修改好的level0和sharedassets0.assets.split15重新塞回apk里。重新签名安装到手机上,就可以进入游戏完虐NPC了。整个修改过程仅仅是改了两个资源文件,不碰代码就省去了繁琐的指令patch,改得很惬意。