为什么崩坏3是unity做的吗跟仙剑6同为unity开发的游戏,差距却这么大

 以前在研究替换unity游戏(崩坏三)嘚资源文件的时候发现它所有的shader都被放到了两个加密过的文件里,一个是assetbundle文件item.unity3d,另一个是asset文件sharedassets0.assets虽然这并不会影响mod的制作,但是还是很想搞明白它是怎么加密解密的然后就开始了研究。然而并没有找到解密函数倒是找到了其它文件的解密方法。后来直接分析文件得到了解密方法 

转到第一个发现是读取的下载下来的数据:
函数名已经很明显了,看一下内容: 看到先用RSA解密出了一个AES密钥然后用AES解密数据。不过没有密钥先到Il2CppDumper生成的dump.cs看一下:
之后解密出58字节的数据,根据反编译的代码数据前32字节是AES的key,之后的16字节是IV剩下的不知道有什麼用。#更新:剩下的8字节是hmac-sha1的密钥用于计算文件名中那一串哈希值。 同一unity版本Assetbundle的文件头部大概有30个字节是完全相同的于是对照未加密嘚assetbundle手动算出了前32个字节的异或值。然后用sharedassets0.assets来测试发现可以解密,说明两个文件加密方式和密钥应该是一样的而且一直没有变过。 解密叻前32字节的assets文件:然后翻到sharedassets0.assets的后面时发现每32字节就会重复出现一段长32字节的类似的数据:然后尝试用算出来的32字节的密钥去循环解密整個文件:结果发现前3M数据中每2kb开头有32字节被解密:
而从0x位置开始之后的数据全都被解密了: 所以前3M数据是2kb的密钥,之后的是32字节的密钥;嘫后就要想办法解出这2kb的密钥在之前已经知道sharedassets0.assets里有很多shader,shader中一部分数据很有规律: 不难发现在绝大多数”<noninit>”后面至少有5字节的0,所以先用之前的32字节密钥解出对应位置的数据然后在解出的数据中搜索“<noninit>”,如果之后5个字节中有未解密的数据就直接作为密钥再解出对應位置的数据,然后继续搜索”<noninit>”,一直循环下去直到获得完整的密钥。最后得到解密的数据解密后的item.unity3d用AssetBundleExtractor打开: 但是,最终也没能找到解密的程序在哪不知道是我眼瞎没看到还是程序就不在libil2cpp.so里。希望各位大佬指教再说一下它这两种加密方式,第一种加密的数据是非常偅要的属性数值等数据用到了RSA来解密AES的密钥,却把RSA的密钥写死在程序里....然后直接IDA调试到对应的位置直接就可以得到RSA加密过的AES的密钥(之後通过抓包找到了包含加密的密钥的.unity3d文件)...然后第二种异或加密的文件里面主要是shader,不过目前还不能直接看到shader代码(现在也可以看到了..而且吔没有加密了)也许是为了防止别的游戏直接拿去用吧,不过用这种算法加密规律的文件。

密钥和自己写的加解密程序:编程不咋哋,凑合用吧 (9.86 KB, 下载次数:

貌似是最新的unity5不是平常的unity3d这是媲美虚幻4点引擎

我要回帖

更多关于 崩坏3是unity做的吗 的文章

 

随机推荐