当前位置:   article > 正文

某热门单击手游lua解密.md

libhegame.so
前言

以前搞过这游戏。自从某版本的签名验证加强之后基本很难搞了。今天看了下,
lua采用加密方式 EVP_aes_128_cbc()+gzip压缩,用openssl-android的静态库,
(导出函数全没了)不过不影响分析。

正文

关键库libhegame.so。IDA载入。查看j_j_AAssetManager_open 交叉引用
836057-20161008230421660-938128333.png
上述代码assets目录下读取文件到内存。并返回内存指针
接着向上层层追踪,最终来到这方法。
836057-20161008230450660-539444034.png
f5查看伪代码,分析
836057-20161008230513239-897330777.png
836057-20161008230520645-1172174208.png
查看方法sub_6EE84:
836057-20161008230551989-1429689865.png
经过整理关键代码:

  1. void aesDecrypt(unsigned char* data,const char*path)
  2. {
  3.     unsigned char keyData[16] = { 0xE90x740x7D0x920xCC0x320x2E0x7D0x110x2E0x7C0x340x510xD70xB30x6A };
  4.     EVP_CIPHER_CTX ctx;
  5.     const   EVP_CIPHER *cipher;
  6.     cipher = EVP_aes_128_cbc();
  7.     unsigned char iv[EVP_MAX_IV_LENGTH];
  8.     memcpy_s(iv, 16, data, 16);
  9.     EVP_CIPHER_CTX_init(&ctx);
  10.     int ret = EVP_DecryptInit_ex(&ctx, cipher, nullptr, keyData, iv);
  11.     assert(ret == 1);
  12.     unsigned char* result = new unsigned char[datasize - 16];
  13.     memset(result, 0, datasize);
  14.     int len1 = 0;
  15.     ret = EVP_EncryptUpdate(&ctx, result, &len1, (data + 16), datasize - 16);
  16.     assert(ret == 1);
  17.     int len2 = 0;
  18.     if (datasize % 16 != 0)
  19.     {
  20.         int isSuccess = EVP_DecryptFinal_ex(&ctx, result + len1, &len2);
  21.         if (!isSuccess)
  22.         {
  23.             printf("EVP_DecryptFinal_ex() failed\n");
  24.             EVP_CIPHER_CTX_cleanup(&ctx);
  25.         }
  26.         result += len1;
  27.         assert(ret == 1);
  28.         return;
  29.     }
  30.     Byte* undata = new Byte[BUF_SIZE];
  31.     uLong nodata = BUF_SIZE;
  32.     zdecompress(result, datasize - 16, undata, &nodata);
  33.     remove(path);
  34.     FILE* file = fopen(path, "wb");
  35.     fwrite(undata, nodata, 1, file);
  36.     fclose(file);
  37.     delete[] undata;
  38.     delete[] data;
  39.     printf("解密成功:%s\n",path);
  40.     return;
  41. }

测试结果:
836057-20161008230701301-841929409.jpg

 结束语

由于采用aes对称加密算法,加密解密密匙一样的,修改完加密回去应该没问题,需要注意的是是否存在lua文件校检。

转载于:https://www.cnblogs.com/xiaobaiyey/p/5940557.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/438988
推荐阅读
相关标签
  

闽ICP备14008679号