发新帖

通过hook解密Uinity3D的加密dll

[复制链接]
38643 18
本帖最后由 oraclex 于 2015-6-14 22:43 编辑

潜水已久,我也发一篇,转载请注明出处哦

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

二、工具和教程三、相关函数
mono框架里有许多涉及到dll的函数,但是mono框架本身较为复杂,请自行阅读mono源码,本文选取的函数是

MonoClass
mono_class_from_name (MonoImage *
image, const char *name_space, const char * name)
该函数在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里的关键函数如下

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);
}之后就是dump了
本人博客http://www.jianshu.com/users/037714dc1e00/latest_articles


举报 使用道具

回复

精彩评论18

xin    发表于 2015-6-14 19:58:31 来自手机  | 显示全部楼层
顶,先占个位。

举报 使用道具

回复 支持 反对
963726021    发表于 2015-6-14 22:10:17 | 显示全部楼层
小白学习下。。虽然看不太懂。。只会简单的修改

举报 使用道具

回复 支持 反对
ceshi999    发表于 2015-6-15 01:35:27 | 显示全部楼层
最好有做好的so。。

举报 使用道具

回复 支持 反对
听鬼哥说故事    发表于 2015-6-15 09:39:27 | 显示全部楼层
前排支持下~~~~~~~~~

举报 使用道具

回复 支持 反对
Sarkozy    发表于 2015-6-15 09:56:29 | 显示全部楼层
前排支持,感谢楼主为Unity逆向发展做出的贡献

举报 使用道具

回复 支持 反对
beijingshi1    发表于 2015-6-15 10:01:56 | 显示全部楼层
严重支持。。。。。

举报 使用道具

回复
casogrta    发表于 2015-6-15 12:54:12 | 显示全部楼层
不得了, 等这个教学好久了!
感谢LZ分享

举报 使用道具

回复 支持 反对
ctp518    发表于 2015-6-15 15:37:34 | 显示全部楼层
能上图配合文字说明就更完美了

举报 使用道具

回复 支持 反对
单翅的天使ylj    发表于 2015-6-15 18:14:19 | 显示全部楼层
Mark、

举报 使用道具

回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表