Работа с RPYC- и RPA-файлами

"Обфускация" (шифровка) исходного кода

Обфускация или запутывание кода — приведение исходного кода программы к виду, сохраняющему её функциональность, но затрудняющему анализ, понимание алгоритмов работы и модификацию при декомпиляции.

Рассмотрим один из самых простых методов шифрования кода. Для удаления исходного кода, но сохранения функциональности достаточно удалить .rpy-файлы, оставив лишь их .rpyc-версии. В .rpyc-файле содержится скомпилированный вариант кода вашего мода с нечитаемым для человека синтаксисом. Удаление .rpy на работоспособность мода не влияет.

Создание RPA-архива

Для создания rpa-архива можно воспользоваться:

  1. RPATool
  2. Самим Ren'Py

RPATool

Необходимо установить Python версии не ниже 3.1, при установке выберите опцию Добавить Python в PATH.

  1. Скачайте файл rpatool и положите в удобное для вас место.
  2. Нажмите ПКМ с зажатым Shift, выберите Открыть окно PowerShell здесь.
  3. Введите в консоль (путь без кавычек):
python rpatool -c название_архива.rpa путь_до_папки_с_файлами_без_кавычек

Если папок несколько, то разделяйте их пробелами, если нужно заархивировать лишь один файл, то не забудьте указать его расширение.

По окончании архивации появится соответствующий RPA-архив рядом с файлом rpatool.

Ren'Py

  1. Установите Ren'Py удобным для вас способом, запустите renpy.exe.
  2. Создайте новый проект в Ren'Py, дайте любое имя, любые настройки.
  3. Перейдите в папку проекта, создайте новый rpy-файл и откройте его.
  4. Пропишите:
init python:
    build.archive("archive", "all") # Создаём новый архив с названием 'archive'
    build.classify('game/**', 'archive') # Помещаем все файлы из папки 'game' в 'archive'

При необходимости вместо всех файлов можно указать конкретные расширения:

init python:
    # Изображения
    build.classify('game/**.jpg', 'archive')
    build.classify('game/**.png', 'archive')
    # Музыка
    build.classify('game/**.ogg', 'archive')
    build.classify('game/**.mp3', 'archive')
    # Не добавляем в архив все файлы с расширением .txt в папке и подпапках 'game'.
    build.classify("**.txt", None)

Также можем положить файлы в разные архивы:

init python:
    # Создаём архивы
    build.archive("images", "all")
    build.archive("music", "all")

    # Изображения в 'images'
    build.classify('game/**.jpg', 'images')
    build.classify('game/**.png', 'images')
    # Музыка в 'music'
    build.classify('game/**.ogg', 'music')
    build.classify('game/**.mp3', 'music')

Подробнее о параметрах при создании архива здесь.

  1. Переходим обратно в renpy.exe, выбираем проект, нажимаем Build Distributions.
  2. Выбираем PC: Windows and Linux, нажимаем Build.
  3. После окончания разархивируем архив с билдом проекта и находим rpa-архивы.

Интеграция RPA в БЛ

Создаём rpy-файл в папке мода с любым названием и прописываем:

init -9999 python:
    config.archives.append("Путь до rpa-архива без расширения")

Благодаря этому наш архив будет добавлен в список архивов, что исключает конфликт с возможными rpa-архивами из других модов. Пути к файлам после архивации остаются прежними, если вы сохранили ту же иерархию папок при архивации.

Декодирование RPYC

Для декодирования rpyc-файлов вы можете воспользоваться:

UnRen

  1. Скачайте архив и распакуйте bat-ник в директорию game.
  2. Запустите bat-файл и выберите Decompile rpyc files.
  3. По окончании нажмите любую клавишу для выхода или введите 1 в командную строку, чтобы вернуться.

Будут декодированы все rpyc в директории game, включая подпапки.

UnRpyc

Перейдите в releases и скачайте файл в зависимости от варианта декодирования:

  1. bytecode.rpyb
  2. un.rpy/un.rpyc

Скачайте rpyb-файл, положите в game\cache (с заменой, если необходимо) и запустите игру.

Или

Скачайте un.rpy или un.rpyc, положите в game и запустите игру.

После загрузки игры и запуска главного меню все rpyc-файлы, включая rpyc из модов Мастерской, будут декодированы.

Декодирование RPA

Для декодирования rpa-файлов вы можете воспользоваться:

UnRen

  1. Скачайте архив и распакуйте bat-ник в директорию game.
  2. Запустите bat-файл и выберите Extract RPA packages.
  3. По окончании нажмите любую клавишу для выхода или введите 1 в командную строку, чтобы вернуться.

Будут декодированы все rpa-архивы в директории game, включая подпапки.

UnRpa

  1. Необходимо установить Python версии не ниже 3.1, при установке выберите опцию Добавить Python в PATH.
  2. Поддерживается версия Windows не ниже Windows 8.
  1. Установите и разархивируйте в удобное для вас место.
  2. Запустите UnRPA Commander.exe.
  3. Нажмите Install UnRPA.
  4. В первом поле укажите полный путь до rpa-архива.
  5. Во втором поле укажите путь распаковки rpa-архива.
  6. Нажмите Extract All.

RPATool

Необходимо установить Python версии не ниже 3.1, при установке выберите опцию Добавить Python в PATH.

  1. Скачайте файл rpatool и положите в удобное для вас место.
  2. Нажмите ПКМ с зажатым Shift, выберите Открыть окно PowerShell здесь.
  3. Введите в консоль (пути без кавычек):
python rpatool -x путь_до_архива.расширение -o путь_до_папки_с_разархивированными_ресурсами