草庐IT

【Unity3D】初学加密技巧(反破解)

两水先木示 2023-10-09 原文

参考文章:

Unity3D研究院之Android加密DLL与破解DLL .SO(八十一) | 雨松MOMO程序研究院

Unity3D研究院之Android二次加密.so二次加密DLL(八十二) | 雨松MOMO程序研究院

Unity 2019.4.0 Mono 编译以及加密 windows版_雾凇|Songs的博客-CSDN博客

Windows 下使用 mingw+msys 交叉编译 Android Unity Mono_weixin_30449453的博客-CSDN博客 Unity3D安卓导出包加密学习--加密libmono.so_GrimRaider的博客-CSDN博客

 官方文章:

Compiling Mono on Windows | Mono

目录

一、C#代码加密解密

1.1 Window工程 

① Cygwin 安装Cygwin

2022年8月1日更新:安装Mono环境

② git clone unity-mono源码工程(网上说是需选对应Unity版本,未测试)

GitHub - Unity-Technologies/mono: Mono open source ECMA CLI, C# and .NET mplementation.

③ 使用Visual Studio 2019打开mono目录下的\msvc\mono.sln生成解密文件

2. Android工程(2022年9月9日更新已完成)

二、热更代码&资源加密

三、混淆代码


一、C#代码加密解密

1.1 Window工程 

        Window工程:打出exe包后得到如下截图结构文件

前提概要:
        需要加密的文件:
        xxx_Data\Managed\Assembly-CSharp.dll(核心dll)
        有加密就会有解密,解密过程放到读取解析dll时,文件:            MonoBleedingEdge\EmbedRuntime\mono-2.0-bdwgc.dll

开始进入window加密制作流程:主要参考Unity 2019.4.0 Mono 编译以及加密 windows版_雾凇|Songs的博客-CSDN博客

① Cygwin 安装Cygwin

下载setup-x86_64.exe安装软件,打开cmd,先cd到setup-x86_64.exe所在目录执行。

setup-x86_64.exe -P autoconf,automake,bison,gcc-core,gcc-g++,mingw64-i686-runtime,mingw64-i686-binutils,mingw64-i686-gcc-core,mingw64-i686-gcc-g++,mingw64-i686-pthreads,mingw64-i686-w32api,mingw64-x86_64-runtime,mingw64-x86_64-binutils,mingw64-x86_64-gcc-core,mingw64-x86_64-gcc-g++,mingw64-x86_64-pthreads,mingw64-x86_64-w32api,libtool,make,python,gettext-devel,gettext,intltool,libiconv,pkg-config,git,curl,wget,libxslt,bc,patch,cmake,perl,yasm,unzip

这个过程大概是10分钟左右,因为它要下载一堆所需的文件,耐心等待。途中会让你选择2个导出目录,默认C盘,可选其他盘符,安装完毕后,在第一个你选择的导出目录下会有Cygwin.bat(桌面上也会出现Cygwin64 Terminal应用图标)执行它会打开一个命令行窗口,代表正常完成。

2022年8月1日更新:安装Mono环境

https://www.mono-project.com/docs/getting-started/install/windows/

安装完毕后按wins键(左下角开始)输入mono搜出

输入mono --version执行成功,注意这个C:\Program Files\Mono并不是一个文件,而是Mono环境命令行窗体。

② git clone unity-mono源码工程(网上说是需选对应Unity版本,未测试)


GitHub - Unity-Technologies/mono: Mono open source ECMA CLI, C# and .NET mplementation.

 如果你是2019.4+的版本,那就选择上面的2019.4-branch-updates分支克隆,git命令如下:

git clone --recursive -b 2019.4-branch-updates https://github.com/Unity-Technologies/mono.git

 国内需要镜像clone才会比较快,所以镜像使用相关文章:

git clone 换源 / GitHub 国内镜像_面里多加汤的博客-CSDN博客_github国内镜像源

本人使用https://gitclone.com git命令更改为:

git clone --recursive -b 2019.4-branch-updates https://gitclone.com/Unity-Technologies/mono.git

克隆完成后,打开①安装的Cygwin命令窗体程序,cd到②克隆到本地的mono工程目录下,执行

cd d:/xxx/mono/

 区分64和32位window系统执行命令:

64位

./autogen.sh --prefix=$PREFIX --host=x86_64-w64-mingw32 --enable-msvc --disable-boehm

32位

./autogen.sh --prefix=$PREFIX --host=i686-w64-mingw32 --enable-msvc --disable-boehm

 等待编译完成,它会将mono工程进行编译并输出到Cygwin.bat文件所在目录下的\home\计算机名\mono文件夹下【Cygwin.bat是Cygwin命令窗体程序执行bat文件】

Cygwin目录:Cygwin.bat所在目录
mono目录:Cygwin目录\home\计算机名\mono\

③ 使用Visual Studio 2019打开mono目录下的\msvc\mono.sln生成解密文件

实在找不到就搜索文件mono.sln

生成过程中或许有些报红,但感觉没影响完成后去拿到我们需要的文件:

如果失败了会看不到下面的文件,只有mono-2.0-dac-bdwgc.dll,我们要是的mono-2.0-bdwgc.dll

mono目录下\msvc\build\bdwgc\x64\bin\Release\mono-2.0-bdwgc.dll

将它替换掉MonoBleedingEdge\EmbedRuntime\mono-2.0-bdwgc.dll

加密dll代码:

string path = @"E:\xxx_Data\Managed\Assembly-CSharp.dll";
byte[] bytes = File.ReadAllBytes(path);
bytes[0] += 1;

//如果你想验证一下是否加密成功,可使用dnSpy神器
//string outPath = @"E:\xxx_Data\Managed\Assembly-CSharp_dec.dll";
string outPath = path;
File.WriteAllBytes(outPath, bytes);

加密后的dll只是暂时无法被破解,因为解密方法就在mono-2.0-bdwgc.dll,别人只要破解这个dll就知道解密方法,然后解密你已经加密的dll。

Unity3D研究院之Android二次加密.so二次加密DLL(八十二) | 雨松MOMO程序研究院

雨松篇均是安卓dll加密和解密,安卓解密文件是libmono.so,iOS尚未接触。

2. Android工程(2022年9月9日更新已完成)

【Unity】安卓加密编译libmono.so成功&失败记录(unity2017已成功编译)_两水先木示的博客-CSDN博客

① 、② 与Window工程相同
③  使用Cygwin命令窗体程序执行

cd d:/xxx/mono/
./external/buildscripts/build_runtime_android.sh

完成后搜出libmono.so,将它放入.apk文件里的\lib\armeabi-v7a\下(如果lib还有其他的armxxx目录也要对应放入arnxxx\libmono.so文件,libmono.so也是会有对应lib一样的armxxx目录的,不要选错文件放入。

我测试现状安卓工程还未尝试过编译通过,window工程使用下方文章提供的mono工程测试可行,但安卓测试去编译build_runtime_android.sh失败Unity 代码加密 Mono 编译与加密 windows版_雾凇|Songs的博客-CSDN博客_unity代码加密

失败记录: 

最关键的一点是git clone下的mono工程是必须完整的,不要去zip下载git工程,我就是嫌git clone命令行下载太慢,直接翻墙下载zip,结果搞了很久还是各种报错缺失文件,检查发现直接去下载zip,文件缺失了很多,比如:mono-unity-2021.2-mbe-pre-upgrade\external\bdwgc文件夹是空的!后续更新能够正常编译的情况。

编译Unity使用的libmono.so - K1_大大 - 博客园

最大问题在于所有文章都没有介绍2017之后的libmono.so的制作,基本上都有build_runtime_android.sh和 build_runtime_android_x86.sh 而且里面的内容还挺多,改的东西也很多,反正这x86.sh 只在2017之前的版本看到过,而且内容也相对一致,由于github克隆一致存在网络问题,而且没有找到相关的库提供,暂时性放弃,基本上可以看上面的K1_大大文章实现编译libmono.so解密文件。哎,github的链接引用库真的是醉了,还有国内的墙,不稳定的镜像,这一切都阻止着我继续下去,但不用担心,Unity自从出了IL2CPP,C#层加密应该是稳妥的。

二、热更代码&资源加密

没啥好说的,就是简单的二进制文件加密,基本上都是assetbundle包加密吧,加密后解密正常加载ab包即可,哎,反正就是做个样子,毕竟解密都在客户端。

三、混淆代码

暂未研究

有关【Unity3D】初学加密技巧(反破解)的更多相关文章

  1. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  2. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  3. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  4. unity---接入Admob - 2

    目录1.AdmobSDK下载地址2.将下载好的unityPackagesdk导入到unity里​编辑 3.解析依赖到项目中

  5. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  6. [Vuforia]二.3D物体识别 - 2

    之前说过10之后的版本没有3dScan了,所以还是9.8的版本或者之前更早的版本。 3d物体扫描需要先下载扫描的APK进行扫面。首先要在手机上装一个扫描程序,扫描现实中的三维物体,然后上传高通官网,在下载成UnityPackage类型让Unity能够使用这个扫描程序可以从高通官网上进行下载,是一个安卓程序。点到Tools往下滑,找到VuforiaObjectScanner下载后解压数据线连接手机,将apk文件拷入手机安装然后刚才解压文件中的Media文件夹打开,两个PDF图打印第一张A4-ObjectScanningTarget.pdf,主要是用来辅助扫描的。好了,接下来就是扫描三维物体。将瓶

  7. 动漫制作技巧如何制作动漫视频 - 2

    动漫制作技巧是很多新人想了解的问题,今天小编就来解答与大家分享一下动漫制作流程,为了帮助有兴趣的同学理解,大多数人会选择动漫培训机构,那么今天小编就带大家来看看动漫制作要掌握哪些技巧?一、动漫作品首先完成草图设计和原型制作。设计草图要有目的、有对象、有步骤、要形象、要简单、符合实际。设计图要一致性,以保证制作的顺利进行。二、原型制作是根据设计图纸和制作材料,可以是手绘也可以是3d软件创建。在此步骤中,要注意的问题是色彩和平面布局。三、动漫制作制作完成后,加工成型。完成不同的表现形式后,就要对设计稿进行加工处理,使加工的难易度降低,并得到一些基本准确的概念,以便于后续的大样、准确的尺寸制定。四、

  8. ruby - 使用 AES 的 Rails 加密,过于复杂 - 2

    我在加密来self正在使用的第三方供应商的值时遇到问题。他们的指令如下:1)Converttheencryptionpasswordtoabytearray.2)Convertthevaluetobeencryptedtoabytearray.3)Theentirelengthofthearrayisinsertedasthefirstfourbytesontothefrontofthefirstblockoftheresultantbytearraybeforeencryption.4)EncryptthevalueusingAESwith:1.256-bitkeysize,2.25

  9. ruby - 易于初学者理解的 Ruby 库 - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭3年前。Improvethisquestion我正处于学习Ruby的阶段,我想查看一些小型库的源代码以了解它们是如何构建的。我不知道什么是小型图书馆,但希望SO能推荐一些易于理解的图书馆来学习。因此,如果有人知道一两个非常小的库,这是新手Rubyists学习的好例子,请推荐!我想使用Manveru'sInnatelib,因为它试图保持在2000LOC以下,但我还不熟悉其中经常使用的Ruby速记。也许大约100-5

  10. ruby - 如何使用私钥加密完全加密 Ruby 中的数据? - 2

    首先,关于我们系统的一些信息,它基本上是建筑行业的电子招标解决方案。所以:列表项我们的系统有多家公司每个公司都有多个用户每家公司可以创建多个拍卖然后其他公司可以为可用的拍卖提交他们的出价。一个出价包含数百或数千个单独的项目,我们只需要加密这些记录的“价格”部分。我们面临的问题是,我们的大客户不希望我们知道投标价格,至少在投标过程中是这样,这是完全可以理解的。现在,我们只是通过对称加密对价格进行加密,因此即使价格在数据库中有效加密,他们担心的是我们拥有解密价格的key。因此,我们正在研究某种形式的公钥加密系统。以下是我们对解决方案的初步想法:当一家公司注册时,我们会使用OpenSSL为其

随机推荐