Шифрование APK для Godot 3.5.2-stable на Windows - создание своего шаблона экспорта.

Изображение яТ by Martina

Как зашифровать apk файл для своего проекта на Godot 3.5.2-stable.


Предисловие: Данная статья не гарантирует того, что ваш проект не может быть расшифрован и декомпилирован. Этот метод скорее защищает от легкого доступа к исходникам вашего проекта любым "кидди" скриптом. Нет идеального метода, который с гарантией защитит исходный код вашего проекта, особенно на движке с открытым исходным кодом, поэтому пускай повозятся.  cheeky

Начнем
Предположим, что у вас уже есть готовый проект на godot и установлен стандартный шаблон экспорта для android. 


Установка инструментария:

Чтобы создать свой кастомный шаблон экспорта на godot для android, вам понадобится:

Инструментарий и минимальный версии:

Для начала установим 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, чтобы не пришлось писать путь, вы можете к ярлыку добавить 
C:\Windows\System32\cmd.exe /k cd /d D:\Godot
Создайте папку 3.5.2-stable.
Запустите 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
ANDROID_SDK_ROOT -> C:\Users\*\AppData\Local\Android\Sdk
Так же добавьте в переменную PATH, путь до openssl
PATH -> C:\Program Files\OpenSSL-Win64\bin
 



Создание ключа
Теперь создайте ключ шифрования при помощи openssl.
Запустите cmd в папке вашего проекта godot и выполните.
openssl rand -hex 32 > godot.gdkey
Пример:
62f007affaf224af3d1097feb8e7bb2b8b3f06337a6ee2d2d187558794546ed5
Вы получили ключ шифрования стандарта AES-256.
 

 
Компиляция редактора 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 батника.
  1. для отладочной версии
  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
Осталось создать из них зашифрованный шаблон для экспорта.
Перейдите в директорию
D:\Godot\3.5.2-stable\platform\android\java
Скопируйте ярлык cmd в данную директорию, и в свойствах пропишите путь
/k cd /d D:\Godot\3.5.2-stable\platform\android\java
Запускаем cmd и выполняем команду для создания зашифрованного шаблона экспорта отладочной версии
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 комментариев

Оставить комментарий

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.