【手游】魔灵幻想 美术资源加密分析
生活随笔
收集整理的這篇文章主要介紹了
【手游】魔灵幻想 美术资源加密分析
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
這個(gè)游戲是用Unity3D引擎開(kāi)發(fā)的,加密方式是先對(duì)AssetBundle加密,然后在libmono.so中對(duì)Assembly-CSharp.dll進(jìn)行加密
0x00 在ida中先找到加密dll的地方
從上面的偽代碼可以看出只是進(jìn)行了簡(jiǎn)單的異或處理,在看看反匯編代碼
這個(gè)int EncryptNum[61]里面存放的就是加解密的key
0x01 分析完可以先對(duì)Assembly-CSharp.dll進(jìn)行解密了
//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找到對(duì)AssetBundle加密的地方(搜索WWW和AssetBundle等相關(guān)API去定位)
加密方式和對(duì)dll一樣也是異或加密,密鑰在GameConfig.EncryptNum里
0x03 對(duì)AssetBundle進(jìn)行解密
//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 解密完后,用提取工具進(jìn)行提取會(huì)發(fā)現(xiàn)一直在報(bào)錯(cuò)用WinHex看了一下,這些AssetBundle還被壓縮了
壓縮算法使用的是LZMA,這里我用了開(kāi)源的LZMA庫(kù)(支持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 propertiesbyte[] 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
總結(jié)
以上是生活随笔為你收集整理的【手游】魔灵幻想 美术资源加密分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 新农慕课python答案、第七周_中国大
- 下一篇: IPC设备产生呼吸效应