当前位置:网站首页>【Unity3D】初学加密技巧(反破解)
【Unity3D】初学加密技巧(反破解)
2022-08-02 07:16:00 【两水先木示】
参考文章:
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
目录
② 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生成解密文件
一、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工程
① 、② 与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包即可,哎,反正就是做个样子,毕竟解密都在客户端。
三、混淆代码
暂未研究
边栏推荐
- 查看僵尸进程
- 机器学习笔记--数学库
- Chain Of Responsibility
- Please tell me, how to write Flink SQL and JDBC sink into mysql library and want to create an auto-incrementing primary key
- 修改apt-get源为国内镜像源
- SQL server 2014 怎么一次性导出多个查询结果?
- MySQL error 1055 solution: [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains
- 主流定时任务解决方案全横评
- 概率论与数理统计
- (2022牛客多校五)D-Birds in the tree(树形DP)
猜你喜欢
mysql操作入门(四)-----数据排序(升序、降序、多字段排序)
Mysql报错2003 解决办法 Can‘t connect to MySQL server on ‘localhost‘ (10061)
概率论与数理统计
MySQL - index explanation
(2022牛客多校五)D-Birds in the tree(树形DP)
pnpm install出现:ERR_PNPM_PEER_DEP_ISSUES Unmet peer dependencies
MySQL - low level settings
【CV】OpenVINO安装教程
Mysql error 2003 solution Can 't connect to Mysql server on' localhost '(10061).
redis-高级篇
随机推荐
【CV】OpenVINO安装教程
论文理解:“Cross-Scale Residual Network: A GeneralFramework for Image Super-Resolution,Denoising, and “
带手续费买卖股票的最大利益[找DP的状态定义到底缺什么?]
apt & apt-get commands
MySQL - index explanation
LeetCode 283. 移动零(简单、数组)
埋点开发流程
spark architecture
MySQL database design specification
(2022 Niu Ke Duo School 5) B-Watches (two points)
神经元网络
Go implements distributed locks
Link with Game Glitch
Splunk Filed Alias 字段改名
LeetCode 2312. 卖木头块
查看端口号占用
初探形式化方法基本原理
How to export multiple query results at once in SQL server 2014?
View zombie processes
PLSQL Developer安装和配置