Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Борьба с отладчиками
Предположим, что взломщик располагает произвольным отладчиком, в худшем для нас случае написанным самим взломщиком. Иначе говоря, наш JavaScript исполняется в некоторой виртуальной среде, полностью подконтрольной взломщику.
Если при этом наше веб-приложение будет работать нормальным образом, то всякая защита окажется бесполезной. Взломщик в любом случае сможет проследить оператор за оператором, как исполняются все наши алгоритмы. Может быть, это будет не столь комфортно, как чтение прокомментированных исходных текстов, но в принципе задача взлома – изучение исходного кода для понимания его логики – будет решена.
Мы должны предусмотреть систему противодействия отладчику. Коротко говоря, мы должны добиться, чтобы под отладчиком веб-приложение не работало нормальным образом.
Тайминг
Основной способ борьбы с отладчиками – анализ времени выполнения программы. Очевидно, когда взломщик занимается «вскрытием» защиты и анализирует исполняемый код, программа выполняется несравненно медленнее, чем в нормальных условиях. Для языка JavaScript это, пожалуй, единственное, чем хороший отладчик «выдает себя» – в остальном все операторы JavaScript работают обычным образом.
Как этим воспользоваться?
Банальное решение – в случае чересчур долгого исполнения некоторого кода выдавать сообщение об ошибке – не годится. Взломщик просто «обойдет» соответствующую проверку, подправив «на лету» исполняемый JavaScript или изменив значение подходящей переменной. Надо быть хитрее.
Самое разумное – использовать результаты измерения времени выполнения очень часто, в частности, в циклах. По мере исполнения программы, в том числе в процессе расшифровки функций, должны постоянно выполняться замеры времени выполнения. Заведомо слишком большие времена должны приводить к тому, что начинает выполняться код, достаточно сложный и внешне похожий на нормальный, но на самом деле бесполезный и не имеющий отношения к решаемой задаче.
Чтобы «взломать» такую программу, последовательно «подделывая» все замеры времени, взломщику придется выполнить очень большую (возможно, астрономически большую) ручную работу. Причем малейшая ошибка взломщика будет приводить к тому, что он будет незаметно для себя переходить к анализу пустого и ненужного кода, который может заканчиваться неприятными тупиками типа зацикливания или открытия на экране тысяч окон-«пустышек».
Веб-сервер и электронная подпись