Думаючи про це, існує кілька різних типів обтурації. Почнемо із затуманення вихідного коду, що є повною тратою часу; досить важко зрозуміти без цього! Тож давайте замість цього зосередимось на омертвінні пакету доставки, про те, як код надходить користувачеві.
Незначна затьмарення
Існує незначна омертвіння, щоб запобігти випадковому користувачеві засунути пальці і легко зламати речі. Він не тримає рішучого хакера, але він має цінність у тому, щоб допомогти забезпечити те, що вам потрібно просити підтримати, те, що ви насправді доставили. Рівень захисту, необхідний для подібних речей, дійсно досить низький; пакет поставки просто не повинен виглядати читабельним та редагованим (без спеціалізованих інструментів), і це досить добре.
Приклад цього є мінімізацією JavaScript, хоча вона не продається як така. Ніхто з розуму не захотів би прочитати та відредагувати мінімізований файл JS, навіть якщо це технічно можливо зробити, якщо ви досить рішучі / наполегливі.
Аналогічно з доставкою програм Java. Просто упаковка коду у виконувану програму JAR зупинить більшість нерозумностей, навіть незважаючи на те, що у всьому містечку ввічливий знак "Будь ласка, тримайте від трави".
Навіть при доставці коду C ++, вилучення непотрібних символів з виконуваного файлу буде достатньо, щоб визнати його незначною затьмаренням. Ключовим є те, що незрозуміло читати результат як користувача, але це не проблема, щоб виконати його як комп'ютер.
Основна тупість
Основна затьмареність - це убереження визначеного та знаючого користувача. Це також загальна програша гра; якщо комп'ютер може виконати його, людина може забрати його і розробити те, що робить. Найближчим ви могли б зробити так, щоб програма постійно розшифровувала себе, перетворюючи те, що вона робить за один раз, у зовсім іншу річ, яку вона робить в інший час. Створити таку річ було б досить складно, і все одно не вдалося б уникнути дійсно хорошого хакера (хоча вони були б справді досить схрещені з вами в кінці цього при необхідній кількості зусиль, необхідних для розшифрування всього цього самовиправляючого коду).
Набагато краще думати з точки зору інших рішень. Наприклад, ви можете зберігати «коштовності корони» коду на серверах, якими ви керуєте, і дозволяєте лише виклики служб до нього, роблячи клієнту по суті безкоштовний роздачу, яка є передовим коштом бітів. Або ви можете піти на більш контрактний / легальний шлях і тільки здавати виконавчі файли організаціям, які офіційно погоджуються не торкатись всередині вашого коду або компенсувати вам, якщо вони це роблять (так що це буде якийсь NDA). Мета полягає в тому, щоб створити сильний стимул для хакера не зламати, а для користувачів тримати код подалі від будь-яких хакерів, не пов'язаних угодою.
Але ви не повинні вважати, що ваш код ніколи не може бути зламаний. За допомогою віртуалізації будь-який програмний стан виконання може бути вивчений і відстежений, і все, що намагається перемогти це (наприклад, відстеження годинника до зовнішнього джерела часу), набагато частіше спричинить проблеми для законних користувачів, ніж хакери. (Дивіться історію DRM про те, як навіть дуже рішучі видавці інформації не можуть захистити свої системи, коли код знаходиться в руках їхніх опонентів.) Набагато краще зосередитись на тому, щоб насправді зробити законних користувачів щасливими. Втрати від випадкових тріщин не будуть нічим порівняно з додатковими грошима, які приносяться через задоволення клієнтів належним чином.