2015-08-05 9,906 ℃
修改可以从返回HP,ATK等数据的URL入手,比如搜索”quests/execute”这样的关键字。因为游戏返回的是json数据,肯定有个解析的过程,跟踪几部后就会发现游戏是使用一个Document类来存放数据,取出数据是使用如document.i(“hp”, 0)形式的代码,所以搜索关键字就能定位到Piece这个类Init函数。
从函数名上就能看出这是初始化数据用的函数,所以可以直接在这里修改,但是由于游戏的MainCharacter(主线人物),Monster(怪物),Unit(玩家的人物)这3个类都是继承于Piece这个类,直接修改的话会导致怪物和人物的值一起修改,原来还想着要不要找其他地方,结果发现在Init函数中官方已经帮忙写了一个判断
这下好了,直接在这个else里修改,就只会对自己的人物生效了
首先修改HP,在Init里官方已经展示了HP的存储方法
this.hp = this.maxHp = this.originalHp = (int) (this.document.i("hp", 0) * this.PowerUpRate);
所以就在else里添加一段
this.hp = this.maxHp = this.originalHp = 99999999;
但是实际修改的时候发现这3个变量都是EncryptInt型,官方写的时候是直接用op_Implicit,也就是隐式转换
然而这个在Reflexil里没法做到,原本想试试强转,后来翻了下EncryptInt类的代码发现有Value这样一个变量,想都不用想就知道这能控制EncryptInt类中的值,刚好Init里也有一个EncryptInt型的局部变量,所以修改的思路就是先把99999999用Value存进这个局部变量后,再存到hp,maxHp,originalHp里,所以最后修改HP的IL代码就是
c#代码
num2.Value = 0x5f5e0ff; this.originalHp = num2; this.hp = num2; this.maxHp = num2;
好了,接下来修改攻击力,攻击力存放的位置是在Piece下的_parameter变量里,跟攻击有关的数值都存放在这里,不过神奇的是,_parameter是一个PieceParameter类型的数组,难道一个人物的攻击力还有多种吗。。。数组大小是由数据包里的formCount控制的,但是我截取了各种数据包也没发现这个值,所以这数组大小就是默认的1,修改攻击力的代码就是这样
this._parameter[0].originalAt = 0x3567e0;
再扯几个其他的修改方案
在Unit类中
LevelUp函数在每次点击人物时调用,可以直接修改成一次30guts
[csharp]base.level += 30;[/csharp]
LoadHpByLevel函数用于载入升guts以后的血量,这里修改其中num的值也可以达到修改血量的效果
LoadStatusByLevel函数用于载入升guts以后的攻击速度,这里可以修改攻击速度
calcDamage函数用于计算我方人物攻击怪物时的伤害,所以直接修改也等于修改攻击力
偶然機會看到此帖,然後就一发不可收拾了,看完了所有貼,感謝分享,我玩的遊戲是暗黑繫列的,博主可能不太喜歡,但是這遊戲是il2cpp出來的,通過dnspy找到il2cpp中地址,看不太懂arm彙編,可有好的方法?
没有,il2cpp你不会arm自然就改不了
修改怎么入门?在下小白,可以加个Q聊下吗?QQ:50883236
能修改爆率吗 比如王宠掉的概率
说好的简易呢,其实后面才是正片吧
我喜欢
话说你是打算把所有游戏都写一遍吗
只写以前玩过和正在玩的