原文链接:http://gad.qq.com/college/articledetail/7194480

本文首发腾讯GAD开发者平台,未经允许,不得转载

功能取决于需求,在实现这功能之前,却有一个小小的插曲,有同学认为,并不需要去实现游戏加密,再怎样也会被破解,何必浪费精力。虽然这样说,但是我们所做的加密至少也会增加一点破解成本,不会让我们辛苦写的代码随意被人恶意修改。

下面还是看看具体的实现步骤吧,unity在打包后,会将所有的代码打进一个Assembly-CSharp.dll的文件里面,通过这个文件的反编译,就是详细看见里面的代码内容。我们需要做的就是将这个dll文件加密,让其无法被人反编译出来。其实网上已有很多的关于unity安卓包的加密博文,但是我在windows也踩了不少的坑,还是记录一下。参考链接:http://www.cppcourse.com/u3d-encryption.html

1.反编译测试

先安装一个反编译的工具.NET Reflector,可以在网上轻易找到。然后在通过这个工具打开我们之前一个测试包的Assembly-CSharp.dll,如下图所示,我们是可以完全看到我们所写的内容,这正是我们不想看到的结果。

2.mono源码下载

因为我们准备加密Assembly-CSharp.dll,但是不论我们使用什么加密方法,Assembly-CSharp.dll的文件就肯定有了变化,我们发布的程序就无法正常运行了。于是我们需要在加载Assembly-CSharp.dll文件时,对其解密,让它正常运行。好在unity基于开源的mono,我们只需要在mono里面添加一个解密步骤,再编译,替换掉之前没有解密步骤的mono,就能达到我们的目的。

mono下载链接:https://github.com/Unity-Technologies/mono

在mono项目中,我们根本所使用的版本找到自己所需要的分支,我这里使用的时候unity5.5版本,于是我直接切换到unity-5.5的分支,至于下载方式,使用git或者直接打包zip都可以。

3.mono添加解密

参考文章使用xxtea加密算法,于是我们也可以使用这个算法,来做我们的加密程序。有兴趣可以,单独查查相关的算法,我直接给下我们所需要的两个版本的链接,下载下来就可以了。c版用于mono解密添加,.net版用于unity加密添加,后面会详细说明。

c版xxtea算法:https://github.com/xxtea/xxtea-c

.net版xxtea算法:https://github.com/xxtea/xxtea-dotnet

在下载好xxtea后,复制xxtea.c和xxtea.h两个文件到开始下载的mono的源码里,具体位置在mono/mono/metadata文件夹下。

然后再用vs2010打开mono/msvc/mono.sln,将上面的xxtea的两个文件添加到libmono里,并找到libmono下的image.c,添加xxtea的头文件

然后再找到mono_image_open_from_data_with_name函数,这个函数就是mono去加载Assembly-CSharp.dll的入口,也就是说我们需要在这里添加我们说需要的解密函数。因为这里是针对unity的程序加密,我们完全可以针对单个名称来找到dll。对于xxtea加密的使用方法在github已经很清楚了。

4.mono再编译

根据参考文章的建议我们需要执行以下步骤,有人会纳闷为什么不使用vs2010或者其他方式编译,我试了很多,并没有成功。如果有人用任何其他方式编译成功,希望可以让我知道。

我这里用了54秒就编译成功,不错不错,生成的dll位置在mono\builds\embedruntimes\win64,同时建议在编译的时候,最好将32与64位的dll文件,你后面多半都会使用到的。

5.unity打包加密插件

对于怎样加密我们发布的unity程序更方便,我想过写一个外部工具,来加密发布后的程序,这样也是可以的。但是我也可以把加密写成了unity的一个小小插件,可以同步打包加密,免得再去打开另一个工具,万一忘了加密怎么办。

这个插件的功能非常简单,打包unity程序-->加密Assembly-CSharp.dll-->替换掉打包程序的mono.dll。

  [MenuItem("Build/win x86")]static void BuildWindows_x86(){BuildWindows(BuildTarget.StandaloneWindows);}[MenuItem("Build/win x64")]static void BuildWindows_x64(){BuildWindows(BuildTarget.StandaloneWindows64);}#region windows打包static void BuildWindows(BuildTarget _bt){string path = EditorUtility.SaveFilePanel(_bt.ToString(), EditorPrefs.GetString("BuildPath"), PlayerSettings.productName, "exe");if (string.IsNullOrEmpty(path))return;BuildPlayerOptions _buildOptions = new BuildPlayerOptions();_buildOptions.locationPathName = path;_buildOptions.scenes = EditorBuildSettingsScene.GetActiveSceneList(EditorBuildSettings.scenes);_buildOptions.target = _bt;BuildPipeline.BuildPlayer(_buildOptions);//加密EncryptAssemblyCSharp(path);//替换解密mono.dllReplaceMonoDll(path, _bt);int num = path.LastIndexOf("/");path = path.Substring(0, num);EditorPrefs.SetString("BuildPath", path);EditorUtility.OpenWithDefaultApp(path);}#endregion

在下面我就是使用到了开始下载的.net版的xxtea,对Assembly-CSharp.dll进行加密,并针x86和x64替换掉对应有解密步骤的mono.dll,这里有一个小技巧,因为我们插件在unity工程里面,它对mono.dll会有报错,于是我们直接更改了其后缀名,让unity放弃去读取这两个dll文件。反正我只需要这两个文件的内容重写在打包的mono.dll里。


然后点击工具栏的Build/win x86或者Build/win x64就可以直接打包加密程序了。

6.成果测试:

下面就是用.Net Reflector打开的Assembly-CSharp.dll,它已经不再可读了,好像已经达到我们的需求了

然后再运行游戏的exe,是可以正常的运行,windows平台加密的暂时算完结了。

unity防反编译 windows平台加密dll相关推荐

  1. 【Unity】防反编译之windows平台加密dll

    功能取决于需求,在实现这功能之前,却有一个小小的插曲,有同学认为,并不需要去实现游戏加密,再怎样也会被破解,何必浪费精力.虽然这样说,但是我们所做的加密至少也会增加一点破解成本,不会让我们辛苦写的代码 ...

  2. 代码保护(二) 通过Java反编译工具测试加密效果

    上节介绍了当下几款代码保护工具,本节介绍反编译工具对加密的软件进行破解. 反编译工具:jd-gui 打包工具:exe4j 脱壳工具:PEID 调试工具:OllyICE 一.未加密状态 测试过程: 1. ...

  3. 给大家推荐一个.Net的混淆防反编译工具ConfuserEx

    给大家推荐一个.Net的混淆防反编译工具ConfuserEx. 由于项目中要用到.Net的混淆防反编译工具. 在网上找了很多.Net混淆或混淆防反编译工具,如.NET Reactor.Dotfusca ...

  4. 【Android 逆向】Android 逆向通用工具开发 ( Windows 平台运行的控制台应用程序类型 | 编译 Windows 平台运行的 Android 逆向程序 )

    文章目录 一.Windows 平台运行的控制台应用程序类型 二.编译 Windows 平台运行的 Android 逆向程序 一.Windows 平台运行的控制台应用程序类型 hacktool 工程的类 ...

  5. Unity C# 反编译

    前言 结合前篇:[反编译U3D]Decompile Unity Resources 修正 本篇说说如何查看unity项目(apk) 的源代码,前提是这个apk的代码未经过加密. 写这篇的目地就是看看别 ...

  6. python防反编译_Python - 浅谈Python的编译与反编译

    1 - Python编译过程涉及的文件 py 源代码文件,由python.exe解释,可在控制台下运行,可用文本编辑器进行编辑: pyc 源代码文件经过编译后生成的二进制文件,无法用文本编辑器进行编辑 ...

  7. 安卓反编译揭秘,伪加密APK文件如何被破坏

    2019独角兽企业重金招聘Python工程师标准>>> 1. 源码混淆 如上图,对Android APP的源码进行混淆后混淆器将代码中的所有变量.函数.类的名称加密为简短的英文字母代 ...

  8. 微软自带的防反编译工具dotfuscator.exe的使用

    在园子里已经有很多高手写了关于MS的dotfuscator.exe使用方法.并且做了深入的剖析.自己对这个东西没有深入的理解,只是使用了一下而已      1.安装完vs之后在,在安装路径*:\Pro ...

  9. PB加密,PBD加密,杜绝PB程序反编译,PB加密工具

    如下是一个pbd混淆加密之后用反编译打开时的效果图(混淆器已经开发了十年,其代码混淆保护效果一直满意,用图说话)工具自2009年开发,2010年发布测试版,经历1-2年的测试改进,至最早的客户从201 ...

最新文章

  1. c语言 迷宫深度遍历 算法,图的遍历迷宫生成算法浅析
  2. php复制mysql文件路径_与php 有关的问题 如何将上传的文件路径 保存到数据库中...
  3. linux如何给各节点时间同步,Linux 系统配置各个节点的时间一致性
  4. Apache Hudi x Pulsar Meetup杭州站火爆来袭,实践干货就等你来!
  5. 互联网拥塞控制终极指南
  6. ASP.NET MVC的过滤器笔记
  7. RabbitAdmin 实战
  8. 经典实战教程!java编译器eclipse
  9. Matt Speake
  10. it's just the beginning
  11. python jupyter
  12. 吊炸天!15岁成杀人犯,监狱里学编程,37岁获释后年薪70万
  13. Python帮助文档
  14. 浙大PAT 1051
  15. CALayer和Retina显示屏的高分辨率的支持
  16. Airtest 之 poco 避坑大法
  17. 公网地址和私网地址问题
  18. Keil 编译前后 自动将 hex 转 bin
  19. Altium Designer入门学习笔记和快捷键整理
  20. K-means 算法(基本用法)

热门文章

  1. c语言编写栈程序,栈的基本操作及C语言代码实现
  2. 【华为机试真题 Python实现】2022年4、5月高频机试题
  3. 教室占座小程序 微信小程序毕业设计开发
  4. C语言之函数调用流程
  5. unity android视频录制sdk,Unity中保存EveryPlay录制视频到本地的解决方案
  6. ECALL Switch/Ordinary模式
  7. Nordic SDK14.2 S332 multiprotocol例程iphone不能连接问题2种解决方案
  8. 谷歌浏览器ajax脚本出错,你好,用谷歌浏览器,发生脚本错误怎么处理。
  9. 基于Selenium+Python的web自动化测试框架
  10. 在R语言中操作PostgreSQL