开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

教程分享

关注:617

当前位置:游戏蛮牛 技术专区 教程分享

查看: 679|回复: 3

[自学总结] Unity3D项目程序加密2——对dll进行混淆

[复制链接]  [移动端链接]
4四处流浪
441/500
排名
8479
昨日变化

61

主题

75

帖子

441

积分

Rank: 4

UID
130505
好友
0
蛮牛币
617
威望
0
注册时间
2015-12-1
在线时间
31 小时
最后登录
2016-9-23
发表于 2016-1-14 12:13:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x

之前一篇文章已经简单的介绍了怎样把自己写的代码打包成dll动态链接库,然后在里面用。那么接下来的事情似乎就很简单了,我们在Unity3D里面写脚本,到最后完成时,把核心的代码剪切出去打包成dll文件再放回项目里面。这样似乎别人就不能直接修改你的代码了。事实真的是这样吗?

这里假设我们在Unity3D里面写的代码抽象成这样一个Test类,里面包含了公开和私有的变量,有自带的Start方法、Update方法和OnGUI方法,还有public、private和protected方法。虽然说用抽象类代表了项目里面实际的类,但为了可以看得到代码效果,所以在方法里面大概写了一些简单的打印的命令。

1.jpg

把这个Test类放到上次的类库项目里面,然后生成dll,放到Unity3D项目里面:

2.jpg

其实要看到dll里面的内容,很多软件都可以,我们这里就拿Unity3D自带的MonoDevelop来看。找到引用里面的dll文件,这里是AzhaoDll.dll。

3.jpg

可以直接浏览到dll里面的内容,看看刚才那个Test类,是不是每一个变量、每一个方法都一字不缺的显示出来了?

4.jpg

还有上次写的Math3D方法,也能直接看得到。

5.jpg

dll就是这么不保险的一个东西,所以我们要引入这一篇文章的内容:对Dll进行混淆。
.Net的代码混淆器有好几种,比如VS自带的DotFuscator、小巧的Reactor,或者相对比较专业的xeoncode。
这里我使用了xeoncode 2010版本。

界面如下:

7.jpg

来到Application,可以添加dll文件:

8.jpg

选择需要混淆的dll:

9.jpg

然后在Project可以看到dll里面的类、变量和方法。看到某些变量和方法前面打了勾,这是需要混淆的意思,这个可以自己调整,后面再说:

10.jpg

在Output里面选择一个输出的路径:

11.jpg

然后点击右下角的Build Application,就可以发布混淆好的dll。

12.jpg

把混淆好的dll放回Unity3D项目,就可以看到,这次的dll里面出现了很多随机数字和字母组成的变量名称和方法名称:

13.jpg

仔细的看,可以看出,刚才打钩了的方法和变量都变成乱码名称,然后在方法调用里面也会发生一些变化,除了名称改变以后,代码本身也会发生一些变化,没有之前那么直接的显示出调用的情况,如果是复杂的调用,将会出现goto来代替了。
这样一来,就算是写代码的人自己也很难看得明白这些代码了。当然如果真的非常有心的逐个变量方法名称去对应,逐个goto调用去查找,也还是可以还原的,但估计很少人会话这个功夫去做这种事情。到这里,混淆的目的就达到了。

不过现在拿这个dll去实际运行,会发现出现很多问题的,比如Unity3D自带的方法Start、Update之类的是不会执行的。这是因为混淆的时候把一些不应该混的东西给混淆了。

那么接下来就说一下注意的事项:

1、public和protected的变量和方法,默认是不会混淆的,你也可以手动的把勾打上,让它混淆,不过由于这些是被外部调用的变量和方法,你混淆了它的名称,那么外部调用的时候是必然出错的。
2、像Unity3D的Start、Update、OnGUI等MonoBehaviour自带的方法,都是具有特定含义的,虽然是私有方法,但也不应该混淆,不然到了该执行的时候就不会执行了。
3、某些有特定含义的名称,或者有用到使用字符串来识别变量或者方法名称时,这些方法和字符串都不应该混淆,不然也会出现调用不到的情况。

14.jpg

以上是简单的使用方法,具体的情况可能要到真正用的时候才会出现,所以就随机应变了。

转自:http://liweizhaolili.blog.163.com/blog/static/1623074420145110502776/


回复

使用道具 举报

7日久生情
2923/5000
排名
467
昨日变化
3

33

主题

528

帖子

2923

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
120040
好友
0
蛮牛币
2904
威望
0
注册时间
2015-8-28
在线时间
1208 小时
最后登录
2017-5-26
发表于 2016-1-14 13:24:42 | 显示全部楼层
谢谢楼主分享。将来也许用得上。

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1266/1500
排名
1012
昨日变化

1

主题

208

帖子

1266

积分

Rank: 6Rank: 6Rank: 6

UID
5077
好友
4
蛮牛币
2770
威望
0
注册时间
2013-10-7
在线时间
273 小时
最后登录
2017-3-2
发表于 2016-1-14 18:36:43 | 显示全部楼层
不错。讲得很详细~

回复

使用道具 举报

7日久生情
2923/5000
排名
467
昨日变化
3

33

主题

528

帖子

2923

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
120040
好友
0
蛮牛币
2904
威望
0
注册时间
2015-8-28
在线时间
1208 小时
最后登录
2017-5-26
发表于 2016-10-1 08:43:46 | 显示全部楼层
像Unity3D的Start、Update、OnGUI等MonoBehaviour自带的方法,都是具有特定含义的,虽然是私有方法,但也不应该混淆.

----------------------------------------------------------------------
这些方法不混淆,还是感觉象裸奔啊。
因为自己的代码总是要在这些方法里调用,人家顺着这些藤,就能摸着咱的瓜啊……

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

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