1.6.8021
Февраль — добавлена предкомпиляция для Packs
C#-скриптинг: предкомпиляция для паков
Это большое обновление, которое открывает много новых возможностей. Если коротко: теперь при экспорте новой версии пака — будь то auction sniper, L2 helper или любой другой пак из Library — можно настроить EyeAuras так, чтобы он заранее компилировал все скрипты, входящие в этот пак, и включал бинарные файлы в экспортируемые данные.
Это не только убирает затраты на компиляцию у конечных пользователей, но и позволяет полностью исключить исходный код скриптов из экспортируемого проекта!

ВАЖНО! Чтобы применить новый режим компиляции, сначала выберите нужный режим, сохраните настройки, а затем загрузите (
Upload) новую ревизию пака. Пока что компиляция выполняется на стороне клиента. Со временем она будет перенесена на серверную сторону, как и остальная конфигурация Packing, но это уже задача на 2026 год.
Бинарники и скрипты
Я уже подробно разбирал это здесь.
Коротко: скрипты — это текстовая версия вашей программы. Бинарники — это уже скомпилированная программа. Во время компиляции много информации теряется намеренно, но в случае .NET при желании всё ещё можно восстановить большую часть программы.
Сейчас EA включает «чистые» бинарники, без каких-либо дополнительных изменений. Это хорошо с точки зрения производительности и уже является шагом в сторону защиты скриптов, но человек, который понимает, что делает, всё ещё может восстановить текст программы с помощью инструментов, называемых decompilers.
Например, вот так выглядит декомпилированный код одного из паков для PoE2 — для программиста это практически открытая книга.

Режимы компиляции
На странице конфигурации пака появился новый переключатель, который позволяет выбрать один из трёх режимов компиляции. У каждого из них есть свои плюсы и минусы.
Только скрипт
Это режим по умолчанию. Всё работает так же, как и последние годы: при экспорте весь ваш скриптовый код уходит как есть и компилируется по требованию на ПК конечного пользователя.
Плюсы:
- скрипт может легко редактировать любой пользователь
Минусы:
- есть затраты на компиляцию, которые могут занимать сотни, а иногда и тысячи миллисекунд, из-за чего весь UX ощущается более «тяжёлым»
- скрипт может легко редактировать любой пользователь
Скрипт и бинарники
Плюсы:
- скрипт может легко редактировать любой пользователь
- нет вообще никаких затрат на компиляцию: при запуске программы всё уже скомпилировано и готово к работе. Компиляция произойдёт только если вы внесёте изменения в скрипт
Минусы:
- скрипт может легко редактировать любой пользователь
Только бинарники
Плюсы:
- скрипт больше недоступен вообще: он физически никогда не попадает на ПК конечного пользователя
- нет вообще никаких затрат на компиляцию: при запуске программы всё уже скомпилировано и готово к работе. Компиляция произойдёт только если вы внесёте изменения в скрипт
- появляется возможность защитить код и усложнить кражу вашей интеллектуальной собственности
Минусы:
- конечный пользователь больше не сможет редактировать скрипт. Вместо кода будет показываться только техническая информация в режиме read-only
Что дальше?
Больше уровней защиты.
Как только текущая функциональность станет достаточно стабильной, я добавлю ещё одну возможность — автоматическую obfuscation кода. С хорошим обфускатором восстановить программу до исходного («чистого») состояния становится крайне сложно.
Для сравнения: это тот же самый скрипт, который я показывал выше, но уже после обфускации. Как видите, он почти не читается из-за всех применённых трюков. Восстановить его до исходного состояния даже при наличии бинарника — очень сложная задача.


Для пользователей EA это будет просто ещё одна галочка в настройках. Для самой EA — это уже большой новый compilation pipeline с множеством сервисов и инструментов.
Со временем поверх обфускации появятся и дополнительные уровни защиты, например native compilation и virtualization. Подробнее расскажу позже в этом году.
Исправления и улучшения
- [SendSequence] Исправлена проблема с SendSequences: при некоторых условиях последовательности нажатий клавиш могли преждевременно прерываться, из-за чего отправлялась только часть последовательности. Спасибо
@Rowenor, что нашёл это! - [Macros] Узел Comment больше не выбрасывает исключение при выполнении — раньше это полностью ломало саму идею существования этого узла в дереве