梧桐树下丶 发表于 2019-7-29 22:25

[unity][超異域公主連結!Re:Dive ] 1.5.1解包(削弱敌方

本帖最后由 梧桐树下丶 于 2019-7-31 09:56 编辑

//可能会封号,因为我只是用小号测试了几下就替换回来了,请谨慎使用

你群这游戏又又火了,所以就来解包来看一下


1.解压apk



典型的unity il2cpp打包的游戏,发现global-metadata.dat被隐藏




推测应该是将其隐藏在libil2cpp.so里面



2.取出global-metadata.dat


将so拖入ida
然后搜索MetadataLoader::LoadMetadataFile函数
点击函数并f5



箭头所指的为sonet_global_metadata_dat_len为dat的长度
点击 并记录偏移






方框里为dat的解密 很简单 按位取反


写一个简单的函数 去读取libil2cpp.so里global-metadata.dat文件的magic header"AF1BB1FA";
因为他已经取反,所以需要搜索“50E44E05”


List<uint> head = new List<uint>()
            {
                0X50,
                0xe4,
                0x4e,
                0x05,               
            };
            string path = @"C:\Users\mikot\Desktop\newAzur\libil2cpp.so";
            byte[] array = File.ReadAllBytes(path);
            int index = 0;
            int end = 0x10EBAE4;
            for (int i = 0; i < array.Length; i++)
            {
                bool flag = false;
                for (int j = 0; j < head.Count; j++)
                {
                  if (array != head)
                  {
                        flag = true;
                        break;
                  }
                }
                if (!flag)
                {
                  index = i;
                  break;
                }
            }
            byte[] array1 = new byte;
            for (int i = 0; i < end; i++)
            {
                array1 = (byte)~array;
            }
            File.WriteAllBytes(Path.GetDirectoryName(path) + "/global-metadata.dat", array1);

之后便会得到global-metadata.dat


3解析


用Il2CppDumper进行解析
使用Ida 运行生成的script.py 快捷键alt f7去还原method name


使用dnSpy打开还原出来的dll
然后就是常规操作
在里面搜索一些关键字
attack hp等等


之后首先发现了一个有点像的类



在其构造函数中应该是各种属性设置


在其类中发现了一个熟悉的东西
一个可以用来保护内存变量和检测等等的插件
一般可以在一定程度上去防止八门等等的修改


http://codestage.ru/unity/anti-cheat/api/index.html
这是其文档地址,至于代码因其收费的所以就不放整体代码了


之前有曾购买使用过所以很熟悉这个
以类型ObscuredDouble为例


当你定义一个 ObscuredDouble value = 2d; 时会经过此方法去进行保护
private static ACTkByte8 InternalEncrypt(double value, long key)
                {
                        long currentKey = key;
                        if (currentKey == 0L)
                        {
                              currentKey = cryptoKey;
                        }

                        var u = new DoubleLongBytesUnion();
                        u.d = value;
                        u.l = u.l ^ currentKey;

                        return u.b8;
                }


当你拿value进行运算时 他就会此方法去返回真正的值
private double InternalDecrypt()
                {
                        if (!inited)
                        {
                              currentCryptoKey = cryptoKey;
                              hiddenValue = InternalEncrypt(0);
                              fakeValue = 0;
                              inited = true;
                        }

                        var union = new DoubleLongBytesUnion();
                        union.b8 = hiddenValue;

                        union.l = union.l ^ currentCryptoKey;

                        double decrypted = union.d;

                        if (Detectors.ObscuredCheatingDetector.IsRunning && fakeValue != 0 && Math.Abs(decrypted - fakeValue) > 0.000001d)
                        {
                              Detectors.ObscuredCheatingDetector.Instance.OnCheatingDetected();
                        }

                        return decrypted;
                }

很久没用过它了 如果说错了请指正


通常在arm里get时会伴随着bl


4 搜索修改

为了省事我直接在ida里直接搜索上述类里的任意变量 比如 "MasterEnemyParameter.EnemyParameter$$get_hp"


可以搜到很多有用的function 为了方便 我只找了靠前的几个进行了修改


根据名字推测应该是敌人的属性 所以将hp atk 等等可以设置低数值

类似的变量可以一直往下搜索知道function 结束
但是这两个应该是够的

将他们一个改为1一个改为0




跳转到hex窗口


使用010editor打开so,按ctrl g跳转到上述两个地址 然后修改为对应的指令
保存将其放回apk替换,检验成功





至此解包成功
我没有测试打上签名版....因为他要下载的东西是真的有点多...{:301_1008:}

而且他没有打入x86设备,应该是因il2cpp模式下包体会超过平台上架限制,所以大部分模拟器玩他会有一些问题


成品地址 :链接:https://share.weiyun.com/5wNSkRF 密码:dykyx6

建议 获取apk里各个关键文件的md5或者签名不对就封号 还记录设备号 简单粗暴




来点评分吧 秋梨膏{:301_999:}
{:301_973:}有没有大佬有越狱手机 帮我把这个应用砸个壳我想在手机上玩

梧桐树下丶 发表于 2019-11-11 11:03

838269127 发表于 2019-11-4 12:52
请问一下,脚本里的end的大小是sonet_global_metadata_dat_len的大小吗,那这个大小是如何计算出来的呢,我 ...

{:301_1008:}是那个大小,两个不同应该是我当时解了两个不同的so

838269127 发表于 2019-11-4 12:52

请问一下,脚本里的end的大小是sonet_global_metadata_dat_len的大小吗,那这个大小是如何计算出来的呢,我在so里追踪了很久都没找到0x10EBAE4这个大小,能请假一下吗,谢谢!

zxx646132855 发表于 2019-7-29 22:49

过程很详细,学习了

七色月光 发表于 2019-7-29 23:03

这也可以,tql

sdaza 发表于 2019-7-30 06:30

看看先。。

lmz112 发表于 2019-7-30 08:27

有2个下哪个。。。

zxc198896 发表于 2019-7-30 08:39

看起来不错

wu8511128 发表于 2019-7-30 10:31

谢谢楼主,更新好快

BlueTears_ 发表于 2019-7-30 10:32

感谢楼主分享

zlx123520 发表于 2019-7-30 12:38

这游戏,人就爱乱玩一直在更新,问题就是每次都卡在开始界面连不上,烦的一比!!!

zlx123520 发表于 2019-7-30 12:39

不好意思,刚以为连接没了,实际上有的
页: [1] 2 3 4 5 6 7
查看完整版本: [unity][超異域公主連結!Re:Dive ] 1.5.1解包(削弱敌方