Защита кода от копирования

Допустим, мы защитили наш текст и картинки: при клике правой кнопкой меню больше не выпадает, выделить на странице ничего нельзя, горячие сочетания клавиш типа CTRL+C, CTRL+V не работают. Отлично! А как быть с кодом страницы? К примеру, у нас имеется уникальный скрипт, который можно долго и за дорого продавать. И мы очень не хотим делиться им с кем-то еще.

Здесь к нам на помощь приходят обфускаторы — специальные скрипты, которые путают код. То есть, они изменяют его настолько, что человек уже не сможет просто открыть исходный код страницы и сходу понять, что и как у вас работает. При этом, сам скрипт остается работоспособным. Несмотря на его внешний вид.

Существует несколько видов этих самых обфускаторов: от минимизаторов (убирают пробелы, комментарии и заменяют наши понятные переменные на буквенные типа a, b, c) до довольно интересных вариантов, которые на выходе выдают казалось бы пустую строку или набор из разных смайликов. В свою очередь, эти программы бывают как бесплатные, так и дорогостоящие — от $5000 и выше. Естественно, у бесплатных больше вероятность того, что где-то на просторах сети можно найти и деобфускатор (скрипт, который восстановит исходный код). Поэтому, каждый выбирает для себя сам.

Чтобы более полно понять, что же нам дают такие скрипты, давайте рассмотрим пример. Возьмем кусок скрипта и прогоним его несколькими обфускаторами, дабы убедиться, что после обработки нельзя будет определить, что делает наш скрипт.

Пример работы обфускатора

Возьмем фрагмент кода

$(document).ready(function() {  
$(".js-example").prepend("<div class='js-ex'><p class='p-ex'></p></div>");
$("body").mousemove(function (dot) {
 $(".p-ex").html('X:'+dot.pageX+', Y:'+dot.pageY);
 if(dot.pageY>1237||dot.pageY<1337){
 $(".js-ex").addClass("yellow-box"); 
 }; 
 if(dot.pageY<1237||dot.pageY>1337){
 $(".js-ex").removeClass("yellow-box"); 
 };
 if(dot.pageY>1337){
 $(".js-ex").fadeOut(1000); 
 };
 if(dot.pageY<1337){
 $(".js-ex").fadeIn(1000); 
 };
 }) 
});

Вариант 1. Берем бесплатный обфускатор на сайте www.myobfuscate.com. Получаем:

<script language="javascript" type="text/javascript">var _1O1='==wOpkSZwF2YzV2XoUGchN2cl5WdoUGdpJ3duQnbl1Wdj9GZ7kCMJlEKkxWaoNEZuVGcwFmLJ9
 EbKsTXwsVKnQWYlh2JoUWbh50ZhRVeCNHduVWblxWR0V2ZuQnbl1Wdj9GZg0DIJ9EbgIXY2pwOpwkUV5
 CduVWb1N2bkhCduVmbvBXbvNUSSVVZk92YuV2Kn0DbyVnJnsSKyVmcyVmZlJnL05WZtV3YvRGK05WZu9
 Gct92QJJVVlR2bj5WZrcSPmVmcmcyKns2b9MmczRXZn9zLt92YuUGdhN2c1ZmYvlXbukGch9yL6AHd0h
 2Jg0DIjJ3cuATSJpwOpcCdwlmcjN3JoQnbl1WZsVUZ0FWZyNmL05WZtV3YvRGI9ACMJlEIyFmd7cSRzU
 CdwlmcjN3LDNTJCNTJ5ITJEdTJBBTJwITJwITJwITJwITJwITJwITJCNTJ5ITJEdTJwITJwITJwITJwI
 TJBBTJCNTJEdTJwITJwITJwITJwITJBBTJCNTJ5ITJwADMxgjMl4WSlRWYm5SOyUiMyUCel1ycq5iMyU
 COyUCNyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUSQwUiQ3USOyUyNzMTMDNTJZV2ZhBnL09GZ4ITJmlGMyU
 CMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUSQwUiQzUCR3UCMyUCMyUCMyUCMyUSQwUiQzU
 SOyUCMwATM4ITJ0V3TlRWYm5SOyUiMyUCel1ycq5iMyUCOyUCNyUCMyUCMyUCMyUCMyUCMyUCMyUCMyU
 SQwUiQ3USOyUyNzMTMFNTJZV2ZhBnL09GZ4ITJmlGMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUSQwUiQzU
 CR3UCMyUCMyUCMyUCMyUSQwUiQzUSOyUiMyUCevJWL39GbsVWeyITJ4ITJzNXYsNUZ29WblJnL5ITJyI
 TJ4VWLzpmLyITJ4ITJ0ITJwITJwITJwITJwITJwITJwITJwITJBBTJCdTJ5ITJ3MzMxU0MlkVZnFGcuQ
 3bkN0NlM0NlczMyEzQzUSWldWYw5CdvRGOyUiZpBjMlAjMlAjMlAjMlEEMlI0MlQ0NlAjMlAjMlAjMlA
 jMlEEMlI0MlkjMlIjMlg3bi1ydvxGbllnMyUCOyUyczFGbDRGZh5SOyUiMyUCel1ycq5iMyUCOyUCNyU
 CMyUCMyUCMyUCMyUCMyUCMyUCMyUSQwUiQ3USOyUyNzMTMDNTJZV2ZhBnL09GZDdTJDdTJ3MjMxU0Mlk
 VZnFGcuQ3bkhjMlYWawITJwITJwITJwITJBBTJCNTJ5ITJZV2ZhBnL09GZrcjMlE0MlkFMyUyQyUyNyU
 yKYV2ZhBnL09GZrcjMlE0Mlg1NyUCOyUCbtRHaukjMlIjMlgXZtAnLyITJ4ITJ0ITJwITJwITJwITJwI
 TJBBTJCdTJwITJ5ITJ09GZ4ITJwITJu9Wa0Nmb1ZGOyUSZ29WblNXdv1mL5ITJyITJ5R2biJjMlgjMlQ
 jMlEEMlI0MlkjMlIjMlU0MlYXak9yQzUSRzUCcvM0MlU0MlcjMlgXZtA3NyUCRzUyczFGbjBjMlA3QzU
 SRzUyNyUCel1ycqdjMlQ0MlM3chx2YwITJ2lGZDNTJyITJ4ITJk5WZwVmcw5SOyUiMyUSZsBXbhhXZtM
 nauIjMlgjMlQjMlEEMlAjMlI0NlAjMlkjMlgjMl42bpR3YuVnZ4ITJ5RWYlJnL5ITJ05WZtV3YvRGOyU
 CNyUSRzUCdwlmcjN3QzUyJ9UGchN2cl9FIyFmd';var _0x84de=["ABCDEFGHIJKLMNOPQRSTUVWXYZ
 abcdefghijklmnopqrstuvwxyz0123456789+/=","","charAt",
 "indexOf","fromCharCode","length"];function I0O(data){var Ol1lOI=_0x84de[0];var o1,o2,o3,h1,h2,h3,h4,bits,i=0,enc=_0x84de[1];do{h1=Ol1lOI[_0x84de[3]](data[_0x84de[2]](i++));h2=Ol1lOI[_0x84de[3]](data[_0x84de[2]](i++));h3=Ol1lOI[_0x84de[3]](data[_0x84de[2]](i++));h4=Ol1lOI[_0x84de[3]](data[_0x84de[2]](i++));bits=h1<<18|h2<<12|h3<<6|h4;o1=bits>>16&0xff;o2=bits>>8&0xff;o3=bits&0xff;if(h3==64){enc+=String[_0x84de[4]](o1);} else {if(h4==64){enc+=String[_0x84de[4]](o1,o2);} else {enc+=String[_0x84de[4]](o1,o2,o3);} ;} ;} while(i<data[_0x84de[5]]);;return enc;} ;function Ol1(string){var ret=_0x84de[1],i=0;for(i=string[_0x84de[5]]-1;i>=0;i--){ret+=string[_0x84de[2]](i);} ;return ret;} ;eval(I0O(Ol1(_1O1)));</script>

И это без включения дополнительных функций. В принципе, неплохо. Новичка спугнёт 100%. Пойдем дальше.

Вариант 2. Это уже более впечатляюще, на мой взгляд (я не стал копировать всё, так как там несколько листов; покажу лишь общий вид):

$(([][(![]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+(![]+[]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]][([][(![]+[])[+[]]+(![]+[]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(![]+[])

Таким образом представлен весь код. Единственное слово — function, встречается один раз на протяжение всего скрипта примерно в середине. Интересный вариант. Ссылка: discogscounter.getfreehosting.co.uk

Вариант 3. Еще один забавный обфускатор — превращает код с смайлы (utf-8.jp). Вот фрагмент исходного скрипта:

゚ω゚ノ= /`m´)ノ ~┻━┻   //*´∇`*/ ['_']; o=(゚ー゚)  =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚];

Как видите, здесь нет ни единого слова. В оставшейся части также нет слов. Лишь такого рода символы в разных последовательностях. Пошли дальше.

Вариант 4. Самый интересный на мой взгляд! Во всяком случае, раньше я подобного не встречал. Здесь мне не удастся показать кусок текста, ибо текста там просто напросто нет. Лишь несколько пробелов, которые показать проблематично. Да и это не так наглядно, как если вы проделаете это сами и увидите воочию полученный код. Ссылка на ресурс: freedomscripts.org

Понравилась статья? Расскажи о ней друзьям!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *