Сейчас: 09:55:58   20-го апреля 2024 г.
UsefulScript.ruОнлайн-сервисыОбфускация JavaScript
10
30

Скрытие JavaScript путем обфускации

В данной теме мы хотим рассказать Вам, как защитить имеющиеся на Вашем сайте JavaScript коды от копирования другими пользователями.


Сразу отметим, что данный способ не дает Вам гарантии защиты кода и не поможет Вам обмануть опытных пользователей, т.к. JavaScript код передается целиком в браузер, который должен без проблем его раскодировать. Неопытные пользователи (или новички), открыв исходный код страницы, будут приятно удивлены тому, что они там увидят.


Предположим, Вы не хотите, чтобы Ваш JavaScript код с молниеносной скоростью растащили на многие сайты. В данном случае мы хотим предложить Вам провести обфускацию JavaScript кода.


Обфускация это запутывание кода или приведение исходного текста (исполняемого кода программы) к виду, затрудняющему его анализ, но сохраняющего его функциональность.


Для примера возьмем JavaScript код из нашего скрипта Вывода текста в стиле матрицы:

JavaScript код:
<script type="text/javascript">
var 
max=0;
function 
arr(){
 
max=arr.arguments.length;
 for (
i=0i<maxi++) this[i]=arr.arguments[i];
}
txt = new arr("Привет...","Ты в матрице...","Или на UsefulScript.ru");
var 
x=0; var position=0; var len=txt[0].length;
function 
matrix_go(){
document.matrix_form.matrix.value=txt[x].substring(0,position) + "_";
if (
position++==len){
 
position=0;
 
setTimeout("matrix_go()"2000);
 if (++
x==maxx=0;
 
len=txt[x].length;
} else 
setTimeout("matrix_go()"140);
}
matrix_go()
</script>

Если мы воспользуемся онлайн-сервисом daftlogic.com и проведем обфускацию данного кода, то у нас получится вот такой код:

JavaScript код:
<script type="text/javascript">eval(function(p,a,c,k,e,d){
e=function(c){return c.toString(36)};
if(!
''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}
k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){
if(
k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}
(
'5 3=0;c 4(){3=4.b.8;e(i=0;i<3;i++)j[i]=4.b[i]}2=h 4("Привет...",
"Ты в матрице...","Или на g.f");5 1=0;5 7=0;5 9=2[0].8;c 6(){
o.r.s.q=2[1].k(0,7)+"p";a(7++==9){7=0;d("6()",l);a(++1==3)1=0;9=2[1].8}
m d("6()",n)}6()'
,29,29,'|x|txt|max|arr|var|matrix_go|position|length|len|
if|arguments|function|setTimeout|for|ru|UsefulScript|new||this|substring|2000|
else|140|document|_|value|matrix_form|matrix'
.split('|'),0,{}))
</script>

Теперь, попробуйте по очереди добавить на сайт исходный JavaScript код и JavaScript код, который мы получили в результате обфускации. Предварительно добавьте на страничку следующий HTML код:

HTML код:
<form name="matrix_form">
<
textarea name="matrix" rows="3" cols="40" style="background-color: #000000;
color: #66FF00; font-family: Arial; font-size: 16px; overflow: hidden;"
>
</
textarea>
</
form>

Как Вы видите, наш закодированный JavaScript код сохранил свою функциональность и прекрасно работает. При этом неопытному пользователю будет довольно непросто найти и модифицировать скрипт в таком виде. А если скриптов несколько, и они большие по своим размерам, то модификация в таком виде становится практически невозможной.


При желании, можно воспользоваться еще одним онлайн-сервисом javascriptobfuscator.com. При помощи данного онлайн-сервиса можно прогнать не исходный код, а тот, который у нас получился в результате обфускации онлайн-сервисом daftlogic.com. В результате получится еще более трудный для восприятия код:

JavaScript код:
<script type="text/javascript">
var 
_0x9cda=["\x35\x20\x33\x3D\x30\x3B\x63\x20\x34\x28\x29\x7B\x33\x3D\x34\x2E\x62\x2E\x38\x3B\
x65\x28\x69\x3D\x30\x3B\x69\x3C\x33\x3B\x69\x2B\x2B\x29\x6A\x5B\x69\x5D\x3D\x34\x2E\
x62\x5B\x69\x5D\x7D\x32\x3D\x68\x20\x34\x28\x22\u041F\u0440\u0438\u0432\u0435\u0442\
x2E\x2E\x2E\x22\x2C\x22\u0422\u044B\x20\u0432\x20\u043C\u0430\u0442\u0440\u0438\
u0446\u0435\x2E\x2E\x2E\x22\x2C\x22\u0418\u043B\u0438\x20\u043D\u0430\x20\x67\x2E\
x66\x22\x29\x3B\x35\x20\x31\x3D\x30\x3B\x35\x20\x37\x3D\x30\x3B\x35\x20\x39\x3D\x32\
x5B\x30\x5D\x2E\x38\x3B\x63\x20\x36\x28\x29\x7B\x6F\x2E\x72\x2E\x73\x2E\x71\x3D\x32\
x5B\x31\x5D\x2E\x6B\x28\x30\x2C\x37\x29\x2B\x22\x70\x22\x3B\x61\x28\x37\x2B\x2B\x3D\
x3D\x39\x29\x7B\x37\x3D\x30\x3B\x64\x28\x22\x36\x28\x29\x22\x2C\x6C\x29\x3B\x61\x28\
x2B\x2B\x31\x3D\x3D\x33\x29\x31\x3D\x30\x3B\x39\x3D\x32\x5B\x31\x5D\x2E\x38\x7D\x6D\
x20\x64\x28\x22\x36\x28\x29\x22\x2C\x6E\x29\x7D\x36\x28\x29"
,"\x7C","\x73\x70\x6C\
x69\x74"
,"\x7C\x78\x7C\x74\x78\x74\x7C\x6D\x61\x78\x7C\x61\x72\x72\x7C\x76\x61\x72\
x7C\x6D\x61\x74\x72\x69\x78\x5F\x67\x6F\x7C\x70\x6F\x73\x69\x74\x69\x6F\x6E\x7C\x6C\
x65\x6E\x67\x74\x68\x7C\x6C\x65\x6E\x7C\x69\x66\x7C\x61\x72\x67\x75\x6D\x65\x6E\x74\
x73\x7C\x66\x75\x6E\x63\x74\x69\x6F\x6E\x7C\x73\x65\x74\x54\x69\x6D\x65\x6F\x75\x74\
x7C\x66\x6F\x72\x7C\x72\x75\x7C\x55\x73\x65\x66\x75\x6C\x53\x63\x72\x69\x70\x74\x7C\
x6E\x65\x77\x7C\x7C\x74\x68\x69\x73\x7C\x73\x75\x62\x73\x74\x72\x69\x6E\x67\x7C\x32\
x30\x30\x30\x7C\x65\x6C\x73\x65\x7C\x31\x34\x30\x7C\x64\x6F\x63\x75\x6D\x65\x6E\x74\
x7C\x5F\x7C\x76\x61\x6C\x75\x65\x7C\x6D\x61\x74\x72\x69\x78\x5F\x66\x6F\x72\x6D\x7C\
x6D\x61\x74\x72\x69\x78"
,"\x72\x65\x70\x6C\x61\x63\x65","","\x5C\x77\x2B","\x5C\x62",
"\x67"];eval(function (_0x4332x1,_0x4332x2,_0x4332x3,_0x4332x4,_0x4332x5,_0x4332x6)
{
_0x4332x5=function (_0x4332x3){return _0x4332x3.toString(36);} ;
if(!
_0x9cda[5][_0x9cda[4]](/^/,String)){while(_0x4332x3--){_0x4332x6[
_0x4332x3.toString(_0x4332x2)]=_0x4332x4[_0x4332x3]||_0x4332x3.toString(_0x4332x2);}
;
_0x4332x4=[function (_0x4332x5){return _0x4332x6[_0x4332x5];} ];
_0x4332x5=function (){return _0x9cda[6];} ;_0x4332x3=1;} ;while(_0x4332x3--){
if(
_0x4332x4[_0x4332x3]){_0x4332x1=_0x4332x1[_0x9cda[4]]( new RegExp(_0x9cda[7]+
_0x4332x5(_0x4332x3)+_0x9cda[7],_0x9cda[8]),_0x4332x4[_0x4332x3]);} ;} ;
return 
_0x4332x1;} (_0x9cda[0],29,29,_0x9cda[3][_0x9cda[2]](_0x9cda[1]),0,{}));
</script>

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


Обращаем Ваше внимание на то, что открывающий тег <script type="text/javascript"> и закрывающий тег </script> кодировать при помощи онлайн-сервисов не нужно. А получившийся в результате кодирования JavaScript код стоит помещать внутрь данных тегов для того, чтобы браузер смог понять, что это JavaScript код. А если Вы закодируете теги, то у Вас получится двойная вложенность, и JavaScript код не будет работать.


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


Надеемся, данный способ поможет Вам если не скрыть JavaScript код, то существенно затруднить его копирование.

Дата создания: 22:15:32 14.06.2013 г.
Посещений: 14168 раз(а).

Комментарии посетителей (4 шт.):
Константин
0
# 2143
(14:49:24  19.12.2014 г.)

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

Administrator
1
# 2146
(20:02:48  19.12.2014 г.)

Если скрипт один, то ничего не мешает. Но на сайте могут быть десятки скриптов и тогда нужный код придется отделять от другого ненужного (лишнего), да и обратную ссылку на сайт можно туда добавить.
Ответить

Артем
-3
# 2358
(21:36:11  28.03.2015 г.)

А как обратно расшифровать?
Ответить

Administrator
0
# 2359
(22:05:10  28.03.2015 г.)

Как вариант, вместо "eval" вставьте "alert" и браузер сам произведет деобфускацию кода и выведет полученный результат на экран.
Ответить

Закрыть
Ваше имя:
112 + 5 =
Добавить комментарий:
Ваше имя:
112 + 5 =

Перед публикацией все комментарии проходят обязательную модерацию!

Если Вы хотите задать какой-либо вопрос, то сделайте это на нашем форуме.
Таким образом, Вы сможете быстрее получить ответ на интересующий Вас вопрос.
Посетителей онлайн: 2

Мешает ли Вам реклама?