担忧游戏包体遭破解?或外挂破坏游戏平衡?
游戏包体加固与反外挂服务 Safe,为你保驾护航!
在保障游戏安全与用户体验的双重挑战下,Unity Online Services(UOS)所提供的游戏包体加固与反外挂服务 Safe,正是为游戏开发者量身打造的解决方案。这项服务旨在全面加固游戏的安全防线的同时,更有效地抵御外挂威胁,以确保游戏的公平性和持久性。
游戏包加固 Safe
UOS Safe 是 Unity 资深团队打造的全方位、一站式的游戏安全解决方案,为您的游戏保驾护航。
UOS Safe 可以为您的 Unity 应用提供全面保护,以下是我们的核心保护措施:
C# 程序集加密:我们采用先进的加密技术,对程序集中的每个方法进行加密,确保加密后的程序无法被轻易 Dump 出原始内容,从而有效防止代码被逆向工程和篡改。
il2cpp 保护:针对使用 il2cpp 编译的 Unity 应用,我们提供对 global-metadata.dat 文件的加密或隐藏服务,防止直接 Dump 出 C# 程序集和原始的元数据信息。同时,我们还将校验 il2cpp 核心模块的内存完整性,确保核心逻辑不被篡改,维护游戏的正常运行。
资源加密:我们对 Unity Asset Bundle 资源文件进行了高强度加密处理,确保资源文件在传输和存储过程中的安全性,防止资源被非法提取和滥用。
反注入/调试:我们采用多重技术手段,防止外挂作者对游戏进行调试和分析。同时,我们禁止使用 Xposed、Frida 等外挂模块注入器,有效阻止外挂对游戏内存的恶意修改,确保游戏的公平性和稳定性。
教程操作步骤
接下来让我们跟着教程步骤开始学习,看看如何对你的 apk 文件进行安全加固吧!
1.准备工作
本教程将以 Unity 示例应用 BoatAttack.apk 为例,来展示 UOS Safe 的操作步骤。您不需要事先准备 Unity Editor 和任何项目,完成教程只需要下载提供好的示例 Demo——BoatAttack.apk。
大家可以根据下面提供的链接,或者点击文章最后的「阅读原文」按钮,进入 UOS Safe 的官网,进行下载 BoatAttack.apk。
https://uos.unity.cn/doc/safe/tutorial
2. 上传应用包
创建 UOS App
前往 UOS 官网( https://uos.unity.cn ),点击菜单栏的「应用」按钮,在弹出的页面上,点击「添加新的应用」按钮。
选择一个创建好的组织,输入项目的名字,点击「创建并启用」。
开启 Safe 服务
在「概览」页面,找到 Safe 服务,点击「免费试用」的按钮:
上传 APK 文件
在「Safe -> 应用列表」页面,点击上传应用的按钮。然后根据页面的要求,将你的 apk 文件上传,在这里我们把步骤一中已经下载好的 BoatAttack.apk 进行上传。
上传好 apk 文件后,界面如下所示:
在后续步骤中您可以先配置自己的 SHA-1,再对包体进行加固。如果不配置 SHA-1 签名的话,在创建加固任务时,您可以授权 UOS Safe 使用 UOS 提供的官方 SHA-1 进行加固,并对加固后的 apk 使用该 SHA-1 进行签名。
接下来先给大家介绍下第一种方式:使用官方的 SHA-1 加固包体的步骤!
使用官方 SHA-1
3. 创建加固任务
如果未配置 SHA-1 的话,您需要授权 UOS Safe 使用 UOS 提供的官方 SHA-1 对该包体创建加固任务。
点击【加固应用】的按钮,在弹出的窗口中,勾选【已知晓,采用官方 SHA-1 签名】,然后点击【确认】,则当前应用就会开始进行加固。
加固完成后,可以看到页面会显示【已加固】,还可以查看【加固记录】。
点击【加固记录】,可以查看某一次的加固的日志信息。
4. 下载加固后的包体
当您采用官方 SHA-1 进行加固时,您可以在加固任务完成之后,下载带签名的包体。
我们再给大家介绍下第二种方式:配置自己私有的 SHA-1 签名后,再对包体进行加固!
配置私有 SHA-1
如果是配置私有的 SHA-1,前面的步骤 1 和步骤 2 是一样的,大家接着进行步骤 3 的操作即可。
3. 配置签名证书 SHA-1
您需要准备好用于 apk 签名的证书。开发者们可以通过 Java Development Kit (JDK) 的 keytool 工具来管理自己证书的 SHA-1。
安装 JDK
由于 keytool 工具是随 JDK 一起提供的,所以我们需要先安装 JDK 。如果还没安装过的话,可以先通过下面的链接,下载适合你的操作系统的 JDK 的版本安装包。
在这里以下载 Windows 系统的安装包示例来讲解:
https://www.oracle.com/java/technologies/downloads
解压缩下载好的 jdk 压缩包文件:
配置 JDK 的环境变量
打开计算机的「属性」面板,找到「高级系统设置」,点击「环境变量」的按钮。找到「系统变量」中的「Path」变量,选择后点击「编辑」。
点击「新建」,将你电脑上的 JDK 文件的 bin 目录 , 填入环境变量中 ,然后点击「确定」即可。
使用 keytool 生成一个新的密钥对
可以通过以下指令生成用于 APK 签名的证书,生成的签名证书可以是 .jks 文件,也可以是 .keystore 文件,不同格式的文件,最后一步生成 APK 签名的方式也是不一样的。
keytool -genkeypair -alias
-keyalg RSA -keysize 2048 -validity 365 -keystore
以生成 .jks 文件为例:
在命令行工具窗口中输入上面的指令后,会提示用户需要「输入密钥库口令」,自己设置下密钥即可,输入密钥后窗口上不会显示输入的字符。最后一步询问是否正确,请输入字符「Y」。
当签名文件生成后,将会在你指定的文件夹路径下,看到对应的签名文件:mykeystore.jks。
以生成 .keystore 文件为例:
当执行完上面命令、签名文件生成后,进入你指定的文件夹路径下,会看到对应的签名文件:mykeystore.keystore。
查看 SHA-1
在已有签名证书的情况下,可以通过以下指令查看证书的 SHA-1 信息,先复制一下。
keytool -list -v -keystore
在签名配置栏输入 SHA-1
在创建加固任务前,先在「签名配置」中,点击「编辑」按钮,编辑并保存您的 SHA-1。
4. 创建加固任务
之前已经完成了 apk 的上传,现在就可以对该包体创建加固任务了,点击按钮可创建加固任务。
5. 下载加固后的包体
如果您在创建加固任务前上传了自己的 SHA-1,那么等待创建任务完成,就可以下载「加固应用包(未签名版)」。
在弹出的窗口中,点击「确认」按钮。
例如,下载的加固后的 apk 文件为:
6.APK 对齐
下载加固完的 apk 后,需要对 apk 做一下对齐。由于 zipalign 工具是 Android SDK 中的一个工具,它主要用于优化 APK 文件。所以要获取 zipalign,需要先安装 Android SDK。
安装 SDK
大家可以前往 Android Studio 官网下载并安装 Android Studio,它将自动包含 Android SDK。
https://developer.android.com/studio
下载完安装包之后,可自行根据页面的提示进行安装 Android Studio:
安装完 Android Studio 之后,找到 build-tools 文件夹下的 zipalign.exe 的文件路径,并进行复制。例如,我当前的目录为:
D:\AndroidStudio\build-tools\35.0.0\zipalign.exe
将 zipalign.exe 的路径添加到系统的环境变量中
和之前的 JDK 的环境变量的配置的步骤是一样的,在「编辑环境变量」窗口,点击「新建」,将你电脑上的 zipalign.exe 文件的目录,填入环境变量中,然后点击「确定」即可。
APK 对齐
执行以下命令,查看生成的 apk 包体是否对齐了(注意:在 Android11 后,不进行 4 字节对齐会导致安装失败)。
zipalign -c -v 4
<待检查apk路径>
如果 apk 已经对齐了,会在命令行中可看到类似下面的信息。
Verifying alignment of your-app.apk (4)
some_file.png (OK - compressed)
...
some_other_file.xml (OK - compressed)
Verification successful
如果 apk 未对齐,需要使用 zipalign 工具执行下面的命令,对 apk 包体进行对齐。
zipalign -p -f -v 4
<未对其的apk>
<对齐后的apk>
执行完上面命令后,可以在文件夹中看到生成的对齐后的 apk 文件。
7.APK 签名
如果您在创建加固任务前上传了自己的 SHA-1,您需要在 apk 包体对齐后,并对其进行签名。
如果之前使用的是 .jks 的方式签名密钥的,则执行下面命令来签名后,会生成一个新的签名后的文件。
.\apksigner sign --ks
--ks-key-alias
<签名对应的alias>
--out
<签名后apk路径>
<待签名apk路径>
执行完上面命令后,可以在当前的文件夹中看到生成的签名后的 apk 文件:
如果之前使用的是 .keystore 的方式签名密钥的,则执行下面命令来签名后,签名后的 APK会默认直接覆盖原文件。
所以 如果你想保留原 APK 文件 ,可以先复制它,然后对复制后的文件进行签名:
java -jar apksigner.jar sign --ks
--ks-key-alias
<签名对应的alias>
<待签名apk路径>
使用该命令时,建议先找到你的 apksigner.jar 文件所在的路径,例如,我当前的路径是: D:\AndroidStudio\build-tools\35.0.0\lib\apksigner.jar 。
为了方便操作,可以将之前步骤已经生成的对齐后待签名的 apk :AlignedBoatAttack2.apk,也放在这个 lib 路径下。
执行完命令后,在 lib 目录下可看到签名成功后的 apk 文件:
本期教程我们先分享讲解到这里啦,下一期再见!
Unity Online Services (UOS) 是一个专为游戏开发者设计的一站式游戏云服务平台,提供覆盖游戏全生命周期的开发、运营和推广支持。
了解更多 UOS 相关信息:
官网:https://uos.unity.cn
技术交流 QQ 群:823878269
公众号:UOS 游戏云服务
Unity 官方微信
第一时间了解Unity引擎动向,学习进阶开发技能
每一个“点赞”、“在看”,都是我们前进的动力