Глосарій обфускації

Словник документації AfterPack: поліморфізм, нематеріалізація, класи відновлення та інші терміни, визначені один раз.

Документація AfterPack вживає ці терміни у значеннях, визначених тут.

Дві осі

Захист AfterPack описується двома незалежними осями: наскільки важко відновити одну збірку і наскільки збірки відрізняються одна від одної. Одну можна підсилити без іншої.

Складність

Наскільки важко відновити одну збірку: глибина захисту в межах одного артефакту. Задається через complexity, напряму або через пресет.

Поліморфізм між збірками

Наскільки кожна збірка відрізняється від попередньої. Задається сідом: seed у конфігурації рушія, --seed у командному рядку. Це головний захист AfterPack. Кожна збірка має іншу форму, тож інструменти, написані під шаблони однієї збірки, ламаються на наступній. Той, хто запускає код, усе одно може прочитати значення, які він використовує. Див. Як працює AfterPack.

Конфігурація

Пресет

Іменований набір налаштувань захисту, який обирається одним прапорцем: minify, light, medium, hard, extreme. За замовчуванням light. Одна назва пресету задає цільове значення complexity. Цільове значення кожного рівня наведено на сторінці Пресети.

complexity

Ступінь переплетення в результаті; див. Конфігурація. Верхньої межі немає. Явний inflation.max, який цьому заважає, завершує збірку помилкою; якщо його не задано, саме цільове значення вирішує, наскільки виросте результат. Значення для кожного пресету наведені на сторінці Пресети.

Директиви

Блокові коментарі у вихідному коді, які змінюють захист конструкції, до якої вони прив'язані. Вбудована /* @afterpack preset=extreme */ покриває літерал одразу після неї. Блокова форма, /* @afterpack <key>=<value> */ … /* @afterpack end */, відкривається маркером, що стоїть окремо на своєму рядку, і закривається парним end, покриваючи явно задану ділянку. Рядковий коментар // не зчитується. skip знижує захист там, де потрібна сумісність; preset=hard або preset=extreme його підвищують. Ділянки враховує лише рушій Pro; див. Збірки Free. Щоб щось виключити на Free, використовуйте натомість paths.exclude або identifiers.reserved. Див. Директиви.

preset=hard

Директива (/* @afterpack preset=hard */), яка підвищує ділянку до complexity 12, рівня hard, і примусово вмикає для цієї ділянки мінімальне кодування рядків незалежно від глобального пресету. /* @afterpack preset=extreme */ робить те саме з цільовим значенням 25.

Відновлення і модель зловмисника

Фіксована структура

Форма, що лишається однаковою між збірками: масив рядків (навіть зашифрований), інтерпретатор VM, bootstrap декодера, ідентичний у кожній збірці. Саме цю форму інструмент на кшталт webcrack або модель вивчає один раз і повторно використовує на кожній збірці, що її має. Будь-який обфускатор може змінювати константи між збірками; важливо, чи лишається під ними така форма. AfterPack бере форми, імена, константи й розкладку заново із сіда кожної збірки, тож розпізнавач, написаний під шаблони однієї збірки, ламається на наступній. Від того, хто запускає код, значень він не приховує. Див. Чому фіксовані шари обфускації не працюють.

Класи відновлення

Три класи статичного зловмисника, які описують, із чим іде той, хто читає байти, grep, інструменти для AST або «сліпа» LLM, яка не виконує код: перейменовано й закодовано, сплощено й злито, знищено й злито. Динамічний зловмисник, який запускає код, є окремим, сильнішим випадком. Таблиця класів і те, що кожен із них дає зловмиснику, наведені на сторінці Класи відновлення. Сьогодні трансформації, що постачаються, створюють лише перший клас, перейменовано й закодовано; класи сплощено й злито та знищено й злито зарезервовано.

Нематеріалізація

Механізм, який захищає секрет, окремий від класів відновлення вище, що відновлюють структуру, а не значення. Забезпечується transforms.comparisonHardening.enabled, який переписує перевірку рівності рядків на односторонню перевірку дайджесту, тож літерала в артефакті немає. Це відрізняється від мінімального кодування рядків, яке кодує літерал, але все одно відтворює його в момент використання. Нематеріалізація перемагає статичного читача і «сліпу» LLM. Вона не перемагає зловмисника, який запускає код в інструментованому середовищі виконання; жоден обфускатор часу збірки цього не змінює. Див. Як секрети переживають збірку.

Постачання, сід і тарифи

Сід

Параметр збірки, який визначає, який саме поліморфний результат буде створено. За замовчуванням випадковий. Він не є секретом: опублікований артефакт і так публічний, а знання сіду збірки не допомагає її відновити. У продакшні змінюйте його для кожного релізу. Закріплюйте його (--seed=git) лише тоді, коли потрібен побайтово ідентичний результат, для кешування в CI або відтворюваного аудиту. Див. seed і Збірки та релізи.

Source maps

Відображення, які пов'язують обфускований результат із вашим оригінальним вихідним кодом. Корисні для локального налагодження. Публічний .map дає зловмиснику прямий шлях до вашого вихідного коду. Ніколи не випускайте його в продакшн. AfterPack за замовчуванням вимикає source map у продакшн-збірці, прибирає коментар sourceMappingURL і видаляє карти, які записав ваш бандлер.

Protection Map

Звіт, що розфарбовує кожен токен вашого вихідного коду за його оцінкою складності й називає клас відновлення кожної ділянки. За замовчуванням його визначає рушій; коли ви позначаєте ділянки на Pro, його визначаєте ви. Керується параметром protectionMap.enabled. Див. Protection Map або відкрийте живу демонстрацію.

Тарифи

Free, Extra MB, Indie, Team, Studio, Enterprise. Free застосовує захист на повну силу однаково до всього бандла. Платні тарифи також можуть задати важчий або легший пресет для однієї функції чи файлу за допомогою директиви. Ціни, ліміти та обмеження на кількість проєктів наведені на сторінці Плани та тарифи.

Fail-closed

Правило, за яким збірка Pro ніколи не випускає слабший захист, ніж ви запитали. Якщо хмара Pro недосяжна після повторних спроб або ліміт вичерпується посеред пакета, AfterPack зупиняється з ненульовим кодом виходу. Він не переходить на результат тарифу Free чи на відкритий текст. Див. Коди виходу і fail-closed.

Далі

  • Як працює AfterPack: де більшість цих термінів ужито в контексті.
  • Конфігурація: кожен параметр і через що його можна задати.
  • Директиви: повна граматика @afterpack і які ключі застосовуються.
  • Пресети: шкала, з якої взято наведені вище цільові значення.
  • Діагностика: коди DIAG_*, у яких з'являються ці терміни.