波可龙迷宫是一款日本的策略游戏,已经开服8年了,一款手游能活那么久实属少见,既然能存活那么久就有它热门的道理,如果没人玩早就倒闭了。软件下载地址:日服波可龙迷宫
------分割线------
人気急上昇中のなぞるパズルのRPGが満を持して登場!
スマホ·タブレットのために生み出されたパズルRPGを体感しよう!
ドラゴンなどのモンスターたち、仕掛け満載の多彩なダンジョン、カンタン操作で爽快バトル!
「ポコロンダンジョンズ(ポコダン)」はダウンロード無料でお楽しみいただけるパズルRPGです。
准备工具:
IDA32
软件基于当前最新版9.3.0,理论上即使版本更新也不会有太大的改变。这个教程其实很早的时候就想发了,只是有个修改方案会引起闪退问题,一直懒得找原因,所以就没发出来。最近应群里要求才修复了闪退bug,所以就发一下这个教程。
主要介绍如何秒过楼层,秒杀之类就不介绍了,容易被查封。
打开压缩包,查看lib内容,就2个so,修改目标就是libcocos2dcpp,ida加载它,加载完毕后打开输出表,修改方法比较简单,直接搜索一些关键字就可以了,比如gethp,def之类的,都是手游比较常见的代码。
比如我搜索gethp(读取血量),红色箭头是比较有用的信息,双冒号前面代表对象,玩家数据,怪物逻辑等。记录下来,PlayerData::如果要修改攻击力、防御力等玩家数据就搜索这个开头,EnemyMonsterLogic::同理。具体怎么修改比较简单,略过。
来看一下怎么直接过关,游戏界面如上图。
按照一般的设计,过关肯定是怪物都被打死了,才能前往下一层,那么修改方案就从这里入手,让怪物的HP固定为0。刚开始我搜索了一些关键词,比如::getIsDead,直接返回1就是默认怪物已经处于死亡状态,随便走一格就可以过关了,但是后来发现在某些副本会闪退。比如有的怪物有复活能力的,需要打两次才能过关,如果直接改成死亡,那么第一次移动的时候就会引起复活逻辑错误,接着就是闪退了,要么卡死。所以改这里并不是很好。
但是要修复这个问题,只能修改函数逻辑,锁定数值并不能解决问题,因为这个是逻辑错误引起的。比如你修改怪物的HP,改成0,第一次是没问题的,但是第二次打的时候复活需要增加HP,结果加不进去,就闪退了。
修复卡死闪退问题我是从死亡判断入手的,最根本的还是怪物血量问题,代码应该会有一个循环。刚才说到怪物HP为0会死亡,双击EnemyMonsterLogic::getIsDead
进入,查看引用。
有一大堆,没办法,我一个个点进去看,其实比较容易排除,像一些缺少循环条件的肯定不是了,然后我又注意到一个函数EnemyMonstersManager::dieEnemyMonstersZeroHPs
,有HP关键字,也有die死亡关键字,也有while,进入查看后基本上可以确实是这里引起了错误。
伪代码如下
int __fastcall EnemyMonstersManager::dieEnemyMonstersZeroHPs(EnemyMonstersManager *this)
{
int v1; // r0
int *v2; // r1
EnemyMonsterLogic **v3; // r4
char v4; // r10
unsigned int v5; // r6
EnemyMonsterLogic *v6; // r5
int v7; // r3
&nbs
支付7UD,阅读全文
还有更多的精彩内容,作者设置为付费后可见