Hayden. 发表于 2018-9-24 22:12

【Unity3D】游戏【滚动的天空】谷歌Google原版1.9.4【dnSpy】全∞资源破解【教程】

本帖最后由 Hayden. 于 2018-10-23 09:35 编辑

这是一个非传统内购的破解教程,使用的是Google Play下载的原版,因为不是支付宝之类的购买方式,
所以不能像搜索内购代码破解。
本文走的是Unity3D类游戏的破解道路,主要是修改Assembly-CSharp.dll文件,达到游戏破解与内购!

使用工具:
Apk反编译---Android Killer1.3.1
dll动态链接库C#反编译工具---dnSpy v5.0.7


老方法使用AK反编译滚动的天空1.9.4,如下打开工程目录。把Assembly-CSharp.dll拖入dnSpy,它
会同时导入其他动态链接库,不要关掉,否则后果自负。




因为我们要改无限球,而根据程序员的写作思路,一般都是要有setBallNum和getBallNum者类
似的两个方法的,然后以此搜索关键词,我找到了Set_Ball这个方法名,点击进入。




我仿佛发现了新大陆,这个类里都是关于游戏商品的set和get方法。
Get_Ball,Set_Ball,Unlimited_Revive(无限复活),Unlimited_Revive_24h,
Unlimited_Ball_24h,Get_Shield(获取护盾),Set_Shield,Get_YaoShi(获取钥匙)。。。。。。。。。。。。。。。
接下来就是想怎么改就怎么改了。
看我的修改方法:
首先我们来看看基础的关于球的方法吧!
      // Token: 0x1700097B RID: 2427
      // (get) Token: 0x0600380B RID: 14347
      public static int Get_Ball
      {
                get
                {
                        PropUtil.TryInitialize();
                        string @String = PlayerPrefs.GetString(PropUtil.getItem(1).key);
                        int result = 0;
                        try
                        {
                              result = int.Parse(SystemSafety.StringDecryptByDES(@string, "20150528", "12345678"));
                              
                        }
                        catch (Exception)
                        {
                              result = 10;
                        }
                        return result;
                }
      }

      // Token: 0x0600380C RID: 14348
      public static void Set_Ball(int ballNum)
      {
                if (!PlayerProfiler.HavePurchasedPremium)
                {
                        PlayerPrefs.SetString(PropUtil.getItem(1).key, SystemSafety.StringEncryptByDES(ballNum + string.Empty, "20150528", "12345678"));
                        Singleton<EventSystem>.GetSingleton().DispatchEvent(new EventObject(19, 1));
                }
      }

在Set_Ball方法中,首先做了一个IF判断,为假才开始设置球的数量。
PlayerProfiler.HavePurchasedPremium直译Premium意思是,优质的,高昂的,
而最合适的翻译意思是:顶级的,豪华的,如索尼手机Premium版,还有很多车也是有Premium版的。
HavePurchasedPremium也就是是否已经购买顶级套餐!
点击方法名定位到:
      // Token: 0x1700088C RID: 2188      // (get) Token: 0x06003345 RID: 13125 RVA: 0x00144B0C File Offset: 0x00142D0C
      public static bool HavePurchasedPremium
      {
                get
                {
                        bool result;
                        if (PlayerProfiler.premium.Get() == 42)
                        {
                              result = true;
                        }
                        else
                        {
                              PlayPackageDataModule dataModule = Singleton<DataModuleManager>.GetSingleton().GetDataModule<PlayPackageDataModule>(DataNames.PlayPackageDataModule);
                              result = dataModule.IsInExperience();
                        }
                        return result;
                }
      }
搜索Premium关键词找到OnPremiumModePurchase方法:

      // Token: 0x06003335 RID: 13109 RVA: 0x00030F61 File Offset: 0x0002F161
      public static void OnPremiumModePurchase()
      {
                PlayerProfiler.premium.Set(42);
                PlayerPrefences.Save();
      }

对比不难发现OnPremiumModePurchase()就是购买顶级配置的方法,不用脑袋想,也能肯
定这就是无限球和无广告套餐了。我把这个方法在Get_Ball方法中调用,测试
了一下,果然打开游戏就是无限球了,不用搞什么点击购买或其他操作了。


      // Token: 0x1700097B RID: 2427
      // (get) Token: 0x0600380B RID: 14347
      public static int Get_Ball
      {
                get
                {
                        PropUtil.TryInitialize();
                        string @string = PlayerPrefs.GetString(PropUtil.getItem(1).key);
                        int result = 0;
                        try
                        {
                              result = int.Parse(SystemSafety.StringDecryptByDES(@string, "20150528", "12345678"));
                              PlayerProfiler.OnPremiumModePurchase();//购买豪华套餐
                        }
                        catch (Exception)
                        {
                              result = 10;
                        }
                        return result;
                }
      }

下面改其他Get方法得到护盾,钥匙,复活心,碎片等
举例,更改返回值return;



      // Token: 0x1700097F RID: 2431
      // (get) Token: 0x06003813 RID: 14355
      public static int Get_Shield
      {
                get
                {
                        PropUtil.TryInitialize();
                        string @string = PlayerPrefs.GetString(PropUtil.getItem(3).key);
                        int num = 0;
                        try
                        {
                              num = int.Parse(SystemSafety.StringDecryptByDES(@string, "20150528", "12345678"));
                        }
                        catch (Exception)
                        {
                              num = 3;
                        }
                        return num + 65536;
                }
      }

我增加了65536个,其实只要是大点的数据,多少都无所谓,玩游戏后数值还会增加!
更改AndroidManifest.xml,去除facebook和google的广告activity。
修改后编译签名安装,看一下效果:




一个无限资源,无广告的滚动的天空1.9.4就出炉了!

原版链接:https://pan.baidu.com/s/1J9lMHVUuYM4DC4rMddO7Lw 密码:30kk
修改版链接如下,七天有效期**** Hidden Message *****
本文仅以学习为目的,请下载后24H之内删除,否则后果自负!

友情提示:请支持正版!!!请支持正版!!!请支持正版!!!重要事情说三遍!!!
请大家多多指教,多多评分点赞!




yyspawn 发表于 2018-10-12 07:39

zvzvzv 发表于 2018-9-25 15:32

谢谢                               顶一个                  

heyuweixxop 发表于 2018-9-24 22:26

感谢分享破解
这款游戏我有玩过,个人到了第三关就反应不及了…:'(weeqw

xiaoxs11 发表于 2018-9-24 22:27

感谢分享

若斯子孑 发表于 2018-9-24 22:35

我的天,大佬大佬,6666

lalalala 发表于 2018-9-24 22:37

666666666666666666666666666

youngzhongjie 发表于 2018-9-24 22:43

学习一下下

zotto 发表于 2018-9-24 22:44

大佬操作666,不过这游戏我没玩过{:1_1:}

j542936 发表于 2018-9-24 22:49

看着很简单。做起来有点麻烦。特别是我这种没基础的人

willgoon 发表于 2018-9-24 22:54

不玩游戏 不过方法值得学习 谢谢

WeCBo 发表于 2018-9-24 23:03

看看怎么样啊
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 【Unity3D】游戏【滚动的天空】谷歌Google原版1.9.4【dnSpy】全∞资源破解【教程】