Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Шифрование JS-файлов?

156 views
Skip to first unread message

Dimon

unread,
Mar 26, 2009, 3:52:10 AM3/26/09
to
Hi All!

Скажите пожалуйста, чем зашифрованы JS-файлы в DataLife Engine?

Или может посоветуете какой-то хороший шифратор для JS?

Спасибо.


Peter B. Shalimoff

unread,
Mar 27, 2009, 12:01:09 AM3/27/09
to
Dimon wrote:
> Скажите пожалуйста, чем зашифрованы JS-файлы в DataLife Engine?

Пример кода?

> Или может посоветуете какой-то хороший шифратор для JS?

Для каких целей?

--
0xdeadbeef

Dimon

unread,
Mar 27, 2009, 3:26:25 AM3/27/09
to
Hi Peter B. Shalimoff!

>> Скажите пожалуйста, чем зашифрованы JS-файлы в DataLife Engine?
>
> Пример кода?
>

eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return
r[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}('a 2D(){7
z=9.I("1F");6(z!=C){z.h.1G="2E";z.h.O=1H().18+\'1i\'}};a 1H(){7
d=9,w=m,P=d.1I&&d.1I!=\'2F\'?d.s:d.t;7 b=d.t;7
1J=(w.Q&&m.1K)?w.Q+w.1K:1j.1k(b.1L,b.2G),18=(9.1l&&!m.1m)?1j.1k(P.1L,P.D):(d.s.D||8.Q);7
O=(9.1l&&!m.1m)?P.D:8.Q;q{18:1j.1k(18,1J),O:O,J:(9.1l&&!m.1m)?P.J:1n}};a
2H(){7 z=9.I("1F");6(z!=C){z.h.1G="2I";z.h.O="2J"}};a 2K(R){7
19=R.1M;1N((R=R.2L)!=C){19+=R.1M}q 19};a
S(){5.1o=\'\';5.o=\'\'};S.1p.1O=a(){K{6(!5.o){q}c{5.o.h.1q=\'1P\'}}L(e){q}};S.1p.1Q=a(){7
A=0;6(9.s&&9.s.J){A=9.s.J}c 6(9.t&&9.t.J){A=9.t.J}c 6(m.1n){A=m.1n}c
6(m.A){A=m.A}q
A};S.1p.1R=a(){5.29()};',62,230,'|||||this|if|var|self|document|function||else|||xmlhttp||style|||URLString|response|window||divobj|url|return||documentElement|body|length|js_arr|||elementObj|busyLayer|scrollY|new|null|clientHeight|centerdiv|value|js_str|elemNodeName|getElementById|scrollTop|try|catch|urlVars|param_arr|height|iebody|innerHeight|obj|center_div|my_width|my_height|divheight|divwidth|setX|setY|method|true|innerHTML|name|varArray|replace|milisec|script|params_arr|pageHeight|top|clientWidth|add_html|loading_fired|split|for|urlstring|case|break|px|Math|max|all|opera|pageYOffset|divname|prototype|display|AjaxFailedAlert|requestFile|false|message|indexOf|jsfound|js_reg|exec|js_content_reg|mark_node|mark_parent_node|script_node|responseStatus|al|textarea'.split('|'),0,{}))

>> Или может посоветуете какой-то хороший шифратор для JS?
>
> Для каких целей?
>

Hу собственно для того, чтобы зашифровать файлы. Вот в ДЛЕ, если сохранить
страницу из браузера, JS файлы сохраняются в исходном виде (т.е. в таком,
как указано выше).

Я так думаю у них свой шифратор, верно?


Dmitry E. Oboukhov

unread,
Mar 27, 2009, 7:21:06 AM3/27/09
to
On 10:26 Fri 27 Mar , Dimon wrote:
D> From: "Dimon" <di...@parus.com.ua>

D> Hi Peter B. Shalimoff!

>>> Скажите пожалуйста, чем зашифрованы JS-файлы в DataLife Engine?
>>
>> Пример кода?
>>

D> eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return
D> r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new
D> RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('a 2D(){7
D> z=9.I("1F");6(z!=C){z.h.1G="2E";z.h.O=1H().18+\'1i\'}};a 1H(){7
D> d=9,w=m,P=d.1I&&d.1I!=\'2F\'?d.s:d.t;7 b=d.t;7
D> 1J=(w.Q&&m.1K)?w.Q+w.1K:1j.1k(b.1L,b.2G),18=(9.1l&&!m.1m)?1j.1k(P.1L,P.D):(d.s.D||8.Q);7
D> O=(9.1l&&!m.1m)?P.D:8.Q;q{18:1j.1k(18,1J),O:O,J:(9.1l&&!m.1m)?P.J:1n}};a
D> 2H(){7 z=9.I("1F");6(z!=C){z.h.1G="2I";z.h.O="2J"}};a 2K(R){7
D> 19=R.1M;1N((R=R.2L)!=C){19+=R.1M}q 19};a
D> S(){5.1o=\'\';5.o=\'\'};S.1p.1O=a(){K{6(!5.o){q}c{5.o.h.1q=\'1P\'}}L(e){q}};S.1p.1Q=a(){7
D> A=0;6(9.s&&9.s.J){A=9.s.J}c 6(9.t&&9.t.J){A=9.t.J}c 6(m.1n){A=m.1n}c
D> 6(m.A){A=m.A}q
D> A};S.1p.1R=a(){5.29()};',62,230,'|||||this|if|var|self|document|function||else|||xmlhttp||style|||URLString|response|window||divobj|url|return||documentElement|body|length|js_arr|||elementObj|busyLayer|scrollY|new|null|clientHeight|centerdiv|value|js_str|elemNodeName|getElementById|scrollTop|try|catch|urlVars|param_arr|height|iebody|innerHeight|obj|center_div|my_width|my_height|divheight|divwidth|setX|setY|method|true|innerHTML|name|varArray|replace|milisec|script|params_arr|pageHeight|top|clientWidth|add_html|loading_fired|split|for|urlstring|case|break|px|Math|max|all|opera|pageYOffset|divname|prototype|display|AjaxFailedAlert|requestFile|false|message|indexOf|jsfound|js_reg|exec|js_content_reg|mark_node|mark_parent_node|script_node|responseStatus|al|textarea'.split('|'),0,{}))

1. сохраняем в отдельный файл с именем tmp.js
2. натравливаем на него GNU indent

он выколупывает оттуда функцию-распаковщик и собственно мусор.
запустив распаковщик можем получить исходный код.

только оно тебе надо? шифруют обычно полнейшее говно.

>>> Или может посоветуете какой-то хороший шифратор для JS?
>>
>> Для каких целей?
>>

D> Hу собственно для того, чтобы зашифровать файлы. Вот в ДЛЕ, если сохранить
D> страницу из браузера, JS файлы сохраняются в исходном виде (т.е. в таком,
D> как указано выше).

D> Я так думаю у них свой шифратор, верно?

... Вместо того чтобы болтать что думаешь, думай что говоришь.

Peter B. Shalimoff

unread,
Mar 27, 2009, 9:54:00 AM3/27/09
to
Dimon wrote:
> >> Скажите пожалуйста, чем зашифрованы JS-файлы в DataLife Engine?
> > Пример кода?
> eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a

Hу да, как и ожидал: очередной вариант обфускатора на тему eval.
Собственно, любое шифрование скриптов, отдаваемых клиенту, сводится к
выполнению кода: либо через eval, либо через изменение структуры
документа (document.write("<script></script>"). Соответственно, взлом
заключается в переопределении нужной функции и ожидании момента, когда в
нее будет передан расшифрованный текст. Более сложный для взлома вариант
- изменение структуры документы через свойства его элементов (например,
innerHTML) - если я ничего не пропустил, то перехватить обращение к
свойству объекта можно только в Netscape/Gecko. Можно, конечно, сделать
постоянный опрос свойства через setInterval, но это ненадежно:
выполненный расшифрованный код может подчистить за собой. В любом
случае, называть это шифрованием язык не поворачивается, поскольку ключ
для восстановления исходного текста если и существует, то передается
клиенту, и все секреты - больше не секреты. Конкретно в этом случае они,
кажется, отдают себе отчет в этом и честно признаЮтся в параметрах
функции: это - сжатие (function (p,a,c,k,e,r)). Только функция -
unpacker, а не packer.

Взлом варианта, использующего eval, заключается в переопределении
функции eval:

<html>
<script>
// Hаписали шпионскую eval.
// В параметре str содержится расшифрованный текст.
function my_eval(str)
{
// Что у нас там?
alert("my_eval: str:\n" + str);

// Вызываем оригинальную функцию eval на случай,
// если расшифровка состоит из нескольких этапов:
// eval("eval(...)");
var res = old_eval(str);
alert("my_eval: res:\n" + res);
return res;
}

// Сохранили ссылку на оригинальную функцию eval.
var old_eval = eval;

// Заменили оригинальную eval на шпионскую.
eval = my_eval;
</script>
<!-- Поехали. -->
<script src="зашифрованное.js"></script>

С document.write - по аналогии.

Конкретно в этом случае переопределять ничего не надо: просто
форматируем по-человечески код function(p,a,c,k,e,r) и получаем алгоритм
декодера. После того, как становится известен алгоритм декодера,
написание кодера - тривиально. Если надо, могу расписать. Только смысл?

> >> Или может посоветуете какой-то хороший шифратор для JS?
> > Для каких целей?
> Hу собственно для того, чтобы зашифровать файлы.

Понятно, что шифратор нужен, чтобы зашифровать. Для каких целей
шифровать? Если цель - спрятать от клиента, то можно даже и не пытаться:
любое шифрование на стороне клиента будет взломано - вопрос времени и
денег. Если даже мелкомягкий закрытый Script Encoder сломали, то что уж
тут говорить про шифрование, использующее eval/DOM - оно ломается вообще
за шесть секунд. Я объяснения расписывал в разы дольше, чем "ломал". :)
А если цель - уменьшение размера, то обфускатор подойдет, гуглить
"javascript obfuscator".

--
0xdeadbeef

Dimon

unread,
Mar 27, 2009, 10:28:42 AM3/27/09
to
Hi All!

>Понятно, что шифратор нужен, чтобы зашифровать. Для каких целей
>шифровать? Если цель - спрятать от клиента, то можно даже и не пытаться:
>любое шифрование на стороне клиента будет взломано - вопрос времени и
>денег. Если даже мелкомягкий закрытый Script Encoder сломали, то что уж
>тут говорить про шифрование, использующее eval/DOM - оно ломается вообще
>за шесть секунд. Я объяснения расписывал в разы дольше, чем "ломал". :)
>А если цель - уменьшение размера, то обфускатор подойдет, гуглить
>"javascript obfuscator".

Спасибо большое за такое подробное объяснение. Понял, что заморачиваться
этим не стоит, а значит и не буду.

Еще раз, всем большое спасибо.


Mithgol the Webmaster

unread,
Mar 29, 2009, 9:52:28 AM3/29/09
to
~'^\V/^`~ Если кто плюсовать псевдонимы готов, `~^\V/^~'
" " Пусть увидит и имя: Сергей Соколов. " "

Так было 10:52 26 Mar 09 написано от Dimon к All:

Di> Скажите пожалуйста, чем зашифрованы JS-файлы в DataLife Engine?

Di> Или может посоветуете какой-то хороший шифратор для JS?

Подозреваю, что http://dean.edwards.name/packer/ является ответом на оба твои
вопроса; или, по крайней мере, на последний из них.


Фидонет будет великим и гипертекстовым! [Ru.Mozilla] http://Mithgol.Ru/
Mithgol the Webmaster. [Братство Нод] [Team А я меняю subj]

... Eсли человек по-настоящему хочет жить, то медицина бессильна. (C) unknown

Peter B. Shalimoff

unread,
Mar 30, 2009, 3:05:38 PM3/30/09
to
Mithgol the Webmaster wrote:

И снова, для особо одаренных: на хуй - это не здесь.

--
0xdeadbeef

0 new messages