【手游】魔灵幻想 美术资源加密分析

原创 2015年11月19日 11:26:19

这个游戏是用Unity3D引擎开发的,加密方式是先对AssetBundle加密,然后在libmono.so中对Assembly-CSharp.dll进行加密


0x00 在ida中先找到加密dll的地方


从上面的伪代码可以看出只是进行了简单的异或处理,在看看反汇编代码


这个int EncryptNum[61]里面存放的就是加解密的key



0x01 分析完可以先对Assembly-CSharp.dll进行解密了

//Assembly-CSharp.dll解密算法
private byte[] DecryptDll (byte[] bytes)
{
    byte[] encryptNum = new byte[] { 
                        0xA8, 0xBB, 0xCD, 0xDF, 0xE2, 0xF4, 0x86, 0x98, 0xB7, 0xCA, 0xDC, 0xEE,
                        0xF1, 0x83, 0x95, 0xA7, 0xC6, 0xD9, 0xEB, 0xFD, 0x8F, 0x92, 0xA4, 0xB6,
                        0xD5, 0xE8, 0xFA, 0x8C, 0x9E, 0xA1, 0xB3, 0xC5, 0xE4, 0xF7, 0x89, 0x9B,
                        0xAD, 0xBF, 0xC2, 0xD4, 0xF3, 0x86, 0x98, 0xAA, 0xBC, 0xCE, 0xD1, 0xE3,
                        0x82, 0x95, 0xA7, 0xB9, 0xCB, 0xDD, 0xEF, 0xF2, 0x91, 0xA4, 0xB6, 0xC8, 0xDA};

    for (int i = 0; i < bytes.Length; i++)
    {
        bytes[i] ^= encryptNum[i % encryptNum.Length];
    }

    return bytes;
}

0x02 用.NET Reflector反编译Assembly-CSharp.dll找到对AssetBundle加密的地方(搜索WWW和AssetBundle等相关API去定位)


加密方式和对dll一样也是异或加密,密钥在GameConfig.EncryptNum里



0x03 对AssetBundle进行解密

//AssetBundle解密算法
private byte[] DecryptAssetBundle(byte[] array)
{
    byte[] encryptNum = new byte[] { 
                        0xA8, 0xBB, 0xCD, 0xDF, 0xE2, 0xF4, 0x86, 0x98, 0xB7, 0xCA, 220, 0xEE, 0xF1, 0x83, 0x95, 0xA7, 
                        0xC6, 0xD9, 0xEB, 0xFD, 0x8F, 0x92, 0xA4, 0xB6, 0xD5, 0xE8, 250, 140, 0x9E, 0xA1, 0xB3, 0xC5, 
                        0xE4, 0xF7, 0x89, 0x9B, 0xAD, 0xBF, 0xC2, 0xD4, 0xF3, 0x86, 0x98, 170, 0xBC, 0xCE, 0xD1, 0xE3, 
                        130, 0x95, 0xA7, 0xB9, 0xCB, 0xDD, 0xEF, 0xF2, 0x91, 0xA4, 0xB6, 200, 0xDA, 0, 0, 0};

    for (int i = 0; (i < array.Length) && (i < encryptNum.Length); i++)
    {
        array[i] ^= encryptNum[i % encryptNum.Length];
    }
    return array;
}

0x04 解密完后,用提取工具进行提取会发现一直在报错用WinHex看了一下,这些AssetBundle还被压缩了


压缩算法使用的是LZMA,这里我用了开源的LZMA库(支持C/C++,C#,Java) http://www.7-zip.org/sdk.html

//解压LZMA文件
private void DecompressFileLZMA(byte[] bytes, string outFile)
{
    Decoder coder = new Decoder();
    MemoryStream input = new MemoryStream(bytes);
    FileStream output = new FileStream(outFile, FileMode.OpenOrCreate, FileAccess.ReadWrite);

    // Read the decoder properties
    byte[] properties = new byte[5];
    input.Read(properties, 0, 5);

    // Read in the decompress file size.
    byte[] fileLengthBytes = new byte[8];
    input.Read(fileLengthBytes, 0, 8);
    long fileLength = BitConverter.ToInt64(fileLengthBytes, 0);

    // Decompress the file.
    coder.SetDecoderProperties(properties);
    coder.Code(input, output, input.Length, fileLength, null);
    output.Flush();
    output.Close();
    input.Close();
}

资源提取源码

链接:http://pan.baidu.com/s/1mipYkOC 密码:cyo3

版权声明:本文为博主原创文章,未经博主允许不得转载。

【手游】梦幻西游手游 美术资源加密分析

最近研究了一下梦幻西游手游版的资源打包方式其中就用到了Hash表索引 一般的luac文件反编译工作到此就结束了,可梦幻西游手游的luac文件不是一般的luac,直接用上面的工具肯定会报错 这是因为...
  • BlueEffie
  • BlueEffie
  • 2016年03月24日 18:48
  • 8118

【手游】魔灵幻想 美术资源加密分析

这个游戏是用Unity3D引擎开发的,加密方式是先对AssetBundle加密,然后在libmono.so中对Assembly-CSharp.dll进行加密 0x00 在ida中先找到加密dll的...
  • BlueEffie
  • BlueEffie
  • 2015年11月19日 11:26
  • 2424

【手游】率土之滨 美术资源加密分析

有个网友让我帮忙分析一下这个游戏的资源加密方式,分析后...发现只是简单的异或加密 0x00 资源中大部分png图片加密了 game目录下的lua文件加密了 音效文件没加密只是打包了成了.fsb ...
  • BlueEffie
  • BlueEffie
  • 2016年11月19日 01:26
  • 2590

【手游】魔天记 美术资源加密分析

0x00 先用WinHex看看魔天记的资源文件 我们发现有些资源的文件头前面都加了“fangcunzip” 姑且理解为加密的标识 0x01 在IDA中反汇编\lib\armeabi\libga...
  • BlueEffie
  • BlueEffie
  • 2016年11月18日 23:57
  • 1066

【手游】少年西游记 美术资源加密分析

有个网友让我帮忙分析下《少年西游记》这款手游,分析过程和大家分享一下 0x00 先用WinHex看看少年西游记资源包package.was 粗略的分析可以把PackageWas的结构看成为这样:...
  • BlueEffie
  • BlueEffie
  • 2016年07月20日 13:39
  • 1735

【手游】皇室战争 Clash Royale 美术资源加密分析

0x00 CR的图片资源是在SC文件夹中 一般为XXX_tex.sc sc文件是一个压缩文件,它是使用了修改的LZMA压缩算法进行压缩的(和老版的COC资源压缩方法类似) 标准的LZM...
  • BlueEffie
  • BlueEffie
  • 2016年03月24日 11:41
  • 4784

【手游】封神大主宰 美术资源加密分析

这是一款Q萌系横版封神榜题材策略手游 0x00 先用WinHex看看被加密了的游戏资源 \assets\MyResources\originalRes\background \assets\M...
  • BlueEffie
  • BlueEffie
  • 2016年04月21日 14:37
  • 1880

【手游】童话大冒险 美术资源加密分析

这是一款Q萌横版街机冒险闯关手游,使用的引擎是Cocos2dx-lua 0x00 先用WinHex看看游戏资源 所有的资源文件都被加密了,而且是同一种加密方式,加密后的文件以@gf@开头 经过逆向...
  • BlueEffie
  • BlueEffie
  • 2016年04月01日 17:48
  • 1679

【手游】有杀气童话 美术资源加密分析

加密原理参考我之前写的 Unity3D 游戏加密解密那些事 0x00 在ida中先找到加密dll的地方 把libmono.so文件拖入IDA中,在函数窗口中搜索mono_image_open_from...
  • BlueEffie
  • BlueEffie
  • 2015年12月03日 09:33
  • 2637

基于cocos2dx的2D手游美术资源制作技术选型(1)(2)

 Cocostudio是cocos2dx官方提供的游戏制作工具,其中包含了动作编辑器,其编辑好的动画导出的文件有三种:Atlastexture,json的AtalasTexture描述文件和pl...
  • zhanghefu
  • zhanghefu
  • 2014年06月07日 22:24
  • 3638
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【手游】魔灵幻想 美术资源加密分析
举报原因:
原因补充:

(最多只允许输入30个字)