一次典型的解密unity3d

作者: 分类: 教程 时间: 2016-06-16 评论: 3条评论

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

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

下载了300M的apk,看看lib下面有些什么so。
1.png
有libmono.so,看来是unity3d的游戏。那么准备反编译Assembly-CSharp.dll。
3.png
2.png
什么情况,居然反编译不了。打开相同目录下的System.dll对比看一看。
4.png
照理说,正常的dll文件应该是MZ开头,看样子Assembly-CSharp.dll已经被加密过了。
上网搜一搜有一些加密方式。搜到这么一篇文章:http://blog.sina.com.cn/s/blog_799860f90102vp0l.html
基本上呢就是修改libmono.so,定义自己的mono_image_open_from_data_with_name。
按图索骥,逆向一下这个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
现在可以慢慢研究外挂是什么情况了。

总结:能用上的防护手段尽量都用上,简单的加密基本起不了什么作用。
标签: 解密

已有 3 条评论

  1. lovepurple
    lovepurple

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

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

      ida

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

    好难的样子~~~~

    时间: 2016-08-25 14:09 回复

添加新评论

icon_question.gificon_razz.gificon_sad.gificon_evil.gificon_exclaim.gificon_smile.gificon_redface.gificon_biggrin.gificon_surprised.gificon_eek.gificon_confused.gificon_cool.gificon_lol.gificon_mad.gificon_twisted.gificon_rolleyes.gificon_wink.gificon_idea.gificon_arrow.gificon_neutral.gificon_cry.gificon_mrgreen.gif