Антиотладочные приёмы для JS?

Одной обфускации мало. Можно ли завязаться на какие-то более хитрые вещи, которые помогают отличить запущен твой скрипт браузером "оригинально", прикручено к нему какое-то дополнение, исходник изменён или он в какой-то другой среде?

В принципе, можно провязать всю логику скрипта какими-то непонятными юзеру вычислениями с перестановками ссылок в длинных массивах, чтобы эти вычисления 90% работы делали для пыли в глаза, но побочно инициализировали некие ключевые связи в обфусцированном коде. При несовпадении какой-нибудь фигни весь этот объём вычислений проходит как обычно, но оставляет конструкцию в нерабочем виде.

Ну можно радикально - взять LLVM, написать всё на C++ и поставлять машинный код, исполняющийся в asm.js и там ещё навернуть пирогов в 10 слоёв с дополнительными подгрузками кусков с главного сервера. Но всё это будет слишком жестоко, дорого и тормозно.
  • Вопрос задан
  • 592 просмотра
Пригласить эксперта
Ответы на вопрос 5
IvanTheCrazy
@IvanTheCrazy
Радикальный метод - не выкладывать в сеть. Нужно будет - разберут и разложат все по полочкам. Не хотите этого - не выкладывайте
Ответ написан
Комментировать
profesor08
@profesor08 Куратор тега JavaScript
Твой код js никому ненужен. Есть более крутые и красивые вещи, уже, и в бесплатном доступе, демонстрирующие превосходное исполнение. Ты спросишь, с чего я это взял? Да с того, что если бы твой код имел хоть какую-то ценнось, значимость и интерес, ты бы сам его продемонстрировал. Мол смотрите как я умею и как круто получается. Ну, а пока что, ты просто хочешь спрятать свой говнокод.
Ответ написан
@utyfua
Я раз 10 слазил в подобный код.
Лично я не думаю что можно чисто со стороны клиента защитить код от подмены.
Тут нужна серверная которая будет "задачу" браузеру на которую у всех браузеров будет одит и тот же ответ. Если влезть в код то из-за неочевидности можно поймать но не ограничить на 100% ибо на ошибках учатся.
Если все на js и нужно чтобы его было сложнее проанализировать(не защитить на 99.99%) можно поступить так:
Заходит пользователь. Для него генерим прям в исходнике скрипта особый алгоритм(к примеру к ответу любого теста делать Math.ceil(id*1.12)).
При любом запросе принимаем eval функцию с "задачей".
При запросе отправляем ответ задачи + ту особую часть(именно суммируем или миксируем но ни в коем случае не соединяем строки).
Если достаточно ошибок то отправляем себе отчет, блочим юзера или еще чет.
В eval можно еще ориентироваться не только на текущий юзерспейс а на тот который был сгенерен прошлой задачей. Тут главное понимать какой скрипт в какой вкладке работает ибо будет много не состыковок и подобное вообще ток ради эксперимента можно попробовать, не более.
Ответ написан
Комментировать
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
Усложнит на самую каплю, но все равно полезно хотя бы ради предотвращения подмены скрипта без ведома пользователя
https://developer.mozilla.org/en-US/docs/Web/Secur...
https://developer.mozilla.org/en-US/docs/Web/HTML/...
Ответ написан
Комментировать
edli007
@edli007
full stack, team lead
После компиляции вебпаком код перевернут покруче обфускации на порядок, вам достаточно использовать нестандартные конфиги вебпака и отключить соурс мапы для продакшена
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы