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

扫一扫,访问微社区

教程分享

关注:578

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

查看: 595|回复: 3

[自学总结] Unity3D项目程序加密1——在Unity3D里使用自己的dll

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

61

主题

75

帖子

441

积分

Rank: 4

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

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

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

x

如果稍微关注过这方面知识的朋友,应该知道做出来的项目是非常容易被反编译的,被反编译后你的所有资源和代码都将会毫无遮掩的呈现出来。由于.net本身没什么加密的措施,所以我们一般都是使用混淆代码的方式来对程序进行一定的加密。

接下来将会简单的讲一下我自己在Unity3D的程序加密做法。首先第一篇,我会简单的说明一下怎样在Unity3D里面使用dll动态链接库,然后第二篇会说明怎样对dll进行混淆。

开始第一篇的内容:

首先,我们需要新建一个类库项目,可以使用Visual Studio或者Monodevelop来做。我这里是使用vs2012来创建:

1.jpg

2.jpg

选择好项目类型、写好项目名称。

新生成的项目里面默认有一个Class1类

3.jpg

可以通过在解决方案资源管理器里面进行重命名改成自己想要的类名,比如我这里改成了Math3D

4.jpg

然后写一个简单的静态方法在里面。这里我写了个最简单的加法(Add)。也可以不写静态方法,写出普通的public方法,用的时候new对象出来调用该方法也可以。这和正常的C#编程没区别。

5.jpg

写好之后,在资源管理器里面选择“生成”,那么在项目的bin/debug 里面就会看到dll文件,比如我这个额项目就是AzhaoDll.dll

6.jpg

接下来在Unity3D里面创建你需要的项目,把刚才的dll文件随便放到项目的Assets文件夹里面。关于这个dll文件的存放位置,网上有些人说是必须放在插件文件夹里面,其实是不需要的,放在任意位置它都能被识别出来。当然,按照良好的项目路径习惯,我们建立一个专门放插件的文件夹来存放dll文件,也是合理的。

然后在Unity3D里面创建一个C#脚本,写一行简单的代码来调用我们刚才写的Math3D.Add方法。

7.jpg

这时会发现Math3D类不能识别,我们using AzhaoDll命名空间

8.jpg

然后在Unity3D里把脚本挂到摄像机上,运行,可以看到打印出正确的结果了,这就证明了dll已经被成功调用了。

9.jpg

回顾刚才我们做的一些小细节,在类库项目的Math3D类里面。我们默认的使用了AzhaoDll命名空间。那么假如我们不使用命名空间,或者使用其他的命名空间行不行?答案是可以的,命名空间可以任意的更改,如果不用命名空间,那么在调用的时候就不需要using,如果使用了其他命名空间,对应的using其命名空间就行了。
以下试试把命名空间删掉:

10.jpg

那么在Unity3D里面调用就直接可以用了:

11.jpg

运行的结果也是正常的:

12.jpg

当然,不太建议不使用命名空间,这样做一个说明,是因为本身创建的脚本默认没有使用命名空间,只是想说明如果不想麻烦,直接把Unity3D没有命名空间的脚本直接拿来编译也是可以的。

再次回顾细节,刚才我们使用的是原生的C#,假如我们需要在类库项目写调用Unity3D本身功能的方法怎样办呢?
在Unity3D的安装目录Editor\Data\Managed里面,找到UnityEditor.dll和UnityEngine.dll两个文件。

13.jpg

然后在类库项目里面添加引用,把这两个dll添加进来

14.jpg

15.jpg

这时候,我们就可以在类库项目里面using UnityEngine来使用Unity3D的方法了,比如我们这里简单写了个CreateGameObject方法,生成一个名字为“CreateByDll”的gameobject。

16.jpg

生成dll,放回Unity3D项目里,我们就可以调用这个方法:

17.jpg

运行,看到这个叫做“CreateByDll”的物体生成出来了。

18.jpg

通过以上的说明,我们会发现其实生成自己的dll在Unity3D里面用是很简单的事情。我们还可以添加其他自己写好的类进类库项目,然后生成dll来使用。

19.jpg

最后说一下注意事项了。
刚才生成的dll在Unity3D编辑器里面基本上都是能用的,但不一定能通过编译。有可能在编译成exe或者apk等时会报错。
需要注意的是,类库项目使用的.Net Framework版本。我自己的尝试是,使用.Net 4.0以上版本发布的dll,在Unity3D里面会编译不通过。所以我们可以用2.0或者3.0之类的版本来发布。

21.jpg

还有一些情况是某些现成的dll动态库是使用完整的.Net2.0来发布的,所以我们在编译的时候有可能需要选择完整的.Net 2.0来发布。

20.jpg

到了这一步,我们就可以把Unity3D的整个代码文件夹里面所有的脚本剪切到类库项目里面生成dll,然后放回Unity3D项目里面。这样别人就不能直接的编辑我们项目里面的代码了。

不过dll本身是不安全的,别人可以很容易看到里面的内容。下一篇博客我们再说明怎样去给dll做混淆。

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

回复

使用道具 举报

7日久生情
2493/5000
排名
598
昨日变化
1

25

主题

432

帖子

2493

积分

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

UID
120040
好友
0
蛮牛币
2569
威望
0
注册时间
2015-8-28
在线时间
1044 小时
最后登录
2017-2-25
发表于 2016-9-9 11:05:20 | 显示全部楼层
谢谢老大分享。一开始就碰到vs生成的dll,使用的是.NET framework4.0,和unity的不兼容,重新修改vs生成dll的目标框架为3.5,unity就可以使用了。
[发帖际遇]: alexander_ly 发帖时在路边捡到 1 蛮牛币,偷偷放进了口袋. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

5熟悉之中
582/1000
排名
6020
昨日变化
75

1

主题

326

帖子

582

积分

Rank: 5Rank: 5

UID
165382
好友
4
蛮牛币
413
威望
0
注册时间
2016-9-1
在线时间
113 小时
最后登录
2017-2-26
发表于 2017-1-10 09:11:35 | 显示全部楼层
谢谢楼主分享,长见识了

回复 支持 反对

使用道具 举报

排名
19903
昨日变化
21

0

主题

4

帖子

24

积分

Rank: 1

UID
200493
好友
0
蛮牛币
113
威望
0
注册时间
2017-1-11
在线时间
8 小时
最后登录
2017-1-21
发表于 2017-1-13 10:45:49 | 显示全部楼层
谢谢分享,学习学习

回复 支持 反对

使用道具 举报

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

本版积分规则

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