Эта статья участвовала в третьем этапе тренировочного лагеря для создателей Nuggets. Подробнее см.:Dig Li Project | Идет третий этап тренировочного лагеря создателя, «написание» личного влияния.
предисловие
Я вижу много обсуждений в сообществеКак отлаживать, как отлаживать продвинутые и некоторые приемы отладки, я хочу поговорить с тобой сегодня,Как запретить отладку, запретить другим отлаживать нашу программу
Почему здесь эта статья? Она возникла в результате встречи, когда я искал пиратские фильмы. Руководствуясь любопытством, многие из этих платформ занимаются только транспортировкой, а не хранением, потому что хранение пиратских фильмов другим лицам является незаконным. фильмы, которые только что вышли!В то время мне было любопытно посмотреть, как они проходят через консоль определенной станции, как это запросить, и какой формат запроса.Мне было так любопытно., началось мое замечательное путешествие ...
Прочитав эту статью, вы узнаете
Я не могу точно сказать, что вы узнаете, но вот что, я надеюсь, вы узнаете из этой статьи:
- Как просто предотвратить злонамеренную отладку вашей программы другими
- Обратное мышление учит, как лучше отлаживать
Реализация
Способ предотвращения отладки, здесь мы в основном используем константуdebugger
Метод сумасшедшего вывода точек останова, чтобы программа не могла нормально выполняться после открытия консоли
мы все знаемdebugger
Он будет выполняться только при открытии консоли, поэтому все следующие методы вращаются вокруг этой функции, без лишних слов, я покажу вам следующие случаи.Владею палкой, но целюсь во дворПравда, сначала по коду:
метод первый:
(() => {
function block() {
setInterval(() => {
debugger;
}, 50);
}
try {
block();
} catch (err) {}
})();
Из кода выше мы видим, что после открытия консоли на странице будут следующие результаты:
Здесь необходимо указать следующие моменты:
- программа
debugger
Блокировка вентиляционного отверстия, мы не можем, как обычно, на соответствующем js-коде во вкладке «Источник».breakpoint
Пусть программа останавливается каждый раз, когда она переходит к месту добавления точки, чтобы мы могли просмотреть значение некоторых переменных или логику процесса шага (как показано на рисунке ниже)
- Все мы знаем, что когда мы открываем консоль в первый раз, мы не можем видеть какие-либо запросы на вкладке сети, поэтому мы хотим использовать вкладку сети, чтобы проверить, какие запросы сделала веб-страница, но мы также не можем ее видеть. открываем консоль, посмотрим
debugger
Мы препятствуем, мы можем иметь дело со следующим решением или с конкретным инструментом захвата запросов
Вы можете сначала проигнорировать решение и подумать о том, как бы вы пробили этот барьер в это время, если бы это были вы?Первый раз, когда я столкнулся с этой ситуацией, я тоже был очень растерян, и я не знал, как с этим бороться. Позже я обнаружил, что проблема не так уж и проста. Мы можем посмотреть на нее с вопросами:
Для первого примера, как мы это исправим? (в обход)
Ответ: отключить точки останова
Как видите, это очень просто, нажмите кнопку «Деактивировать точки останова» на вкладке «Источник» консоли Chrome или нажмите Ctrl + f8 (как показано на рисунке ниже). А вот тем, кто не знаком с консолью, сложно додуматься сюда идти.
Но разве это конец этой статьи? Тогда я терпеть не могу своих друзей"Вот и все?"😂
На самом деле вышеуказанные решения не помогли нам решить фундаментальную проблему,Что нам нужно сделать, так это отладить, хотя приведенное вышеdebugger
удаляются, но мы не можем добавить его, нажав на номер строки слева от каждой строки кодаbreakpoint
охватывать, значит основная проблема не решена, просто убрали надоедливый сумасшедший отладчик, нам еще предстоит найти другой способ
Способ второй:
Из соответствующих строк кода, добавивlogpoint
Ложь, затем нажмите Enter, чтобы обновить страницу, и найденный успех пропустит неограниченный отладчик, поэтому мы можем повеселиться отладкой бесплатно ~
Есть соответствующий метод
то есть черезadd script ignore list
для добавления строк или файлов, которые необходимо игнорировать при выполнении
Как видите, мы также можем восстановить исходное состояние, удалив код игнорирования, добавленный в список игнорирования скрипта.
Но вы настолько умны, что люди должны думать о мерах противодействия?
Для первого метода вышеБамбук
БудуsetInterval(() => {debugger;}, 50);
написано одной строкой, можно даже добавитьlogpoint
Неверно, бесполезно, это все равно сумасшедший отладчик, даже если подумать, отформатируйте его через формат кода в левом нижнем углуsetInterval(() => {debugger;}, 50);
Делать его многострочным также бесполезно, все равно перезапустит отладчик после обновления
(() => {
function block() {
setInterval(() => {debugger;}, 50);
}
try {
block();
} catch (err) {}
})();
Для второго метода мы модифицируем код следующим образом.😬
(() => {
function block() {
setInterval(() => {
Function("debugger")();
}, 50);
}
try {
block();
} catch (err) {}
})();
Мы можем сделать это, поставивdebugger
переписать какFunction("debugger")();
чтобы справиться с этим в виде ; отладчик, сгенерированный конструктором функций, будет открывать временный файл js каждый раз, когда он выполняется, ха-ха~ Другая сторона выразила свою беспомощность 😅
Таким образом, будет следующий результат
Этот бесконечный набор кукол действительно жесток, мы должны твердо веритьСправедливость всегда побеждает, мы не можем дать шанс людям, которые хотят незаконно отлаживать нашу программу, поэтому мы должны принимать во внимание всевозможные ситуации,Можно сказать, что этот метод самый ненавистный, но это еще не конец~(Хороший парень~ 😀 Если вы хотите нелегально отлаживать мою программу, то вы должны победить меня)
Усильте вышеперечисленные методы
Поскольку приведенный выше код не зашифрован и не запутан, его все равно могут прочитать другие, поэтому давайте зашифруем и замаскируем его, чтобы посмотреть, как он выглядит.
чувак, как ты это читаешь?
eval(function(c,g,a,b,d,e){d=String;if(!"".replace(/^/,String)){for(;a--;)e[a]=b[a]||a;b=[function(f){return e[f]}];d=function(){return"\\w+"};a=1}for(;a--;)b[a]&&(c=c.replace(new RegExp("\\b"+d(a)+"\\b","g"),b[a]));return c}('(()=>{1 0(){2(()=>{3("4")()},5)}6{0()}7(8){}})();',9,9,"block function setInterval Function debugger 50 try catch err".split(" "),0,{}));
Как это выглядит после форматирования
Мы продолжаем трансформировать код, чтобы другой стороне было как можно сложнее распознать наш код.
БудуFunction("debugger").call()
изменить на(function(){return false;})["constructor"]("debugger")["call"]();
И добавьте условие, когда разница между внешней шириной и высотой окна и внутренней шириной и высотой больше определенного значения, я удалю все содержимое в теле и посмотрю, сможете ли вы по-прежнему управлять моими кнопками. ~ Хахаха 😀
Необходимо отметить, что: Для таких проектов, как toG или некоторых для защиты своих авторских прав или некоторых более конфиденциальных проектов, лучше не позволять другим выполнять отладку после развертывания в рабочей среде по соображениям безопасности. сотрудничайте с фронтом и бэкендом, вы можете хорошо защитить конфиденциальность проекта или данных🧡
И, наконец: прикрепите этот необфусцированный с трудом полученный код (не забудьте использовать его после обфускации~)😢 Обязательно поставьте лайк и подпишитесь~ Оригинальность непроста.
Вы можете использовать его в качестве служебной функции и ссылаться на него в проектах, которые не нужно легко отлаживать другим.(Конечно, у него все еще много лазейки, но мы можем использовать аналогичный логический метод для изменения большого количества сложных ограничений, самый насильственный может даже пройти, как только откроется консольwindow.close();
чтобы закрыть окно отладки), Добро пожаловать, чтобы оставить более интересный метод в области комментариев~Учимся вместе✨
(() => {
function block() {
if (
window.outerHeight - window.innerHeight > 200 ||
window.outerWidth - window.innerWidth > 200
) {
document.body.innerHTML =
"检测到非法调试,请关闭后刷新重试!";
}
setInterval(() => {
(function () {
return false;
}
["constructor"]("debugger")
["call"]());
}, 50);
}
try {
block();
} catch (err) {}
})();
Посоветуйте небольшой трюк для отладки страницы
Сказав так много о предотвращении отладки, я, наконец, также расскажу о методе стиля отладки, который, как мне кажется, сейчас наиболее актуален.
Даваяstyle
добавить тегиstyle="display: block"
,contenteditable
Два свойства реализуют удобные стили отладки на странице.
Скопируйте приведенный ниже код в свой html-файл и поэкспериментируйте с ним~
<!DOCTYPE html>
<body>
<div>来调试我吧~</div>
<style style="display: block" contenteditable>
body {
background-color: rgb(140, 209, 230);
color: white;
}
div {
background-color: green;
width: 300px;
height: 300px;
line-height: 300px;
text-align: center;
}
</style>
</body>
наконец
Единственный известный мне способ запретить отладку описан выше, но должно быть очень весело, друзья могут оставить сообщение в области комментариев и учиться вместе~
Последний вопрос,Как следить, открыта ли консоль(Внутри и снаружи окна, о чем я упоминал выше, на самом деле можно обойти с помощью отдельного окна отладки), я нашел некоторые методы в Интернете, это кажется бесполезным, я заинтересован и имею представление, или друзья, у которых уже есть метод, могут поделиться своими идеями в комментариях ниже, или вы можете присоединиться к нашей группе обмена, чтобы играть вместе ~
Я Жундин, и я рад быть здесь с вами, чтобы стать сильнее! ВместеУдачного программирования!😉
Если вы также любите технологии, связанные с интерфейсом! Добро пожаловать в мой маленький секретный круг~ 🦄 Нажмите →здесь