飞机大战游戏破解
第一步就是将飞机大战游戏的插件包从apk中释放出来。
我们可以采用反编译APK的方式反编译这个插件包。
修改smali代码之后,再打包回jar包文件。
飞机大战的游戏插件以jar包的形式,放在微信apk的assets/preload文件夹下:
解压之后,smali部分其实可以分为两个包.tencent.mm.plugin.shoot。
前面一个是libgdx导入的jar包,这个不是我们关心的内容。
我们的重点就.tencent.mm.plugin.shoot这个包中。
任务1、永久双子弹!
在玩飞机大战时,双子弹意味着更大的威力。
可以消灭更多的敌机,化险为夷。
然而在实际游戏中我们只有吃到PROPS_DOUBLE之后才能拥有一段有限时间的双子弹状态。
双子弹属性属于HERO的,对应的类是Player和PlayerActor。
Player继承自GameSprite,而PlayerActor则是libgdx中的actor类的概念。
两个前者注重状态和属性,后者注重逻辑和动作。
Player在构造函数初始化时就会设置子弹类型:
我们只需要把BulletType从NORMAL改为DOUBLE就可以了。
PlayerActor会对子弹类型进行定时地检测,检测是会将双子弹还原为单子弹。
应该是为了处理吃到PROPS_DOUBLE后,一段时间子弹还原的问题。
所以我们一并改掉:
OK,双子弹破解任务完成!
任务2、炸弹无限!
炸弹是个好东西,威力无穷。
关键时候全靠它清屏,消灭所有敌机!而且它还是刷分利器。
当然,只有在它变为无限的时候,我们才能用它来刷分。
这里我试图修改Player的getBombNumber和setBombNumber方法,发现均不行。
后来转变思路,只要在使用炸弹后炸弹数量不减少,就能实现无限炸弹的功能。
经过代码追踪,最后定位到一处混淆代码处。
将-0x1改为了0x0。
修改的结果,在吃到两个炸弹后使用炸弹不会减少炸弹数量。
吃一个炸弹时,使用炸弹后炸弹按钮消失,因此无法做到无限。
请记住一定要存到两个炸弹之后才能无限炸弹。
无限炸弹破解任务完成!
任务3、开启无敌模式!
长生不死一直是我们人类的终极梦想,在游戏中也不例外。
iphone版微信也是因为有了飞机大战无敌模式而被各大新闻站点竞相转载。
让我们Android版也无敌一下吧~
前面提到了GameSprite是所有角色的父类,在游戏用物理引擎做碰撞检测后,会调用GameSprite类的hit方法。
hit方法中将GameSprite的liftCount减一,如果减到0则将状态设置为DEAD。
GameSprite的状态有如下一些:
DEAD
EXPLODING
FLIGTHING
HITING
INVINCIBLE
在飞机正常的死亡过程中,是先HITING,再EXPLODING,再DEAD。
FLIGTHING我不清楚干嘛的,INVINCIBLE应该是无敌模式。
但是在我的破解里,并没有使用这个模式,而是强制在碰撞检测结果中,把它列在了生死薄之外。
至于INVINCIBLE的方式,大家可以试试能不能很好的维护这个状态。
具体来说就是hit方法不管GameSprite是hero也好,enemy也罢,均一视同仁,生命值减一,或者死掉。
然而我们可以通过修改smali代码,将hero列在生死薄之外:
其中goto_1标签跳转到return-void。
这样我们的hero将永远不会被hit,因此也就无敌啦!
任务4、独孤求败。
。
。
本以为完成任务3就大功告成了,谁知我们缺遇到了无敌的尴尬——死不了。
。
。
死不了,意味着永远无法结束游戏,永远不会有机会上传自己的得分进入排行榜。
哎,现在终于明白为什么独孤求败了。
。
。
基于此,我们得想个办法触发飞机非自然死亡。
想来想去,我还是觉得让飞机自己决定自己的生死最合理。
具体就是当飞机飞到屏幕最上方时触发死亡。
因为一般情况,我们不会把飞机飞到屏幕最上方,所以误操作概率极低。
通过前面我们知道hero飞机的类就是Player。
而Player中有一个函数更新飞机的坐标位置:updatePosition。
所以我们可以在这个函数中进行我们想要的操作:
其中0x64就是我指定的y坐标下限100。
当飞机坐标y在100以内时,我会把飞机的LiftCount设置为0,然后再将状态设置为EXPLODING。
飞机就会爆炸死亡了~
OK,任务完成,打完收工!
三、一些扫尾工作
插件包修改完成后,我们通过apktool,将其打包回jar包。
res资源包需要手动添加会jar包中。
然后按照第一节所说的,生成jar报的MD5码,重命名jar包。
微信APK也需要按第一节的方法,将插件的签名校验屏蔽掉。
编译出classes.dex,替换微信原始包中的classes.dex。
再将APK包中的飞机大战插件换为我们编译出来重命名的这个jar包。
OK,APK准备好了。
由于我利用的是《Bluebox Security最新提报Android漏洞的初步探讨》一文中所述的安全漏洞,所以安装此APK的过程并不是菜鸟能玩的。
。
。
简单来说,你需要root权限,并能将system分区mount为可写。
然后卸载你原本的微信。
将这个apk放到/system/app/文件夹下。
稍等片刻,你就是打飞机的高手了!
DogYun(中文名称狗云)新上了一批韩国自动化上架独立服务器,使用月减200元优惠码后仅需每月300元,双E5 CPU,SSD+NVMe高性能硬盘,支持安装Linux或者Windows操作系统,下单自动化上架。这是一家成立于2019年的国人主机商,提供VPS和独立服务器租用等产品,数据中心包括中国香港、美国洛杉矶、日本、韩国、德国、荷兰等。下面分享这款自动化上架韩国独立服务器的配置和优惠码信息。...
【双十二】兆赫云:全场vps季付六折优惠,低至50元/季,1H/1G/30M/20G数据盘/500G流量/洛杉矶联通9929商家简介:兆赫云是一家国人商家,成立2020年,主要业务是美西洛杉矶联通9929线路VPS,提供虚拟主机、VPS和独立服务器。VPS采用KVM虚拟架构,线路优质,延迟低,稳定性强。是不是觉得黑五折扣力度不够大?还在犹豫徘徊中?这次为了提前庆祝双十二,特价推出全场季付六折优惠。...
LightNode是一家位于香港的VPS服务商.提供基于KVM虚拟化技术的VPS.在提供全球常见节点的同时,还具备东南亚地区、中国香港等边缘节点.满足开发者建站,游戏应用,外贸电商等应用场景的需求。新用户注册充值就送,最高可获得20美元的奖励金!成为LightNode的注册用户后,还可以获得属于自己的邀请链接。通过你的邀请链接带来的注册用户,你将直接获得该用户的消费的10%返佣,永久有效!平台目前...