Resource Cryptor - шифрование файлов клиента

EasyGameProtection

Software Developer
VIP
Сообщения
329
Розыгрыши
0
Репутация
101
Реакции
192
Баллы
385
Resource Cryptor - небольшая утилита для шифрования read-only файлов клиента c целью затруднения их воровства/модификации/etc.

Поддерживаемые ОС :
--- Resource Cryptor GUI: Windows 7 [x64] и выше (требуется )
--- Модули приложений (DLL): Windows 7 [x32/x64] и выше (скоро Linux и macOS)

Скачать :

Краткий гайд по использованию:
(перед всеми манипуляциями делайте резервные копии файлов!)
1) Для простоты описания в качестве примера будем считать, что исполняемый файл вашего приложения называется MyApp.exe
2)
и запустите Resource Cryptor
3)
Перейдите на вкладку: Tools -> Attach Lib
4)
Нажмите Select File и выберите исполняемый файл вашего приложения — MyApp.exe
5)
Нажмите Attach Lib
6)
В каталоге "modules/windows" есть 2 библиотеки (resource-cryptor-x32.dll и resources-cryptor-x64.dll). В зависимости от вашего приложения (x32 или x64) поместите соответствующую библиотеку рядом с MyApp.exe
7)
Перейдите на вкладку Project, нажмите Create New Project и выберите, где его сохранить
8) Нажмите Open Project и выберите созданный проект
9) Переходим на вкладку: Project -> Executable Files
10)
Нажимаем Add File и выбираем исполняемый файл MyApp.exe
11)
Перейдите на вкладку Encryption и перетащите файлы вашего приложения, которые вы хотите зашифровать
12) Нажмите Encrypt и дождитесь завершения процесса
13) В конце процесса для каждого исходного файла будет создано по 2 дополнительных файла
Например, если мы зашифруем somefile.txt, то в конце процесса рядом с ним будут созданы somefile.txt.rcmetadata и somefile.txt.xxxxx.origin (где xxxxx
— какое-то число)
> somefile.txt — уже зашифрованный файл
> somefile.txt.rcmetadata — метаданные для клиентского модуля, этот файл следует оставить рядом с зашифрованным
> somefile.txt.xxxxxx.origin — исходный незашифрованный файл (на случай, если вы забыли сделать резервную копию)
14) Файлы *.xxxxxx.origin можно удалить (если у вас уже сохранены оригиналы), остальные файлы должны остаться

На этом процесс интеграции завершен, вы можете запустить приложение MyApp.exe

>>> И самое главное! <<<
Никогда никакой криптор не даст 100% гарантии того, что файлы не будут вскрыты.
Это не спасет от опытного человека, перед которым стоит задача что-то стащить из вашего клиента.


 
Последнее редактирование:

Resource Cryptor - небольшая утилита для шифрования "read-only" файлов клиента c целью затруднения их воровства/модификации/etc.
Для клиентских модулей зависимости отсутствуют. Для работы самого приложения требуется
Сейчас это на стадии тестов. Реализован самый минимум функционала для проверки жизнеспособности решения.
Уже тестировалось на одном сервере (но не L2).
Предложения/пожелания/багрепорты само собой приветствуются.

To Do List:
  • Добавление защиты против основных способов извлечения оригинального содержимого зашифрованных файлов. На стадии тестов это еще не реализовано. Полностью от этого, разумеется, защититься невозможно.
  • Добавление возможности патчить бинарники игры прямо из приложения, чтобы избавиться от CFF Explorer
  • Реализация возможности править настройки проекта непосредственно из GUI
  • Добавление нескольких "режимов" шифрования файлов, чтобы балансировать между производительностью/потреблением RAM/надежностью
  • Писать метаданные непосредственно в зашифрованный файл, чтобы избавиться от файлов *.rcmetadata

Краткий гайд по использованию:
(перед всеми манипуляциями делайте резервные копии файлов!)
1. Качаем с приложением
2. Качаем
3. В архиве с приложением есть папка с клиентскими модулями. В нашем случае требуется либа resource-cryptor-lib-x32.dll
4. Открываете в CFF Explorer свой L2.exe (если нет возможности патчи L2.exe, то можно выбрать любую DLL библиотеку в клиенте, которую можно патчить).
5. Переходим к пункту "Import Adder"
6. Нажимаем "Add" и выбираем либу resource-cryptor-lib-x32.dll
7. В окошке "Exported Functions" выбираем "ExportStub" и нажимаем "Import By Name"
8. Нажимаем "Rebuild Import Table"
9. Сохраняем результат (File -> Save), закрываем CFF Explorer
10. Помещаем либу resource-cryptor-lib-x32.dll рядом с вашим L2.exe
11. Запускаем Resource Cryptor
12. Нажимаем "Create new project" и выбираем куда его сохранить. Будет создан шаблонный ini файл проекта
13. Открываем любым редактором созданный ini файл и в секции "EXECUTABLE_FILES" по примеру указываем полный путь к вашему L2.exe
14. Далее в Resource Cryptor нажимаем "Open project" и выбираем созданный файл проекта
15. Переходим во вкладку "Encryption" и перетаскиваем туда файлики из клиента, которые хотите зашифровать
16. Нажимаем "Encrypt" и ждем завершения процесса.
17. По завершению для каждого исходного файла будут созданы дополнительно еще 2 файла.
Например, если мы шифруем файл somefile.txt , тогда завершению процесса рядом будут созданы еще файлы somefile.txt.rcmetadata и somefile.txt.xxxxx.origin (где xxxxx - какое-то число).
somefile.txt - это уже зашифрованный файл
somefile.txt.rcmetadata - метаданные для клиентского модуля, этот файл должен остаться рядом с зашифрованным
somefile.txt.xxxxx.origin - исходный незашифрованный файл (на случай, если забыли сделать резервную копию)
18. Файлы *.xxxxx.origin можно удалить (если у вас уже есть сохраненные оригиналы), остальные файлы должны остаться в клиенте.

На этом процесс завершен, можно запускать игровой клиент.

>>> И самое главное! <<<
Никогда никакой криптор не даст 100% гарантии того, что файлы не будут вскрыты.

Данное решение предназначено только для того, чтобы пресечь "случайное" воровство файлов.
Это не спасет от опытного человека, перед которым стоит задача что-то стащить из вашего клиента.

1700488090352.png
 
Update v0.3.0:

В файл проекта добавлены дополнительные настройки:
INI:
[OPTIONS]
; Binding encrypted files to application executables
; If "YES" is selected, list of executable files must be specified in the EXECUTABLE_FILES section
; Values: NO, YES
; Default: YES
BIND_TO_EXECUTABLES = YES

; Caching file contents for improved performance
; Values: NO, MODE_1, MODE_2, MODE_3
; Default: NO
CACHE = NO

; Time during which the encrypted files is allowed to be used
; The value is specified in seconds (0 - time of use is not limited)
; Default: 0
FILES_LIFETIME = 0



; Required for the "BIND_TO_EXECUTABLES = YES" option
; In the "EXECUTABLE_FILES" section, you must specify the full path to your application's executable file
; You can specify multiple executable files at once.
; For example, if you have x32 and x64 versions of the same application
; This way the encrypted file will be available for use in several applications at once
[EXECUTABLE_FILES]
1 = C:\Program Files\SomeApplication\Executable_1.exe
2 = C:\Program Files\SomeApplication\Executable_2.exe

  • BIND_TO_EXECUTABLES [YES, NO][Default: YES]: Нужно ли привязывать зашифрованные файлы к исполняемому файлу (в нашем случае L2.exe). Если указано YES, то в секции EXECUTABLE_FILES необходимо указать пути к разрешенным исполняемым файлам.
  • CACHE [NO, MODE_1, MODE_2, MODE_3][Default: NO]: Режим кеширования для шифруемых файлов. NO - самый безопасный режим, но может быть медленным на больших файлах. MODE_3 - самый производительный режим, но наименее безопасный.
  • FILES_LIFETIME [Integer value][Default: 0]: Устанавливает время жизни файлов (в секундах) с момента шифрования.

(Первое сообщение в теме обновлено)
 
Update v0.3.1:
(Первое сообщение в теме обновлено)

Добавлена возможность патчить бинарники игрового клиента непосредственно из приложения.
  • Переходим во вкладку: Tools -> Attach Lib
  • Нажимаем Select File и выбираем бинарник в клиенте игры (например L2.exe)
  • В выпадающем списке можно выбрать варианты: Push Front - либа будет добавлена в самое начало таблицы импорта. Push Back - в конец таблицы. Значение по умолчанию можно не менять.
  • Нажимаем Attach Lib
Готово. Теперь необходимо рядом с ним просто поместить одну из либ (resource-cryptor-x32.dll или resource-cryptor-x64.dll) в зависимости от разрядности вашего приложения (для L2 это resource-cryptor-x32.dll)

 
Последнее редактирование:
дефендер детектит либу как троян, собственно он будет постоянно ее сжирать и не давать клиенту нормально работать
 
дефендер детектит либу как троян, собственно он будет постоянно ее сжирать и не давать клиенту нормально работать
Да, такое бывает, причем VirusTotal молчит (там обычно 3-5 детектов от малоизвестных антивирусов для x32 либы и 1 детект для x64)
Я отправляю false positive репорты в microsoft, но на их обработку требуется некоторое время
 
Update v0.4.0:
(Первое сообщение в теме обновлено)

В файл проекта в секцию OPTIONS добавлена опция CHECK_CALL_CONTEXT ("YES", "NO"; Default: "YES")
Если при запуске игрового клиента для какого-то из зашифрованных файлов получаем ошибку "Opening a file outside the application context", то при шифровании этого файла для опции CHECK_CALL_CONTEXT необходимо устанавливать значение "NO".
Не отключайте эту опцию без необходимости.
 
Последнее редактирование:
Update v0.5.0:
(Первое сообщение в теме обновлено)

В файл проекта добавлены 2 опции:
  • CHECK_FILE_INTEGRITY ["YES", "NO"; Default: "YES"]: Нужно ли проверять целостность зашифрованного файла перед его открытием. Для очень больших файлов эту опцию можно отключать, чтобы ускорить работу.
  • CHECK_MEMORY_INTEGRITY ["YES", "NO"; Default: "YES"]: Нужно ли клиентскому модулю проверять целостность некоторых участков памяти процесса (своих хуков и т.д). Может потребоваться отключать для совместимости с другими защитами.
 
Update v0.5.2:
(Первое сообщение в теме обновлено)

Добавлены более информативные сообщения об ошибках при шифровании файлов.
 
Update v0.6.0:
(Первое сообщение в теме обновлено)

Добавлена опция:
  • ENCRYPTED_FILES_REQUIRED ["YES", "NO"; Default: "NO"]: Нужно ли проверять наличие других зашифрованных файлов. Если указано значение "YES", то в файле проекта в секции "REQUIRED_ENCRYPTED_FILES" перечисляется список файлов (относительные пути), которые должны быть зашифрованы.
Эта опция полезна в случае, если нам необходимо зашифровать определенные файлы в клиенте и чтобы игрок не мог заменить один из них каким-то своим незашифрованным файлом, который он сможет редактировать. То есть игроку придется или заменять все зашифрованные файлы своими незашифрованными (что может поломать клиент), или не трогать ни один из них.
 
Update v0.6.0:
(Первое сообщение в теме обновлено)

Добавлена опция:
  • ENCRYPTED_FILES_REQUIRED ["YES", "NO"; Default: "NO"]: Нужно ли проверять наличие других зашифрованных файлов. Если указано значение "YES", то в файле проекта в секции "REQUIRED_ENCRYPTED_FILES" перечисляется список файлов (относительные пути), которые должны быть зашифрованы.
Эта опция полезна в случае, если нам необходимо зашифровать определенные файлы в клиенте и чтобы игрок не мог заменить один из них каким-то своим незашифрованным файлом, который он сможет редактировать. То есть игроку придется или заменять все зашифрованные файлы своими незашифрованными (что может поломать клиент), или не трогать ни один из них.
Супер, спасибо за такой крутой софт!
 
Update v1.0.0:
(Первое сообщение в теме обновлено)

Изменения:
  • Переход в стабильную версию 1.x.x (предыдущие версии 0.x.x теперь не работают)
  • В файл проекта добавлена опция SAVE_ORIGIN_FILES ["YES", "NO"; Default: "YES"]: Нужно ли сохранять оригинальные файлы после шифрования.
  • DEMO лицензия теперь урезана. При запуске игрового клиента с файлами, которые были зашифрованы DEMO лицензией, будет отображаться соответствующее сообщение. Также время жизни таких зашифрованных файлов ограничено до 24 часов. Этого достаточно, чтобы проверить подходит ли решение для конкретного пользователя, чтобы потом купить подписку.
  • Цена подписки составляет 10$ в месяц.
 
Update v1.1.0:
(Первое сообщение в теме обновлено)

Изменения:
  • Переработано шифрование файлов для улучшения производительности (особенно при случайном чтении данных из файла)
  • Из файла проекта удалена опция CACHE
  • Добавлена подпись для бинарников, что дает 0 детектов антивирусов для клиентских модулей (VirusTotal: и )
 
Update v1.2.0:
- Некоторые "внутренние" изменения (для конечных пользователей ничего нового)
 
Update v1.2.2:
(Первое сообщение в теме обновлено)

Изменения:
  • Настройки проекта переехали из *.ini в *.json
  • Немного доработан интерфейс - настройками проекта теперь можно управлять непосредственно из утилиты, без необходимости править файл проекта в текстовом редакторе.
  • Обновлены скриншоты и видеогайд в первом сообщении.
 
Update v1.3.0:
(Первое сообщение в теме обновлено)

Изменения:
  • Некоторые внутренние изменения
  • Утилита стала полностью бесплатной
  • Discord сервер для поддержки/баг репортов/etc -
 
И это говно продавалось? Серьезно? Так видимо пишут наверное сеньоры и рассказывают про разработку.
1) Закриптовать софт, видимо есть что скрывать было, свой говнокод, а то как же так ударит по нашему сеньеру помидору.
2) Серьезно виндовс формы? В 2024 использовать виндовс формы и хоть в каком то там дот нете завезли оптимизации использовать зашквар.
3) А как же поддержка линукса? А её нету из-за форм, MAUI, WPF, Avalonia, мы не слышали.
4) Реактивность, асинхронность, многопоточность? Так же [А по щам?], пусть криптуется 100 лет
5) DI так же идёт нахер
6) MVVM так же идёт нахер, ведь автор же сеньер со стажем и хуячит формы и даже не в курсе про паттерн.

  • Настройки проекта переехали из *.ini в *.json
а чё не в txt?
7) Криптовать ещё переменные и сами названия, молодец хвалю.
8) Создавать файл для настроек с дефолт параметрами сложно, выкинем непонятную ошибку.
Видимо мы можем только ддосить сервера клиентов и сливать данные их и не более, а ещё выебываться в темах какие мы крутые разработчики, а по факту даже элементарного сделать для продажи не можем.
 
И это говно продавалось? Серьезно?
Конечно, по 10$ :loltt0:

Закриптовать софт, видимо есть что скрывать было, свой говнокод, а то как же так ударит по нашему сеньеру помидору.
Мимо, подумай для чего еще могут навешивать протекторы :)

2) Серьезно виндовс формы? В 2024 использовать виндовс формы и хоть в каком то там дот нете завезли оптимизации использовать зашквар.
3) А как же поддержка линукса? А её нету из-за форм, MAUI, WPF, Avalonia, мы не слышали.
4) Реактивность, асинхронность, многопоточность? Так же [А по щам?], пусть криптуется 100 лет
5) DI так же идёт нахер
6) MVVM так же идёт нахер, ведь автор же сеньер со стажем и хуячит формы и даже не в курсе про паттерн.
Я тебе даже больше скажу, GUI мне накидал ChatGPT, так как я не пишу на шарпе и не занимаюсь GUI вообще :loltt0:
До этого на шарпе последний раз я что-то делал году так в 2010 - 2011
Утилита была консольной (на C++) и GUI был прикручен за один вечер перед тем, как закинуть утилиту на форум

Так веселее)

7) Криптовать ещё переменные и сами названия, молодец хвалю.
Похвалу можешь оставить для того, кто делает сервер L2 на js, ему нужнее :loltt0:

Видимо мы можем только ддосить сервера клиентов и сливать данные их и не более, а ещё выебываться в темах какие мы крутые разработчики, а по факту даже элементарного сделать для продажи не можем.
Снова "старые песни о главном" :loltt0:
За 3+ года никто так и не предоставил ни единого пруфа, но зато все продолжают повторять одно и то же как мантру)
 
Последнее редактирование:
Назад
Сверху Снизу