好友
阅读权限40
听众
最后登录1970-1-1
|
本帖最后由 lzc090 于 2019-3-13 10:06 编辑
前言
1.在了解的U3D游戏中混淆的游戏还真心少(到现在好像遇到过3个吧)。
2.刚好今天又遇到这个,方法、参数等几乎都混淆了。
3混淆通常搜索一些关键字符通常都没有,不过需要耐心去找突破口。今天说下我的思路吧。
4.如果直接想看混淆分析请看内容一和六
一、破解VIP
也是这游戏的突破口(直接搜索VIP)
GoldVipRestore 恢复会员和 GoldVipOverdue 会员过期
通过上面两个方法,知道 FFJCEAPDBCJ 这个字段,会员=0,过期=1,默认=-1
那么我们只需要将 FFJCEAPDBCJ 赋值为0,那就是会员?不够。
GoldVipRestore 方法里面有3个判断都满足才算是会员,那么我们介绍一下剩下的两个
isSubscribedOwned 已订阅,这其实就是购买返回的一个收据的判断,当返回有收据为true,那么我们直接改成true就行了
当FFJCEAPDBCJ 和 isSubscribedOwned 的条件满足的时候才是真正的会员
那么最后一个DIFJLIDLAFL 是试用会员或者是会员过期的一个判断(因此我们不需要去管他)
二、飞机位
在GoldVipRestore 会员中有看到这个base.ODKHEHKDCJN.BuyBlocks(2); 这其实就是开通会员赠送的飞机位
在BuyBlocks 方法中他是添加了2个this.CreateBlock(null)(空位的飞机位),那么我可以根据自己的想法修改,我是修改成了4个(原本开局只有4个,加上会员2个应该6个,修改后成8个了)
三、速度修改
JFMKOJNLJPD.OAOHHBBOACH = 1.5f; 这是会员赠送的1.5倍数加成速度
CMFLIJNLMNL.OMDFBLLPHLI("SpeedBuffNum", JFMKOJNLJPD.OAOHHBBOACH); 将速度数值存入
OAOHHBBOACH就是速度,初始值=1,你可以点进去进行修改成你需要的倍数,也可以直接在上面的1.5进行修改
直接修改8倍,游戏中还是显示2倍,但实际的速度是8倍
JFMKOJNLJPD.OAOHHBBOACH = 1.5f;
CMFLIJNLMNL.OMDFBLLPHLI("SpeedBuffNum", 8f);
四、每日赠送钻石修改
this.GetDailyVipReward(); 会员每日赠送的10个钻石
我直接将10.0修改成了100000
五、初始金币修改
最简单的方法,这游戏初始的金币量是20000,那么我们直接搜索20000字符
红线部分的就是初始金币20000,需要多少自己可以该多少
六、混淆分析
不过,想增加自己对代码的熟悉,当然不止于此。因此尝试去找金币和钻石等的变量
以钻石为例子进入.UpdateDiamond方法进去看下能否找到相应的钻石的变量,直接对钻石变量赋值就可以达到固定的数值
首先从这方法入手:
public void GetDailyVipReward()
{
if (PlayerPrefs.GetInt("IsGetDailyVipReward", 0) == 0)
{
base.GPOOMNIINIP.SoundRewardClaim();
base.GDBIJFKKABG.UpdateDiamond("+", new HDBJNLJNJAL(10.0, 1));
base.GDBIJFKKABG.ShowDiamondAnimation();
PlayerPrefs.SetInt("IsGetDailyVipReward", 1);
}
}
我们先分析一下base.GDBIJFKKABG.UpdateDiamond("+", new HDBJNLJNJAL(10.0, 1));
中的new HDBJNLJNJAL(10.0, 1)
public HDBJNLJNJAL(double AACJKANIABB, int JJLFPIMNOPN)
{
this.GDOFGIFHJOK = AACJKANIABB; //10钻石
this.JJLFPIMNOPN = JJLFPIMNOPN; //1
if (this.JJLFPIMNOPN < 1)
{
this.JJLFPIMNOPN = 1;
}
this.BLNHDPBGJGI(); //倍数计算
当看到这个是不是就直接判断GDOFGIFHJOK是钻石?那么JJLFPIMNOPN 又是什么意思?
HDBJNLJNJAL 这方法和GDOFGIFHJOK在金币 UpdateCoin 也被使用到,这就说明他只是一个容器,谁需要谁用。
而JJLFPIMNOPN是一个倍数
BLNHDPBGJGI()方法倍数计算,其实就想相差1000倍:
private void BLNHDPBGJGI()
{
while (this.GDOFGIFHJOK > 1000000.0)
{
this.GDOFGIFHJOK /= 1000.0;
this.JJLFPIMNOPN++;
}
}
当数值=1000000会被表达成 num=(1000;1)
数值1=1倍
数值2=1000倍
数值3=1000,000倍
就像上面的HDBJNLJNJAL(10.0, 1)); 结果就是增加10,1倍
如果是HDBJNLJNJAL(10.0, 2)); 结果就是10*1000
PS:在计算钻石过程中并非单独只用JJLFPIMNOPN,还使用了其他或者赋其他的值,这是只举例一下
那么接下来看下UpdateDiamond
public void UpdateDiamond(string EELEBAIONGM, HDBJNLJNJAL AMDAHJMNLIG)
{
if (EELEBAIONGM != null)
{
if (EELEBAIONGM == "+") //我们看到这个加号并非计算的+号,而是一个判断是增加还是减少
{
JFMKOJNLJPD.HEENHDFPMLC.OFAPBGLLHAD(AMDAHJMNLIG); //OFAPBGLLHAD 方法才是执行加法计算(AMDAHJMNLIG)这个参数并非int格式,并不能直接赋值
this.diamondText.text = JFMKOJNLJPD.HEENHDFPMLC.ToString();
goto IL_67;
}
}
JFMKOJNLJPD.HEENHDFPMLC.ECGLBPLICKK(AMDAHJMNLIG); //这是减法计算
this.diamondText.text = JFMKOJNLJPD.HEENHDFPMLC.ToString();
IL_67:
HADLOEJJHND.HNMDODBLJPK();
CMFLIJNLMNL.OMDFBLLPHLI("Diamond", JFMKOJNLJPD.HEENHDFPMLC.GDOFGIFHJOK.ToString());
CMFLIJNLMNL.OMDFBLLPHLI("DiamondUnit", JFMKOJNLJPD.HEENHDFPMLC.JJLFPIMNOPN);
CMFLIJNLMNL.CLNFGGNKOJD();
那么看下OFAPBGLLHAD 方法的计算情况
public HDBJNLJNJAL OFAPBGLLHAD(HDBJNLJNJAL KECHMGOOIAB)
{
int num = Math.Abs(this.JJLFPIMNOPN - KECHMGOOIAB.JJLFPIMNOPN); //钻石倍数计算(默认都是1),结果为0
if (this.JJLFPIMNOPN > KECHMGOOIAB.JJLFPIMNOPN)
{
this.GDOFGIFHJOK += KECHMGOOIAB.GDOFGIFHJOK * Math.Pow(0.001, (double)num); //钻石总数+=增加数*0.001的num次方-->总数+=增加数*1
}
else
{
double num2 = KECHMGOOIAB.GDOFGIFHJOK; //计算方法和上面的一样
num2 += this.GDOFGIFHJOK * Math.Pow(0.001, (double)num);
this.GDOFGIFHJOK = num2;
this.JJLFPIMNOPN = KECHMGOOIAB.JJLFPIMNOPN;
}
this.BLNHDPBGJGI(); //这是倍数的计算
return this; //返回最后结果到UpdateDiamond 方法中 JFMKOJNLJPD.HEENHDFPMLC.ECGLBPLICKK(AMDAHJMNLIG); 的HEENHDFPMLC
那是不是认为GDOFGIFHJOK 就是钻石的变量?,错了,和上面的一样,也是个容器
HEENHDFPMLC 才是真正钻石的变量那么我们看下谁对HEENHDFPMLC进行赋值
public static void FJMBACMKGKE()
这时候你就可以看到所有的数据都在这里
想怎么就怎么改,不过可能还需要分析一下
JFMKOJNLJPD.HEENHDFPMLC = new HDBJNLJNJAL(CMFLIJNLMNL.HDFIMBNECDJ("Diamond"), CMFLIJNLMNL.CDNJBCFONEG("DiamondUnit"));
我们拿这个来对比下就清楚了base.GDBIJFKKABG.UpdateDiamond("+", new HDBJNLJNJAL(10.0, 1));
CMFLIJNLMNL.HDFIMBNECDJ("Diamond") = 10.0 这是钻石数不过还需要乘上后面的倍数1
CMFLIJNLMNL.CDNJBCFONEG("DiamondUnit") = 1 倍数
测试:
我将钻石修改成了
显示应该是123000
金币、全部收入、星星币和钻石的结构都是一样的修改方法也是一样的,就不多说了
顺便说下倍数CDNJBCFONEG,这是判断输入不同的sting参数而决定不同的倍数
后面的其他信息比如:经验、双倍时间、等级等一些也调用了CDNJBCFONEG 方法和PMLFFELDHOI,不过这些都子基本数据,直接赋值就行了
2倍时间的修改
修改前:JFMKOJNLJPD.BGPJNCJJNHP = CMFLIJNLMNL.PMLFFELDHOI("SpeedBuffTime");
修改后:JFMKOJNLJPD.BGPJNCJJNHP = 1111111f;
等级修改
修改前:JFMKOJNLJPD.MIAAFMGPBNH = CMFLIJNLMNL.CDNJBCFONEG("Level");
修改后:JFMKOJNLJPD.MIAAFMGPBNH = 33;
原版本APK:https://www.lanzouj.com/i3etcoh
代码混淆只是增加一些难度而已,只要细心多花时间研究不是问题的! |
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|