unity防反编译 windows平台加密dll
原文链接: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相关推荐
- 【Unity】防反编译之windows平台加密dll
功能取决于需求,在实现这功能之前,却有一个小小的插曲,有同学认为,并不需要去实现游戏加密,再怎样也会被破解,何必浪费精力.虽然这样说,但是我们所做的加密至少也会增加一点破解成本,不会让我们辛苦写的代码 ...
- 代码保护(二) 通过Java反编译工具测试加密效果
上节介绍了当下几款代码保护工具,本节介绍反编译工具对加密的软件进行破解. 反编译工具:jd-gui 打包工具:exe4j 脱壳工具:PEID 调试工具:OllyICE 一.未加密状态 测试过程: 1. ...
- 给大家推荐一个.Net的混淆防反编译工具ConfuserEx
给大家推荐一个.Net的混淆防反编译工具ConfuserEx. 由于项目中要用到.Net的混淆防反编译工具. 在网上找了很多.Net混淆或混淆防反编译工具,如.NET Reactor.Dotfusca ...
- 【Android 逆向】Android 逆向通用工具开发 ( Windows 平台运行的控制台应用程序类型 | 编译 Windows 平台运行的 Android 逆向程序 )
文章目录 一.Windows 平台运行的控制台应用程序类型 二.编译 Windows 平台运行的 Android 逆向程序 一.Windows 平台运行的控制台应用程序类型 hacktool 工程的类 ...
- Unity C# 反编译
前言 结合前篇:[反编译U3D]Decompile Unity Resources 修正 本篇说说如何查看unity项目(apk) 的源代码,前提是这个apk的代码未经过加密. 写这篇的目地就是看看别 ...
- python防反编译_Python - 浅谈Python的编译与反编译
1 - Python编译过程涉及的文件 py 源代码文件,由python.exe解释,可在控制台下运行,可用文本编辑器进行编辑: pyc 源代码文件经过编译后生成的二进制文件,无法用文本编辑器进行编辑 ...
- 安卓反编译揭秘,伪加密APK文件如何被破坏
2019独角兽企业重金招聘Python工程师标准>>> 1. 源码混淆 如上图,对Android APP的源码进行混淆后混淆器将代码中的所有变量.函数.类的名称加密为简短的英文字母代 ...
- 微软自带的防反编译工具dotfuscator.exe的使用
在园子里已经有很多高手写了关于MS的dotfuscator.exe使用方法.并且做了深入的剖析.自己对这个东西没有深入的理解,只是使用了一下而已 1.安装完vs之后在,在安装路径*:\Pro ...
- PB加密,PBD加密,杜绝PB程序反编译,PB加密工具
如下是一个pbd混淆加密之后用反编译打开时的效果图(混淆器已经开发了十年,其代码混淆保护效果一直满意,用图说话)工具自2009年开发,2010年发布测试版,经历1-2年的测试改进,至最早的客户从201 ...
最新文章
- c语言 迷宫深度遍历 算法,图的遍历迷宫生成算法浅析
- php复制mysql文件路径_与php 有关的问题 如何将上传的文件路径 保存到数据库中...
- linux如何给各节点时间同步,Linux 系统配置各个节点的时间一致性
- Apache Hudi x Pulsar Meetup杭州站火爆来袭,实践干货就等你来!
- 互联网拥塞控制终极指南
- ASP.NET MVC的过滤器笔记
- RabbitAdmin 实战
- 经典实战教程!java编译器eclipse
- Matt Speake
- it's just the beginning
- python jupyter
- 吊炸天!15岁成杀人犯,监狱里学编程,37岁获释后年薪70万
- Python帮助文档
- 浙大PAT 1051
- CALayer和Retina显示屏的高分辨率的支持
- Airtest 之 poco 避坑大法
- 公网地址和私网地址问题
- Keil 编译前后 自动将 hex 转 bin
- Altium Designer入门学习笔记和快捷键整理
- K-means 算法(基本用法)
热门文章
- c语言编写栈程序,栈的基本操作及C语言代码实现
- 【华为机试真题 Python实现】2022年4、5月高频机试题
- 教室占座小程序 微信小程序毕业设计开发
- C语言之函数调用流程
- unity android视频录制sdk,Unity中保存EveryPlay录制视频到本地的解决方案
- ECALL Switch/Ordinary模式
- Nordic SDK14.2 S332 multiprotocol例程iphone不能连接问题2种解决方案
- 谷歌浏览器ajax脚本出错,你好,用谷歌浏览器,发生脚本错误怎么处理。
- 基于Selenium+Python的web自动化测试框架
- 在R语言中操作PostgreSQL