Comments 9
В этой статье мы познакомимся, как минимум, с крутым словом
лабараторию
виртулизация
Попробуйте теперь взять получившийся код и деобфусцировать его
getData(n) - заменяем изменяем на результат этой функции, а имена переменных и функций можно вручную переименовывать в зависимости от контекста, так как это не особо отличается от обычной минификации, от любого бандлера
Приходилось по кое-какой нужде так делать, ничего сложного, пара часов и готово. А если код изначально использует много объектов, классов и тд, то там восстанавливать вообще нечего, так как обфускатору все аксессоры (филды, методы, геттеры, сеттеры и тд) нужно или оставлять в том же виде, чтобы не поломать ничего, или через тот же механизм getData, который довольно просто вернуть в исходное состояние.
Хороший обфускатор должен что-то заинлайнить, всё переименовать, простые операции заменить на много непонятных так, чтобы результаты были теми же и тд, а потом ещё это и хорошенечко зашифровать в eval, вызов которого тоже обфусцировать.
Так как мы говорим про JavaScript, то действительно хорошая обфускация просто убьёт производительность и размер вашего приложения, при том, что кто надо, тот всё равно вернёт код в приемлемое состояние. Как неплохой вариант действительно важный код переписать под WebAssembly, так восстанавливать код из ассемблера не самое приятное занятие, хоть и возможное + есть вероятность, что работать побыстрее будет. Пора уже смирится - всё, что вы отдаёте пользователям, становится общедоступным. Свои крутые алгоритмы переносите на сервер и не надо будет думать, как бы вам код обфусцировать, чтоб конкуренты не спёрли.
Вместо кастомной виртуалки действительно можно заюзать WebAssembly - для него нет хороших декомпиляторов. Но с browser API и DOM там удобно не повзаимодействуешь.
Но клиентская обфускация имхо ещё будет долго жить. Так как есть задачи в которых важно исполнение кода именно на клиенте, а его действия желательно подольше оставлять в тайне.
Я просто пишу лапше-г-но-код с кривыми названиями переменных. Больно к нему возвращаться через месяц или позже. Но тем кто увидет его в первые кровь из глаз гарантирована 😂 Но это для пет проектов норм, в компании такую тактику вряд-ли оценят)
Как приготовить обфускацию в JavaScript и не сжечь лабораторию: AST, babel, плагины