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