Skip to content

AvenCores/open-affinity-patcher

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🔧 Open Affinity Patcher

Python GPL-3.0 License GitHub stars GitHub forks GitHub pull requests GitHub issues

Интерактивный патчер libaffinity.dll для Windows для отключения принудительной авторизации и офлайн работы в Affinity.

Утилита патчит libaffinity.dll по смещению 0x0043E451 и заменяет:

  • 32 C0 -> B0 01
  • XOR AL, AL -> MOV AL, 1
  • Эффект: пропатченная функция возвращает 1 вместо 0
chrome_XYRV97RfpA

🎦 Видео гайд по установке

maxresdefault

✨ Что делает патчер

  • Работает в интерактивном режиме меню и в режиме прямого запуска через CLI
  • Использует путь по умолчанию C:\Program Files\Affinity\Affinity\libaffinity.dll
  • Позволяет выбрать свой путь к DLL или папку, содержащую libaffinity.dll
  • Устанавливает русификатор из папки ru в C:\Program Files\Affinity\Affinity\ru
  • Создает резервную копию .bak перед изменением файла
  • Определяет, был ли файл уже запатчен
  • Отказывается применять патч, если байты по целевому смещению отличаются от ожидаемых
  • Показывает текущий статус патча в главном меню
  • Предупреждает, что текущий русификатор является частичным переводом

📋 Проверка поддерживаемой версии

Программа читает установленную версию Affinity из:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{D5B4183A-DE48-405A-A106-D3E48EBFE23F}\DisplayVersion

Ожидаемая версия:

3.2.0.4351

Скачать версию 3.2.0.4351: Telegram | Официальный сайт

Поведение:

  • Если версия ровно 3.2.0.4351, предупреждение не показывается
  • Если версия ниже 3.2.0.4351, выводится предупреждение о возможной некорректной работе патчера
  • Если версия отличается от 3.2.0.4351, но выше нее, предупреждение тоже будет показано
  • Если версию не удалось прочитать из реестра, также выводится предупреждение

Эта проверка носит информационный характер и сама по себе не блокирует патчинг.

🖥️ Главное меню

При запуске без аргументов программа показывает:

  • Папку Affinity по умолчанию
  • Путь к libaffinity.dll по умолчанию
  • Найден ли целевой файл по умолчанию
  • Запатчен ли уже файл по умолчанию
  • Установленную версию Affinity
  • Предупреждение о совместимости версии, если это нужно

Пункты меню:

  • 1 Патч libaffinity.dll по умолчанию
  • 2 Патч своего файла или папки
  • 3 Установить русификатор ru в папку Affinity
  • 4 Открыть репозиторий GitHub
  • 0 Выход

🚀 Использование

Интерактивный режим:

python main.py

Патч конкретного DLL-файла:

python main.py "C:\Path\To\libaffinity.dll"

Патч папки, в которой находится libaffinity.dll:

python main.py "C:\Path\To\Affinity"

Если программа собрана в исполняемый файл, она принимает тот же одиночный аргумент с путем.

🛡️ Проверки безопасности

Перед записью любых изменений программа:

  • Проверяет, что целевой файл существует
  • Проверяет, что размер файла достаточен для указанного смещения
  • Читает байты по адресу 0x0043E451
  • Останавливается, если файл уже запатчен
  • Останавливается, если байты не совпадают с ожидаемой оригинальной сигнатурой
  • Создает libaffinity.dll.bak, если резервной копии еще нет

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

🔐 Права доступа

Целевой файл по умолчанию находится внутри Program Files, поэтому могут понадобиться права администратора.

На Windows скрипт пытается перезапустить себя с повышением прав, если это необходимо.

📝 Примечания

  • Этот проект рассчитан на Windows
  • Скрипт использует только стандартную библиотеку Python
  • Используйте на свой риск при патчинге версий, отличающихся от 3.2.0.4351
  • Русификатор в комплекте является частичным переводом, полного перевода на данный момент нет

🛠️ Сборка

Требуется pyinstaller:

pip install -r requirements.txt
Windows: pyinstaller --onefile --uac-admin --icon=icon.ico --name="Open_Affinity_Patcher_Windows" --noupx --clean --version-file=version.txt --add-data "ru;ru" main.py

📜 Лицензия

Проект распространяется под лицензией GPL-3.0. Полный текст лицензии содержится в файле LICENSE.


💰 Поддержать автора

  • SBER: 2202 2050 1464 4675