安卓逆向Unity3D游戏层叠xx破解
Posted Sp软件服务
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓逆向Unity3D游戏层叠xx破解相关的知识,希望对你有一定的参考价值。
今天下午吃完饭没事干,下了一个叫层叠xx的游戏,这个游戏就是把各种图形叠加在一起,叠加的部分会变成反色,要组合成他规定的图形,很考验想象力。我一下就玩到了30关,结果出现下面的提示:
这就让人很不爽了,非要加他的群激活才能让继续玩,估计找他们激活得交钱,搞得这么麻烦,于是我准备花一分钟逆向这个游戏。
首先载入jadx,发现这是一个Unity3D引擎做的游戏:
学过U3D开发的应该都知道,游戏的代码都被编译在assets\bin\Data\Managed\Assembly-CSharp.dll中,我们只需要反编译这个文件即可。
代码结构很清晰,没有被加密,省去了我们不少时间。
接下来我们就需要寻找验证代码的所在地方。
怎么定位呢?可以有很多思路,比如搜索激活的英文关键字、搜索随机函数等等,这里介绍一种快速定位的方法。
我们发现他的激活码是根据下方的随机码计算的,而这个随机码应该是第一次运行后就生成,然后保存在本地的。
安卓开发中保存数值,一般都用sharedpreferences类。
我们看看这个游戏的sharedpreferences文件:
其中的randomIntKey保存了随机码,我们可以直接搜索randomIntKey字符串:
找到调用的地方:
这里代码很简单,使用了RandomInt函数生成一个随机数,并保存在Prefs中。
接下来点右键-分析,查看哪里调用了这个方法:
定位到CheckJiHuoMa,根据名字我们可以猜测是判断激活码是否正确的方法。
他的算法也非常简单,用随机码的数值加上 cdxr,然后计算MD5,就是激活码。
我们可以实验一下,我这里的随机码是407313,加上cdxr后的md5:
MD5一般都是32位大写,我们这里用3A0FADACC8B91EDF1CEBCF342DBE5593作为激活码测试一下:
激活成功,可以继续玩了。
接下来我们尝试一下过掉他的激活验证。
分析CheckJiHuoMa,定位到调用的地方
可以发现在SetGameStart调用了这个验证:
他的代码也很简单,判断当前关卡是否大于开放关卡,这里是30
如果大于30则判断激活码是否正确,激活码正确就调用SetActive方法。
我们的修改方法有很多,可以修改CheckJiHuoMa方法返回值恒为true
也可以修改 kaiFangLevelCount常量的值为99999,也可以修改他的判断等等。
这里我们直接改他的kaiFangLevelCoun常量,简单而又美观。
右键编辑IL指令,这里的0x1E就是30的十六进制,这个游戏一共有300关,我们修改成大于300的即可。
先把前面改为ldc.i4,然后输入0XFFFF,这个是65535的十六进制,已经够大了。
确定后保存文件,替换掉原来的再测试:
(我们为了快速测试可以修改他的Pref文件,他里面保存了当前关卡的数值,我们改为30
)
来到30关:
过关之后直接31关,没有任何提示,破解成功。
声明:本文仅供研究学习,请勿用于非法和商业用途,否则后果自负。
以上是关于安卓逆向Unity3D游戏层叠xx破解的主要内容,如果未能解决你的问题,请参考以下文章