Unity3d游戏代码保护
现在的游戏项目如果达到一定规模、项目比较创新方竞争对手、项目严重依赖客户端代码那么代码保护还是尽量做,如果不是也没必须瞎折腾。
Unity常见代码保护机制:
1.重新编译mono,修改mono_image_open_from_data_with_name 函数。
优点:原理简单、顺带还可以做DLL更新(android)。
缺点:易破解、编译麻烦、可能存在版本问题以及兼容性问题。
2.同上,但是隐藏加密函数,这个可以在网上搜索下,是第一种方案的加强版。
优点:比第一种略微安全、防小白静态分析。
缺陷:同上。
3.同上,编译同时优化处理so。(参见常用so加固方案)
优点:应该可以防住大部分人。
缺点:同上外加难度大。
4.引入自己的辅助so库,hook mono_image_open_from_data_with_name 函数,自己的so库做好保护机制。
优点:不编译libmono.so、防静态分析。
缺点:安全性转移到自己的so库了。
5.il2cpp,(没钱的产品推荐的方法),其实多数产品使用il2cpp已经可以达到很好的保护了,只是不能热更dll所以很多android产品还是放弃了。
优点:很难还原较完整的代码、加较好的性能。
缺点:android热更以及android稳定性。
6.dll混淆,这个其实在使用mono情况下都应该做。
7.采用第三方加固,(有钱的产品大力推荐的方法),都赚钱了自己还是别瞎折腾了,当然有自己的研发部例外。
缺点展示:
1.mono编译的形式就不做太多介绍了,ida直接看Mono代码静态分析。
2.hook mono_image_open_from_data_with_name 这种方式看到王者荣耀等腾讯sdk是这么做的。
(这个实验仅供学习展示了这种方式的一个小小的缺点)
原理清楚了,破解也从原理入手,只要抢先hook mono_image_open_from_data_with_name ,那么代码还是乖乖的到你这来了。
3.il2cpp 直接上工具:https://github.com/Jumboperson/Il2CppDumper 可以导出头文件和代码偏移。
Unity3d游戏代码保护的更多相关文章
- Unity3D游戏开发初探—2.初步了解3D模型基础
一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被. ...
- Unity3D游戏在iOS上因为trampolines闪退的原因与解决办法
http://7dot9.com/?p=444 http://whydoidoit.com/2012/08/20/unity-serializer-mono-and-trampolines/ 确定具体 ...
- 第一章-第二题Unity3D游戏引擎相关--By林培文
1) 此类软件是什么时候开始出现的, 这些软件是怎么说服你(陌生人)成为他们的用户的? 他们的目标都是盈利么? 他们的目标都是赚取用户的现金么?还是别的? 2004年,Unity3D诞生于丹麦哥本 ...
- 【安卓安全】ARM平台代码保护之虚拟化
简介:代码的虚拟化即不直接通过CPU而是通过虚拟机来执行虚拟指令.代码虚拟化能有效防止逆向分析,可大大地增加了代码分析的难度和所需要的时间,若配合混淆等手段,对于动静态分析有着较强的防御能力. 背景: ...
- 将Unity3D游戏移植到Android平台上
将Unity3D游戏移植到Android平台是一件很容易的事情,只需要在File->Build Settings中选择Android平台,然后点击Switch Platform并Build出ap ...
- unity3d游戏无法部署到windows phone8手机上的解决方法
今天搞了个unity3d游戏,准备部署到自己的lumia 920上,数据线连接正常,操作正常,但是“build”以后,始终无法部署到手机上,也没有在选择的目录下生产任何相关文件.(你的系统必须是win ...
- Unity3D游戏UI开发经验谈
原地址:http://news.9ria.com/2013/0629/27679.html 在Unity专场上,108km创始人梁伟国发表了<Unity3D游戏UI开发经验谈>主题演讲.他 ...
- Unity3D游戏开发之连续滚动背景
Unity3D游戏开发之连续滚动背景 原文 http://blog.csdn.net/qinyuanpei/article/details/22983421 在诸如天天跑酷等2D游戏中,因为游戏须要 ...
- Unity3D游戏开发从零单排(四) - 制作一个iOS游戏
提要 此篇是一个国外教程的翻译,尽管有点老,可是适合新手入门. 自己去写代码.debug,布置场景,能够收获到非常多.游戏邦上已经有前面两部分的译文,这里翻译的是游戏的最后一个部分. 欢迎回来 在第一 ...
随机推荐
- 013.CI4框架CodeIgniter数据库操作之:查询数据库,并让数据以数组的方式返回查询结果
01. 我们在CI4框架中的Model文件夹新建一个User_model.php的文件,使用的是getResultArray,表示并让数据以数组的方式返回查询结果,代码如下: <?php nam ...
- 关于http的两种上传方法
http传输数据GET和POST的两种方法: 1.Post传输数据时,不需要在URL中显示出来,而Get方法要在URL中显示. 2.get方式传递的参数可以在URL上看见,安全性不高,反之post安全 ...
- swarm docker-compose.yml NFS 搭建LNMP
列表: 172.16.0.40 (swarm-master) 172.16.0.160 (swarm-worker) 172.16.0.170 (swarm-worker) 1 ...
- iphone 面试题(转)
转]iPhone 面试题解答 2011-07-20 0:51 转载自 492437598 最终编辑 492437598 1.main() { int a[5]={1,2,3,4,5}; ...
- nginx常用配置解析
1.常用公共参数(一般放在http下面,虽然很多参数都支持server和location) keepalive_timeout 60; #单位为s keepalive_request 2; #设 ...
- java se
集群 数据库集群.服务器集群.内存 java特性 封装:封装细节和封装变化(可能发生需求变更的代码必须要封装,set方法除了完成赋值功能外,还能处理额外的任务,记录访问的人) 继承 多态 访问限定符 ...
- ES6 之 对象属性的可枚举性和遍历
1.Object.getOwnPropertyDescriptor() 解释:获取对对象属性的描述对象. let obj = { foo: 123 }; console.log(Object.getO ...
- Flink Window窗口机制
总览 Window 是flink处理无限流的核心,Windows将流拆分为有限大小的"桶",我们可以在其上应用计算. Flink 认为 Batch 是 Streaming 的一个特 ...
- opencv人脸检测
找了一张自己喜欢的<超人前传>剧照 其中的xml分类器需要到https://github.com/opencv/opencv/tree/master/data/haarcascades去下 ...
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring JDBCTemplate简介
Spring 框架针对数据库开发中的应用提供了 JDBCTemplate 类,该类是 Spring 对 JDBC 支持的核心,它提供了所有对数据库操作功能的支持. Spring 框架提供的JDBC支持 ...