Как зашифровать apk файл для своего проекта на Godot 3.5.2-stable.
Предисловие: Данная статья не гарантирует того, что ваш проект не может быть расшифрован и декомпилирован. Этот метод скорее защищает от легкого доступа к исходникам вашего проекта любым "кидди" скриптом. Нет идеального метода, который с гарантией защитит исходный код вашего проекта, особенно на движке с открытым исходным кодом, поэтому пускай повозятся.
Начнем
Предположим, что у вас уже есть готовый проект на godot и установлен стандартный шаблон экспорта для android.
Установка инструментария:
Чтобы создать свой кастомный шаблон экспорта на godot для android, вам понадобится:Инструментарий и минимальный версии:
- Android Studio 2021.2.0+
- python 3.6.1+
- SDK 30.0.3+
- NDK 23.2 +
- CMake 3.10+ по желанию.
- scons
- OpenSSL для Windows
- Git bash
Для начала установим Android Studio.
Tools > SDK Manager
Во вкладке SDK Platforms установите платформу не ниже 29 API level, например 32.
Перейдите на вкладку SDK Tools установите 30.0.3, 32.0.0, 33.0.2 и NDK (Side by side) 23.2.8568313, CMake и Command-Line Tools, по желанию.
Установите Python.
Затем откройте cmd и установите scons
pip install scons
Клонирование исходников
Теперь создайте папку (Godot) на одном из локальных дисков для клонирования исходного кода godot, так как для создания кастомных шаблонов требуется пересобрать редактор.Поместите в эту папку для удобства ярлык cmd, чтобы не пришлось писать путь, вы можете к ярлыку добавить
Создайте папку 3.5.2-stable.C:\Windows\System32\cmd.exe /k cd /d D:\Godot
Запустите cmd.
Выполните клонирование исходного кода godot
После завершения процесса клонирования, во избежание ошибок при компиляции, проверьте корректность клонированияgit clone https://github.com/godotengine/godot.git cd 3.5.2-stable git checkout 3.5.2-stable
git status
Установка зависимостей
Теперь у нас готов весь инструментарий и исходный код.Предварительно не забудьте установить переменные среды для SDK и NDK.
Win+R
rundll32 sysdm.cpl,EditEnvironmentVariables
ANDROID_NDK_ROOT -> C:\Users\*\AppData\Local\Android\Sdk\ndk\23.2.8568313
Так же добавьте в переменную PATH, путь до opensslANDROID_SDK_ROOT -> C:\Users\*\AppData\Local\Android\Sdk
PATH -> C:\Program Files\OpenSSL-Win64\bin
Создание ключа
Теперь создайте ключ шифрования при помощи openssl.Запустите cmd в папке вашего проекта godot и выполните.
Пример:openssl rand -hex 32 > godot.gdkey
Вы получили ключ шифрования стандарта AES-256.62f007affaf224af3d1097feb8e7bb2b8b3f06337a6ee2d2d187558794546ed5
Компиляция редактора godot с ключом шифрования
Перейдите в папку к исходникам.Вот здесь важный момент, перед компиляцией вы должны каждый раз устанавливать переменную окружения при шифрованиии для каждой архитектуры.
cd 3.5.2-stable
set SCRIPT_AES256_ENCRYPTION_KEY="62f007affaf224af3d1097feb8e7bb2b8b3f06337a6ee2d2d187558794546ed5"
Где:scons -j8 platform=android target=release tools=no android_arch=arm64v8 module_script_encryption_key="62f007affaf224af3d1097feb8e7bb2b8b3f06337a6ee2d2d187558794546ed5"
- -j8 — количество ядер CPU для обработки
- platform — Операционная система
- target — тип сборки
- tools — набор инструментов, немного снижает вес.
- adnro_arch — архитектура
- ну и сам ключ шифрования.
В случае если Вам нужно собрать для всех типов и архитектур предлагаю создать 2 батника.
- для отладочной версии
- для релизной версии
Например: создайте в папке D:/Godot батник build_debug_android.bat с таким содержимым
@echo off
cd 3.5.2-stable
set SCRIPT_AES256_ENCRYPTION_KEY=62f007affaf224af3d1097feb8e7bb2b8b3f06337a6ee2d2d187558794546ed5
call scons -j8 platform=android target=release_debug tools=no android_arch=armv7 module_script_encryption_key=62f007affaf224af3d1097feb8e7bb2b8b3f06337a6ee2d2d187558794546ed5
set SCRIPT_AES256_ENCRYPTION_KEY=62f007affaf224af3d1097feb8e7bb2b8b3f06337a6ee2d2d187558794546ed5
call scons -j8 platform=android target=release_debug tools=no android_arch=arm64v8 module_script_encryption_key=62f007affaf224af3d1097feb8e7bb2b8b3f06337a6ee2d2d187558794546ed5
set SCRIPT_AES256_ENCRYPTION_KEY=62f007affaf224af3d1097feb8e7bb2b8b3f06337a6ee2d2d187558794546ed5
call scons -j8 platform=android target=release_debug tools=no android_arch=x86 module_script_encryption_key=62f007affaf224af3d1097feb8e7bb2b8b3f06337a6ee2d2d187558794546ed5
set SCRIPT_AES256_ENCRYPTION_KEY=62f007affaf224af3d1097feb8e7bb2b8b3f06337a6ee2d2d187558794546ed5
call scons -j8 platform=android target=release_debug tools=no android_arch=x86_64 module_script_encryption_key=62f007affaf224af3d1097feb8e7bb2b8b3f06337a6ee2d2d187558794546ed5
REM Если нужно, сделайте переход на другой бантик, например для компиляции релизной версии
cd ..
android_build_release.bat
Батник для релизной версии будет отличаться только типом сборки. Создайте android_build_release.bat с таким содержимым:Дождитесь завершения процесса компиляции.@echo off cd 3.5.2-stable set SCRIPT_AES256_ENCRYPTION_KEY=62f007affaf224af3d1097feb8e7bb2b8b3f06337a6ee2d2d187558794546ed5 call scons -j8 platform=android target=release tools=no android_arch=armv7 module_script_encryption_key=62f007affaf224af3d1097feb8e7bb2b8b3f06337a6ee2d2d187558794546ed5 set SCRIPT_AES256_ENCRYPTION_KEY=62f007affaf224af3d1097feb8e7bb2b8b3f06337a6ee2d2d187558794546ed5 call scons -j8 platform=android target=release tools=no android_arch=arm64v8 module_script_encryption_key=62f007affaf224af3d1097feb8e7bb2b8b3f06337a6ee2d2d187558794546ed5 set SCRIPT_AES256_ENCRYPTION_KEY=62f007affaf224af3d1097feb8e7bb2b8b3f06337a6ee2d2d187558794546ed5 call scons -j8 platform=android target=release tools=no android_arch=x86 module_script_encryption_key=62f007affaf224af3d1097feb8e7bb2b8b3f06337a6ee2d2d187558794546ed5 set SCRIPT_AES256_ENCRYPTION_KEY=62f007affaf224af3d1097feb8e7bb2b8b3f06337a6ee2d2d187558794546ed5 call scons -j8 platform=android target=release tools=no android_arch=x86_64 module_script_encryption_key=62f007affaf224af3d1097feb8e7bb2b8b3f06337a6ee2d2d187558794546ed5
Компиляция зашифрованного шаблона экспорта
Теперь у нас есть зашифрованная сборка для всех архитектур и типов, которые находятся в директорииОсталось создать из них зашифрованный шаблон для экспорта.D:\Godot\3.5.2-stable\platform\android\java\lib\libs
Перейдите в директорию
Скопируйте ярлык cmd в данную директорию, и в свойствах пропишите путьD:\Godot\3.5.2-stable\platform\android\java
Запускаем cmd и выполняем команду для создания зашифрованного шаблона экспорта отладочной версии/k cd /d D:\Godot\3.5.2-stable\platform\android\java
для релизной соответственноgradlew assembleDebug
Готовые шаблоны будут находиться в директорииgradlew assembleRelease
D:\Godot\3.5.2-stable\platform\android\java\lib\build\outputs\aar
Полученный выходной зашифрованный шаблон экспорта godot-lib.release.aar и godot-lib.debug, ими вы можете заменить ваши стандартные шаблоны в проекте godot.
\android\build\libs\release \android\build\libs\debug
Проверка шаблона экспорта
Теперь откройте свой проект на godot.Проект > Экспортировать..
Перейдите во вкладу Скрипт. Режим экспорта GDScript > Зашифрованный и укажите ключ 62f007affaf224af3d1097feb8e7bb2b8b3f06337a6ee2d2d187558794546ed5
Перейдите во вкладку Параметры и установите флаг "Использовать настраиваемую сборку".
Теперь godot зашифрует скрипты с вашим ключом, а исполняемый файл будет знать с каким ключом их выполнять.
Заключение:
Как упоминалось ранее, этот метод не гарантирует 100% защиту, но вы всегда можете доработать этот метод, например: добавлением соли к хешу, это добавит сложности к дешифровке, ну или что-нибудь более сложное.Подводные камни при компиляции:
Если вы столкнулись при компиляции с какими либо ошибками и хотите полностью пересобрать проект, используйте команды для очисткиscons platform=android target=release android_arch=armv7 --clean scons platform=android target=release android_arch=arm64v8 --clean scons platform=android target=release android_arch=x86 --clean scons platform=android target=release android_arch=x86_64 --clean
Если вы обнаружили, что, некоторые файлы плохо клонировались сделайте сброс и докачайте их командой
git reset --hard
Статья "Шифрование APK для Godot 3.5.2-stable на Windows - создание своего шаблона экспорта." содержит 0 комментариев