Що може відновити зловмисник (класи відновлення)

Класи для статичного зловмисника, до яких належать трансформації AfterPack, і що зловмисник отримує, відновивши кожен із них.

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

Статичний зловмисник: визначення

Це класи для статичного зловмисника. Вони описують, з чим стикається той, хто читає байти: grep, інструменти для AST, прохід деобфускатора або LLM, яка пояснює код, не запускаючи його. Зловмисник, який запускає артефакт з інструментуванням, є окремим, сильнішим випадком; його розглянуто в моделі загроз.

The three reversal-complexity classesRenamed & encodedPolynomial-injectiveAttacker gets:the structure, after real workFreeFlattened & fusedPolynomial-non-injectiveAttacker gets:an equivalent program, not yoursReservedDestroyed & fusedExponential — provenance, staticAttacker gets:behaviour, not your structureReservedFree spans the first two classes. Provenance-destroying fusion is planned and not available on any tier today.Each class is a cost, not a wall — and the cost is charged again on your next build.

Класи

КласЩо відновлює статичний зловмисникТариф
Перейменовано й закодовано (поліноміально-ін'єктивний)Структуру, ціною зусиль. Імена, літерали, сплощений потік керування та злиті тотожності вимагають реальної роботи з розпізнавання шаблонів. Цю роботу доводиться повторювати на кожній збірці.Free
Сплощено й злито (поліноміально-неін'єктивний)Еквівалентну програму з тією самою поведінкою. Логіку переписано так, що кілька різних оригінальних обчислень зводяться до одного результату, і зв'язок із тим, яке саме з них написали ви, утрачено. Жодна трансформація, що постачається, сьогодні не досягає цього класу.—

Тариф Free створює клас «Перейменовано й закодовано» у всьому вашому бандлі (повна матриця на сторінці «Плани та тарифи»). Вищі пресети посилюють роботу в межах цього класу. Пресет за замовчуванням — light (цільова складність 5); сильніший пресет, наприклад --preset=hard, посилює роботу й у рази збільшує час запуску сторінки в усьому бандлі (ціна завантаження). Починаючи з medium, рушій рівномірно додає в усьому бандлі сплощення потоку керування, злиття тотожностей і знищення констант, усе в межах класу «Перейменовано й закодовано».

«Сплощено й злито» та «Знищено й злито» сьогодні не створюються

Жодна збірка їх не досягає, і жодну ділянку ніколи не віднесено до класу «Сплощено й злито» чи «Знищено й злито». /* @afterpack preset=extreme */ підвищує цільову складність ділянки до 25 з увімкненим мінімальним кодуванням рядків, і це реальний, вимірюваний захист у межах класу «Перейменовано й закодовано».

Що дає зловмиснику відновлення класу

Що клас дає зловмиснику, залежить від того, чого той прагнув.

  • Секрет (API-ключ, поріг ліцензії, зашита в код таблиця): жоден клас сам по собі його не приховує. Секрет можна дістати з будь-якої програми, яка поводиться так само, як ваша, зокрема з тієї, що відновлена із захищеної ділянки. Захист секрету потребує іншого механізму. Див. Захист секрету.
  • Розуміння та клонування вашого коду: статичний читач може відновити працездатний, читабельний еквівалент, але лише після реальної роботи з розпізнавання шаблонів, якої вимагає клас «Перейменовано й закодовано», і цю роботу доводиться повторювати для кожної збірки. Межі цієї властивості описано в розділі Чого AfterPack не замінює.
  • Знайти й пропатчити одну перевірку (вимкнути paywall, перевернути один return true): жоден клас сам по собі тут мало допомагає. Зловмиснику треба знайти лише цей один вузол. Знайти його знову щось коштує, і ця ціна скидається з кожним релізом. Самоперевірка цілісності (transforms.selfIntegrity.enabled) цього не виявляє: вона помічає зміни лише у власній таблиці перевірок. Про ротацію див. Найкращі практики.

Перевірте на власній збірці

Protection Map показує доказ для кожного токена: ваш оригінальний вихідний код, розфарбований за оцінкою складності кожного токена, із класом і стеком трансформацій за ним при наведенні. Відкрийте живу демонстрацію або згенеруйте власну за допомогою npx afterpack@latest.

Далі