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