Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Не упускаем ли мы что-то очевидное? Увы, пока да.
Если расшифровывающий код будет выглядеть столь банально:
var encrypted= "...";
var source= decoding_function(encrypted);
eval(source);
то нет проблем написать утилиту, которая отыщет все подобные фрагменты, выполнит расшифровку и заменит вызов eval на расшифрованный код. Если даже source будет, в свою очередь, зашифрован – такую утилиту можно вызвать многократно.
Чтобы создание общей расшифровывающей утилиты было невозможно, надо сделать переменную encrypted вычисляемой – зависящей от хода выполнения программы. Например, если выполняется некий цикл, то он может «по пути» собирать encrypted сложением элементов массива строк. Для правильной сборки encrypted может, например, использоваться информация о времени выполнения участков программы.
Такой подход к шифрованию, наверное, невозможно полностью автоматизировать. Программисту придется самому заботиться о нетривиальной генерации переменных encrypted. Но зато теперь написание автоматической программы, полностью расшифровывающей весь JavaScript, может потребовать полного понимания логики работы программы, т.е. того самого, что мы скрываем.
Как мне кажется, мы более или менее защитили веб-приложение от «вскрытия» какими бы то ни было автоматическими сканерами, которые анализируют текст программы, не выполняя его. В терминах защиты обычных программ, компилируемых в машинные коды, мы защитились от дизассемблирования.
На банальном уровне мы также защитились от специальных средств исполнения программы вроде собственного интерпретатора JavaScript – теперь взломщику недостаточно «перехватить» пару операторов типа eval, чтобы получить «на блюдечке» первоначальные исходные тексты JavaScript-функций.
Тем не менее, работая с собственным средством исполнения JavaScript, в частности почти с любым качественным отладчиком, взломщик все же может, выполняя программу шаг за шагом, без особого труда реконструировать исходные тексты зашифрованных функций.
Для борьбы с подобным «on-line» взломом существуют специальные технологии, которые мы рассмотрим в следующем разделе.