Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   идеи обусфикации жаваскрипта (https://javascript.ru/forum/offtopic/46715-idei-obusfikacii-zhavaskripta.html)

macdack 20.04.2014 20:00

идеи обусфикации жаваскрипта
 
опытные же товарищи, прошу покумекать на тему замуднения кода - так чтобы гарантированно почти невозможно было бы понять как работает программа

основные простейшие приему не копипастить!
основы знаком

изменение имен и добавление левого кода - оцтойнные идеи не предлагать!
нравится непонятностью asm.js

тема скорее философская научно фантастическая - каким может быть идеальный фреймворк чтобы никто не понял итоговый код

Sweet 20.04.2014 20:59

Цитата:

Сообщение от macdack
чтобы гарантированно почти невозможно было бы понять как работает программа

Цитата:

Сообщение от macdack
тема скорее философская

Нужно, чтобы код писал jQuery-программист.

kobezzza 20.04.2014 21:55

GCC advanced mode

monolithed 20.04.2014 22:01

Больше хочется спросить зачем?

macdack 20.04.2014 22:12

мужики, херово я спрашиваю, ибо чайник

никакие доп обработки чужими программами
только своё

цель пожалуй обычная - защита интеллектуальной собственности

как писать на нормальном чистом жаваскрипте так чтобы никто не понял как это работает
вопрос к тем кто ресеринжинировал чужой код

вопрос к хакерам - что хакер не сможет понять, как можно хакеру мозг взорвать

повторяю - вопрос риторический и философский
в википедии не освещенный

Sweet 20.04.2014 22:20

Цитата:

Сообщение от macdack
как писать на нормальном чистом жаваскрипте так чтобы никто не понял как это работает

Очевидно же, что никак. Можно, конечно, стараться писать запутанно. Но это всегда можно распутать, если надо. И при этом велика вероятность, что сам запутаешься.
В общем, самый нормальный вариант - это тот же GCC. С одной стороны пишешь качественный код. А с другой - получаешь обфусцированный код.

macdack 20.04.2014 22:38

ссылку на GCC давайте сюда же

kobezzza 20.04.2014 23:35

https://developers.google.com/closure/compiler/
http://learn.javascript.ru/compress

melky 21.04.2014 10:03

Цитата:

Сообщение от kobezzza (Сообщение 308547)
GCC advanced mode

ну как сказать)

T-sh 21.04.2014 10:39

$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,
$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+
($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+
($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$$_$+$._$+$.$$__+$._+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+"\\"+
$.__$+$.$_$+$.$$_+$.__+".\\"+$.__$+$.$$_+$.$$$+"\\"+$.__$+$.$$_+$._$_+"\\"+
$.__$+$.$_$+$.__$+$.__+$.$$$_+"(\\\"\\"+$.__$+$.__$+$.___+$.$$$_+(![]+"")[$._$_]+
(![]+"")[$._$_]+$._$+", \\"+$.__$+$.$$_+$.$$$+$._$+"\\"+
$.__$+$.$$_+$._$_+(![]+"")[$._$_]+$.$$_$+"!\\\")\\"+$.$$$+$._$$+"\"")())();

monolithed 21.04.2014 10:48

Цитата:

Сообщение от kobezzza
GCC advanced mode

И держать пальцы что ничего не сломалось:

Source code:
var foo = {
  bar: true
};

if ('bar' in foo) {
   alert(true)
}


Compiled code:
"bar"in{a:!0}&&alert(!0);

Теперь представим, что у нас используется jQuery:

Source code:
$(document.body).html('404');

Compiled code:
$(document.body).a("404");

Конечно, можно потратить 1000 * n человекочасов чтобы причесать код под этот режим, но как мне кажется оно того не стоит, особенно когда в команде много разработчиков и штат переодически меняется.

monolithed 21.04.2014 10:49

T-sh,

на вскидку:

゚ω゚ノ= /`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) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_');

monolithed 21.04.2014 10:55

macdack,
Любой код, как бы он не был обфусцирован можно прочитать, например:

%@"%"@,~,%,!`_^[^_^]-;>`_^[^_^]%"!,^,:`_^[^_^]-@{-`{-?:`_[^_^]_-``-``-@@`_^[^_^]-`~-``-@$`_^[^_^]-``-``-@@`_^[^_^]-`~-``-@#`_^[^_^]-+~-/~-?;`_^[^_^]%!~-;-,;`_^[^_^]-"$-@~-@``_^[^_^]-{[-);-@:`_^[^_^]-/*,%`_^[^_^]`_^[^_^]`_^[^_^]`_^[^_^]%@$-@;-?;`_^[^_^]-/~-`&,#`_^[^_^]-`~-`{,*`_^[^_^]-@@-$!`_^[^_^]-:$,[,<`_^[^_^]-!|-.),!`_^[^_^]-@{-@`-/(`_^[^_^]`_^[^_^]`_^[^_^]`_^[^_^]-{!-{.,.`_^[^_^]-~/-/``_^[^_^]%""-}@$"`_^[^_^]%@@-!/,!`_^[^_^]-:*-=%`[[[[[[[[`^^^^^-%+)@@^^^!;@@_!,((,.((-$+)@*+@!!@-,!"(+@@,$-,!"($%&,&,&_&,"@"'%_&"',&$&-@*@$"


После дизасемблирования:

.
    mov     ax, cs
    mov     ds, ax
    mov     ah, 09h
    mov     dx, message
    int     21h
    mov     ax, 4c00h
    int     21h
message:
    db  "Hello, World", 0d, 0a, "$"

kobezzza 21.04.2014 10:58

Цитата:

И держать пальцы что ничего не сломалось:
Ну я и не говорил, что это будет просто :) Но с другой стороны если сразу писать под GCC, то всё не так уж и страшно.

Цитата:

Теперь представим, что у нас используется jQuery:
Для внешних библиотек необходимо подключать файлы экстернов.

monolithed 21.04.2014 11:00

Цитата:

Сообщение от kobezzza
Но с другой стороны если сразу писать под GCC, то всё не так уж и страшно.

Я пробовал, это требует очень больших усилий, и лишает удовольствия писать код.

kobezzza 21.04.2014 11:02

Цитата:

Сообщение от monolithed (Сообщение 308588)
Я пробовал, это требует очень больших усилий, и лишает удовольствия писать код.

Я тоже, и продолжаю эту практику, ибо набил руку:)

monolithed 21.04.2014 11:03

Цитата:

Сообщение от kobezzza
Я тоже, и продолжаю эту практику, ибо набил руку

Видимо ты один работал над проектом :)

kobezzza 21.04.2014 11:04

Цитата:

Сообщение от monolithed (Сообщение 308590)
Видимо ты один работал над проектом :)

Ну это да :)

Дзен-трансгуманист 21.04.2014 11:16

Цитата:

Сообщение от macdack
защита интеллектуальной собственности

Цитата:

Сообщение от macdack
вопрос риторический и философский

Хочешь философии?

Интеллектуальная собственность это та информация, над которой ты имеешь контроль, и до тех пор пока этот контроль никем не нарушен.

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

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

Вот тебе философия, простая как банный лист.

Интеллектуальная собственность это та информация, над которой ты имеешь контроль, и до тех пор пока этот контроль никем не нарушен. — (с) Папа Римский Ричард Бенедикт Столлман XVI

А вот тебе риторика:
Харе фигней страдать, иди код пиши! :)

melky 21.04.2014 11:40

Цитата:

Сообщение от monolithed
Теперь представим, что у нас используется jQuery:

для квери есть встроенные в архив экстерны. включается флагом --process_jquery_primitives

Цитата:

Сообщение от monolithed
И держать пальцы что ничего не сломалось:

вообще, редко ломается, если писать код с JSDOC. а писать с ним приходится, если нужен нормальный автокомплит :)

Цитата:

Сообщение от Дзен-трансгуманист
Вот тебе философия, простая как банный лист.

какая философия защиты от кидалова развернулась :)

monolithed 21.04.2014 12:51

Цитата:

Сообщение от melky
для квери есть встроенные в архив экстерны. включается флагом --process_jquery_primitives

А что ты будешь делать с другими внешними либами?
Цитата:

Сообщение от melky
вообще, редко ломается, если писать код с JSDOC.

Не верю!
Цитата:

Сообщение от melky
а писать с ним приходится, если нужен нормальный автокомплит

Ну мне на это по большей части пофиг. Инструкции пишу в основном для GCC.

kobezzza 21.04.2014 13:17

Цитата:

А что ты будешь делать с другими внешними либами?
Также подключать файл экстернов. Для большинства либ они уже есть готовые, но если вдруг нет - то это элементарно пишется самому.


learn.javascript.ru/gcc-advanced-optimization#экстерны


Цитата:

Не верю!
И зря:)

Aetae 21.04.2014 13:19

Цитата:

Сообщение от macdack (Сообщение 308551)
как писать на нормальном чистом жаваскрипте так чтобы никто не понял как это работает

http://learn.javascript.ru/write-unmain-code

monolithed 21.04.2014 13:38

Цитата:

Сообщение от kobezzza
И зря

По крайней мере пока, я не готов идти на такие жертвы, ради сокращения двух килобайтов кода.

melky 21.04.2014 18:32

Цитата:

Сообщение от monolithed (Сообщение 308614)
По крайней мере пока, я не готов идти на такие жертвы, ради сокращения двух килобайтов кода.

... и призрачного ускорения исполнения :)

серьёзно, я считаю, что либы должны поголовно сжиматься в advanced mode. код в продакшене либо совсем не сжимается (забывают, мб), либо сжимается под обычным режимом. как считаете?

kobezzza 21.04.2014 18:37

Ну, если либа сжимается, то почему бы её не сжать:)

monolithed 21.04.2014 18:48

Цитата:

Сообщение от melky
серьёзно, я считаю, что либы должны поголовно сжиматься в advanced mode

Мне кажется, что ты мало работал с advanced mode, раз смело делаешь такие заявления ;)

melky 22.04.2014 00:20

Цитата:

Сообщение от monolithed
Мне кажется, что ты мало работал с advanced mode, раз смело делаешь такие заявления

это в идеале :)
по работе в gruntfile стоят GCC advanced mode и CSSO. проблем пока не было

monolithed 22.04.2014 08:43

Цитата:

Сообщение от melky
проблем пока не было

Скорее всего ты о них не знаешь :)

Makarov 22.04.2014 10:31

+1 к monolithed, я тоже думал что advanced mode достаточно безопасен, пока не словил разочек баг, который проявлялся только в quirks mode IE8 и только на продакшне, и, как оказалось впоследствии, только в собранном файле. Полтора дня веселой отладки в попытке понять, как черт подери воспроизвести косяк, возникающий у клиентов регулярно. С тех пор отношусь к сборщикам более осторожно, но все равно использую)

macdack 22.04.2014 12:34

оох ребяты, всё вам надо разжевывать -

допустим кто-то создал на жаваскрипте нейросеть с некоторым функционалом ИИ - распознавание образов и тд
скомпилированная программа на жаваскрипте это миллион однотипных объектов с миллионами связей
- никто не сможет ничего понять никогда до тех пор пока сам не воссоздаст этот ии
при этом жаваскрипт становится подобен машинному коду

то есть, попытка понять логику работы программы это попытка понять архитектуру
большинство программистов работает по шаблону, в фреймворках и библиотеках - если написать программу в незнакомой архитектуре, с большей сложностью - то большинство если не все программисты обломятся пытаясь стырить технологии

melky 22.04.2014 12:53

macdack, читай тред. хватит GCC advanced mode. Возможно, придется выставить внутренние флаги типа advanced инлайна и другие - с этим поможет PLOVR. имхо, nuff said

Aetae 22.04.2014 13:47

Цитата:

Сообщение от macdack (Сообщение 308747)
если написать программу в незнакомой архитектуре

Если мы предложи тебе такую "архитектуру" то как минимум мы её уже будем понимать. Что знают двое то знают все.)

macdack 22.04.2014 15:20

Цитата:

Сообщение от Aetae (Сообщение 308767)
Если мы предложи тебе такую "архитектуру" то как минимум мы её уже будем понимать. Что знают двое то знают все.)

с русскими тяжело говорить - русские обычно асоциальные психопаты параноики ))

товарищи, я говорю о теории и о философии - если ума нет понять вопрос - дуй на свои js.галеры и не умничай

наверное же на ресурсе с таким именем найдутся люди у которых вопрос темы укладывается в голове
дорогие расеяне

kobezzza 22.04.2014 15:31

macdack, тебе уже неоднократно говорили ответ: GCC advanced mode, и даже давали ссылки, но ты это всё упорно игнориш.

macdack 22.04.2014 15:43

Цитата:

Сообщение от kobezzza (Сообщение 308789)
macdack, тебе уже неоднократно говорили ответ: GCC advanced mode, и даже давали ссылки, но ты это всё упорно игнориш.

блин человек, мне чо тебе несколько раз надо тут отвечать что эта хрень мне не подходит по тз

kobezzza 22.04.2014 16:09

Цитата:

Сообщение от macdack (Сообщение 308794)
блин человек, мне чо тебе несколько раз надо тут отвечать что эта хрень мне не подходит по тз

Ты ничего не писал про ТЗ и про то что не подходит. И что за ТЗ такое, которое запрещает юзать оптимизаторы кода?

В общем разбирайся сам, раз самый умный.

nerv_ 22.04.2014 16:11

Цитата:

Сообщение от macdack
допустим кто-то создал на жаваскрипте нейросеть с некоторым функционалом ИИ - распознавание образов и

...положил ее на сервер

macdack, таких "умных" как ты тут пробегает вагон и тележка. Заметь, именно пробегает. В добрый путь :)

Дзен-трансгуманист 22.04.2014 16:25

Цитата:

Сообщение от macdack
русские обычно асоциальные психопаты параноики

ахаха :D

Цитата:

Сообщение от macdack
нейросеть с некоторым функционалом ИИ - распознавание образов и тд
скомпилированная программа на жаваскрипте это миллион однотипных объектов с миллионами связей

Цитата:

Сообщение от kobezzza
ты это всё упорно игнориш

kobezzza,
Видимо, ему нужна машина Руба Голдберга, т.е. обфускация самого алгоритма, вычислительной схемы.)

А так, нейросеть из миллиона ребер и узлов это уже виселица в условиях js, даже обучать заебешься, не то что форкать и профилировать.))) Целые кластеры для таких вещей поднимают, а в домашних условиях спец-ПО ориентированное под GPU, например Theano. Хотя вероятно и на WebGL можно ускорить, но это товарисчу уж точно не по плечу. :)

Цитата:

Сообщение от Aetae
Что знают двое то знают все.

В цитатник. =)

kobezzza 22.04.2014 16:32

Цитата:

Хотя вероятно и на WebGL можно ускорить
Ну, пока к сожалению, аналогов той же CUDA C в браузере нету, и единственный способ что-то вынести на GPU - это через шейдеры, но тут сразу ограничение в том, что шейдеры принимают/возвращают только некоторое количество чисел, так что то ещё будет хакерство :)


Часовой пояс GMT +3, время: 10:05.