Unity 加密解密那些事(转载)
来源:互联网 发布:centos zip 压缩 编辑:程序博客网 时间:2024/06/05 09:53
解密无非就为了 修改游戏功能数据、提取游戏资源、加入自己想加的广告...
加密就是保护游戏不被恶意修改,我经常看到有人说:”加什么密,你以为自己写的代码很NB?见不得人?“。
我只想说,加密并不是不想让别人看到我的游戏逻辑代码,而是不想别人去恶意的修改自己做的游戏罢了...
先说下关于Unity C#代码部分的加密(Android和IOS有时间再细说),很多人说混淆,虽然有几个混淆插件CodeGuard、CryptoObfuscator、de4dot...可以用用,但有混淆就有反混淆(de4dot基本都可以搞定),有加壳就有脱壳,有加密就有解密...加密只是提高了门槛提高了难度,而解密只是时间的长短而已。
Unity下对C#保护措施并不是很多,加壳就别想了,混淆也有限制,混了和没混一样。
除了混淆,我们也可以尝试其他的保护措施,比如下面的方式:
Unity是基于Mono的,地球人都知道...它是开源的 代码下载:[url=]https://github.com/Unity-Technologies/mono[/url]
直接下Zip包(注意Tag版本与开发用的Unity版本要相同)
编译自己的Unity项目,找到 /Data/Managed/Assembly-CSharp.dll ,对它进行加密,可以自己写个小程序,把Assembly-CSharp.dll转换成字节流byte[],然后对byte[]加密。
下面是一些常用的加密(效验)算法:
* 散列:MD5、SHA、SHA3、RIPEMD、Tiger、Whirlpool、CRC32、Adler32
* 对称:Base64、DES、3DES、AES、RC、Rijndael、TripleDES、PBE、3-way、IDEA、MARS、Serpent、SAFER、Blowfish、Twofish、Tea、Skipjack、Camellia、Cast、Gost
* 非对称:RSA、Elgamal、Diffie-Hellman、Rabin、ECDsa、Ecc
若对以上算法不了解的可以参看下面两个开源加密类库(谷歌度娘也可以的)
Bouncy Castle(C#和Java版) 代码下载:[url=]https://github.com/bcgit/[/url] 官网地址:[url=]http://www.bouncycastle.org[/url]
Crypto++(C++版) 代码下载:[url=]http://sourceforge.net/projects/cryptopp/files/cryptopp/[/url] 官网地址:[url=]http://www.cryptopp.com/[/url]
有人说.net自带了安全类库,确实是在System.Security.Cryptography下有一些常用的算法,虽然没有上面的类库全,但足以平常使用。
其C#源码也在Mono开源项目中 位置在 /mcs/class/corlib/System.Security.Cryptography/ 若不想了解加密算法可乎略,直接引用里面的方法即可。
如果有闲心的话可以写一个属于自己的加密算法...
此处滤过Hook或是反汇编调试Mono加载Assembly-CSharp.dll的部分...
接着找到 /mono/metadata/image.c 查看下面两个方法
第一个方法mono_image_open_from_data_full内实际调用了mono_image_open_from_data_with_name
第二个方法mono_image_open_from_data_with_name的第一个参数char *data这个指针指向运行时Assembly-CSharp.dll的内存地址,
可在该方法内添加或调用对data解密的算法,然后将解密后的data再赋给datac
关于MonoImage这个结构体,它的定义是typedef struct _MonoImage MonoImage; 而_MonoImage这个结构体,它的定义在 /mono/metadata/metadata-internals.h 中
最后就是编译Mono了,编译部分我就不说了自行参看官方说明
该方法虽然是修改Mono内核,偏底层了些,但并不是破解不了,只是要比反混淆的难度高那么一丢丢...
加密就是保护游戏不被恶意修改,我经常看到有人说:”加什么密,你以为自己写的代码很NB?见不得人?“。
我只想说,加密并不是不想让别人看到我的游戏逻辑代码,而是不想别人去恶意的修改自己做的游戏罢了...
先说下关于Unity C#代码部分的加密(Android和IOS有时间再细说),很多人说混淆,虽然有几个混淆插件CodeGuard、CryptoObfuscator、de4dot...可以用用,但有混淆就有反混淆(de4dot基本都可以搞定),有加壳就有脱壳,有加密就有解密...加密只是提高了门槛提高了难度,而解密只是时间的长短而已。
Unity下对C#保护措施并不是很多,加壳就别想了,混淆也有限制,混了和没混一样。
除了混淆,我们也可以尝试其他的保护措施,比如下面的方式:
Unity是基于Mono的,地球人都知道...它是开源的 代码下载:[url=]https://github.com/Unity-Technologies/mono[/url]
直接下Zip包(注意Tag版本与开发用的Unity版本要相同)
编译自己的Unity项目,找到 /Data/Managed/Assembly-CSharp.dll ,对它进行加密,可以自己写个小程序,把Assembly-CSharp.dll转换成字节流byte[],然后对byte[]加密。
下面是一些常用的加密(效验)算法:
* 散列:MD5、SHA、SHA3、RIPEMD、Tiger、Whirlpool、CRC32、Adler32
* 对称:Base64、DES、3DES、AES、RC、Rijndael、TripleDES、PBE、3-way、IDEA、MARS、Serpent、SAFER、Blowfish、Twofish、Tea、Skipjack、Camellia、Cast、Gost
* 非对称:RSA、Elgamal、Diffie-Hellman、Rabin、ECDsa、Ecc
若对以上算法不了解的可以参看下面两个开源加密类库(谷歌度娘也可以的)
Bouncy Castle(C#和Java版) 代码下载:[url=]https://github.com/bcgit/[/url] 官网地址:[url=]http://www.bouncycastle.org[/url]
Crypto++(C++版) 代码下载:[url=]http://sourceforge.net/projects/cryptopp/files/cryptopp/[/url] 官网地址:[url=]http://www.cryptopp.com/[/url]
有人说.net自带了安全类库,确实是在System.Security.Cryptography下有一些常用的算法,虽然没有上面的类库全,但足以平常使用。
其C#源码也在Mono开源项目中 位置在 /mcs/class/corlib/System.Security.Cryptography/ 若不想了解加密算法可乎略,直接引用里面的方法即可。
如果有闲心的话可以写一个属于自己的加密算法...
此处滤过Hook或是反汇编调试Mono加载Assembly-CSharp.dll的部分...
接着找到 /mono/metadata/image.c 查看下面两个方法
MonoImage *mono_image_open_from_data_full (char *data, guint32 data_len, gboolean need_copy, MonoImageOpenStatus *status, gboolean refonly){ return mono_image_open_from_data_with_name (data, data_len, need_copy, status, refonly, NULL);}MonoImage *mono_image_open_from_data_with_name (char *data, guint32 data_len, gboolean need_copy, MonoImageOpenStatus *status, gboolean refonly, const char *name){ MonoCLIImageInfo *iinfo; MonoImage *image; char *datac; if (!data || !data_len) { if (status) *status = MONO_IMAGE_IMAGE_INVALID; return NULL; } datac = data; if (need_copy) { datac = g_try_malloc (data_len); if (!datac) { if (status) *status = MONO_IMAGE_ERROR_ERRNO; return NULL; } memcpy (datac, data, data_len); } image = g_new0 (MonoImage, 1); image->raw_data = datac; image->raw_data_len = data_len; image->raw_data_allocated = need_copy; image->name = (name == NULL) ? g_strdup_printf ("data-%p", datac) : g_strdup(name); iinfo = g_new0 (MonoCLIImageInfo, 1); image->image_info = iinfo; image->ref_only = refonly; image->ref_count = 1; image = do_mono_image_load (image, status, TRUE, TRUE); if (image == NULL) return NULL; return register_image (image);}
第一个方法mono_image_open_from_data_full内实际调用了mono_image_open_from_data_with_name
第二个方法mono_image_open_from_data_with_name的第一个参数char *data这个指针指向运行时Assembly-CSharp.dll的内存地址,
可在该方法内添加或调用对data解密的算法,然后将解密后的data再赋给datac
关于MonoImage这个结构体,它的定义是typedef struct _MonoImage MonoImage; 而_MonoImage这个结构体,它的定义在 /mono/metadata/metadata-internals.h 中
最后就是编译Mono了,编译部分我就不说了自行参看官方说明
该方法虽然是修改Mono内核,偏底层了些,但并不是破解不了,只是要比反混淆的难度高那么一丢丢...
0 0
- Unity 加密解密那些事(转载)
- Unity 加密解密那些事
- Unity3D 游戏加密解密那些事
- 【转载】md5加密解密
- unity xml加密解密源码
- [Unity优化]数据的加密与解密
- Unity数据的加密与解密
- 【转载】----C++加密解密库之选择
- 加密芯片和芯片解密那些事:如何防止电子产品抄袭
- 网页的加密解密之8位二进制ASCII码加密解密方法(转载)
- 加密解密那点事
- [Unity]Unity那些事 持续更新
- base64加密解密算法 C实现(转载)
- Java与.NET DES加密解密互转[转载]
- IOS中RSA的加密解密(转载)
- iOS AES128 CBC No Padding加密解密 (转载)
- 【转载】利用java自带的base64实现加密、解密
- 加密解密
- 为什么很多看起来不是很复杂的网站,比如 Facebook 需要大量顶尖高手来开发?
- Eclipse中常用的快捷键
- sicily 1176. Two Ends
- a标签中有点击(onclick)事件
- HIVE 1.1.0 启动时报错: Unsupported major.minor version 51.0
- Unity 加密解密那些事(转载)
- matlab getframe()
- C++ atof函数
- hive升级测试记录
- Struts2返回JSON数据的具体应用范例
- POJ 2031:Building a Space Station 最小生成树
- Android性能专项测试之Memory Monitor工具
- leetcode6
- c++中的构造函数