美文网首页
通过hook解密Uinity3D的加密dll

通过hook解密Uinity3D的加密dll

作者: oraclex | 来源:发表于2015-06-14 19:08 被阅读0次
一、背景和意义

Unity3D是手游领域的主要游戏引擎,越来越多游戏对其dll进行加密。目前我知道有3种方法对其进行解密:
1.直接使用ida反编译libmono.so,寻找关键函数处的解密代码
2.使用gdb附加,gcore,在core文件中寻找相关MZ头和尾巴original filename:assembly-csharp.dll,掐头去尾
3.对libmono.so的关键函数进行hook,这也是本文的内容
p.s.代码中的*不见了,自己对照源码

二、工具和教程

本方法使用cydia substrate进行hook
官网:http://www.cydiasubstrate.com/
相关教程:
http://blog.csdn.net/guiguzi1110/article/category/2519125
http://www.gitzx.com/android-cydiasubstrate/
http://www.colordancer.net/blog/2015/03/16/substrateforandroid/

三、相关函数

mono框架里有许多涉及到dll的函数,但是mono框架本身较为复杂,请自行阅读mono源码,本文选取的函数是
<pre><code>
MonoClass *
mono_class_from_name (MonoImage image, const char name_space, const char *name)
</code></pre>
该函数在class.c文件中,第一个参数是dll镜像的结构体,其定义在marshall.internal.h中。该结构的第三个成员,也就是+8的位置,是一个指向dll->rawdata的指针,也就是dll的内容。该结构的第4个成员,是rawdata的大小。

四、实现

介绍完工具和hook目标,就该开始行动了。
这里并不能直接像之前教程那样写一个apk,我自己测试过,不行,原因未知。
受论坛里“水波摇曳”的过签名验证的启发,本人采用了另一办法,也就是我写了一个so,在so里调用cydia的库文件libsubtrate.so里的函数,MSGetImageByName,MSFindSymbol,MSHookFunction,来进行hook。然后在java层loadlibrary我的so.
so里的关键函数如下
<pre><code>
int mymonoclass(void* image,const char name_space, const char name) {
int imageAddr=
(int
)(image+8);
int imageLen=(int)(image+12);
if(imageLen!=2590208 & imageLen!=647680){//mscorlib.dll和unityengine.dll的大小
LOGE(name_space);
LOGE(name);
printf("发现DLL");
printf("imageAddr:%p",imageAddr);
printf("imageLength:%d\n",imageLen);
}
//LOGE(imageAddr);
//LOGE(imageLen);
return oldmonoclass(image,name_space,name);
}
</code></pre>

相关文章

  • 通过hook解密Uinity3D的加密dll

    一、背景和意义 Unity3D是手游领域的主要游戏引擎,越来越多游戏对其dll进行加密。目前我知道有3种方法对其进...

  • HOOK了MessageBoxW函数

    说明 该函数通过消息hook注入dll到目标程序,之后通过inline hook 了messageboxw函数的头...

  • 加密通信的基本概念

    1.公钥密码体制:公钥、私钥、加密解密算法。 加密:通过加密算法和公钥对内容进行加密,得到密文。 解密:通过解密算...

  • iOS逆向实战--012:对称加密

    对称加密方式:明文通过密钥加密得到密文,密文通过密钥解密得到明文。 定义 需要对加密和解密使用相同密钥的加密算法。...

  • nodejs加密与解密

    加密分类 可逆加密和不可逆加密 不可逆加密: 加密后不可解密,只能通过碰撞密文以极小的概率解密; 可逆加密: 加密...

  • Android数据加密之MD5加签、RSA加密

    Android中常见的加签以及加密 通过MD5进行加签,RSA通过公钥加密,私钥解密(私钥解密、公钥解密) 为什么...

  • RSA非对称加密算法

    RSA算法,经典非对称加密算法,通过生成公钥 私钥 进行加密解密 公钥加密 私钥解密 反之 私钥加密 公钥...

  • iOS之密码学

    一、非对称加密 - RSA : +公钥加密,私钥解密; + 私钥加密,公钥解密; + 只能通过因式分解来破解 二、...

  • Android使用Socket对大文件进行加密传输

    前言 数据加密,是一门历史悠久的技术,指通过加密算法和加密密钥将明文转变为密文,而解密则是通过解密算法和解密密钥将...

  • java 自定义点击、键盘事件

    首先必要的:c++ dll编写与加载c++ windows平台的Hook掌握hook与dll编写。 学习jni,因...

网友评论

      本文标题:通过hook解密Uinity3D的加密dll

      本文链接:https://www.haomeiwen.com/subject/hvzjqttx.html