一次典型的解密unity3d

作者: 分类: 教程 时间: 2017-05-18 评论: 4条评论

申明:本文只是演示一种可能,不针对任何具体游戏。

有一天,同事说他玩的游戏被破解了,有很多外挂,论坛都吵翻了天。
因为自己也是游戏行业的,所以打算看看这个游戏是怎么回事。

下载了300M的apk,看看lib下面有些什么so。
1.png
有libmono.so、libunity.so,看来是unity3d的游戏。那么准备反编译Assembly-CSharp.dll。
3.png
2.png
什么情况,居然反编译不了。打开相同目录下的System.dll对比看一看。
4.png
照理说,正常的dll文件应该是MZ开头,看样子Assembly-CSharp.dll已经被加密过了。
上网搜一搜有一些常用的unity项目加密方式。搜到这么一篇文章:http://blog.sina.com.cn/s/blog_799860f90102vp0l.html
基本上呢就是修改libmono.so,定义自己的mono_image_open_from_data_with_name,从而实现自行加载ssembly-CSharp.dll文件。
按图索骥,逆向一下这个mono_image_open_from_data_with_name。
5.png
判断了Assembly-CSharp.dll的名字,并且getKey,继续跟踪。
6.png
EnDeCrypt的实现大概是这个样子。
7.png
一般来说加密算法应该不是自己写的吧,应该是通用算法。这个swapints没见过,可以用来作关键词。
用EnDeCrypt swapints在github搜一下。
8.png
哦,原来是rc4算法:https://github.com/hanxin1987216/DTL/blob/master/src/common/dtl/security/rc4.cpp#L28
接下来就用不上这个代码了,自己写一段代码来解密。
9.png
查看文件头正常,看来解密非常成功!继续尝试反编译。
10.png
现在可以慢慢研究外挂是什么情况了。

完整代码:https://gist.github.com/shuax/bde23c7dfa10c00c176983428f42b3de

总结:能用上的防护手段尽量都用上,简单的加密基本起不了什么作用,只要有心分分钟就解密了。

标签: 解密

已有 4 条评论

  1. lovepurple
    lovepurple

    哥们问一下 .so怎么逆向的?

    时间: 2016-07-05 17:45
    1. 耍下
      耍下

      ida

      时间: 2016-07-05 18:30
  2. 速度
    速度

    好难的样子~~~~

    时间: 2016-08-25 14:09
  3. 搜百谷
    搜百谷

    太高深了,跟不上节奏,只能凑热闹了 icon_smile.gif

    时间: 2017-06-09 11:58

评论已关闭