Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Посоветуйте годный обфускатор! (https://javascript.ru/forum/misc/24759-posovetujjte-godnyjj-obfuskator.html)

Livaanderiamarum 13.01.2012 06:46

Посоветуйте годный обфускатор!
 
наподобие этого, только чтобы логику запутывал.
゚ω゚ノ= /`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) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ (o^_^o)+ (゚Д゚) .゚ω゚ノ+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ (o^_^o)+ (゚Д゚) .゚Д゚ノ+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ (o^_^o)+ (゚Д゚) .゚Θ゚ノ+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ (゚ー゚)+ (゚Д゚) ['c']+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ (o^_^o)+ (゚Д゚) .゚ω゚ノ+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ (o^_^o)+ (゚Д゚) .゚Д゚ノ+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ (゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ (o^_^o)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ (o^_^o)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ (o^_^o)+ (゚Д゚) .゚Д゚ノ+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ (゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ (o^_^o)+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ (o^_^o)+ ((゚ー゚) + (゚ー゚))+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ (o^_^o)+ (゚Д゚) ['c']+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ (o^_^o)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ (o^_^o)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ (゚ー゚)+ ((゚ー゚) + (゚ー゚))+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ (゚ー゚)+ (゚Д゚) ['c']+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ (゚ー゚)+ (゚Д゚) [゚Θ゚]+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ (o^_^o)+ (゚Д゚) .゚ー゚ノ+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ (o^_^o)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ (o^_^o)+ (゚Д゚) [゚Θ゚]+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ (o^_^o)+ ((゚ー゚) + (゚ー゚))+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ (o^_^o)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ (o^_^o)+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (c^_^o)+ (゚ー゚)+ (o^_^o)+ ((゚ー゚) + (゚ー゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_');

poorking 13.01.2012 11:20

Никогда не сталкивался, с этими штуками, только минификаторы, а вообще http://www.javascript-source.com/ там есть скрин "unreadable code", судя по нему логику запутывает точно, циклы например появляются ни с того ни с сего. Вот бесплатный http://www.javascriptobfuscator.com/default.aspx, но отличие от минификатора лишь в том, что переменные названы аля _0x3b59x15. Платных много. Вот еще бесплатный, результаты его часто видел http://www.bl2.ru/programing/jsobfuscator.html
Пример из сети:

// сорц
function CalculateSalary(aEmployees)
{
   var nEmpIndex = 0;
   while (nEmpIndex < aEmployees.length)
   {
      var oEmployee = aEmployees[nEmpIndex];
      oEmployee.fSalary = CalculateBaseSalary(oEmployee.nType, 

                                              oEmployee.nWorkingHours);
      if (oEmployee.bBonusAllowed == true)
      {
         oEmployee.fBonus = CalculateBonusSalary(oEmployee.nType, 
                                                 oEmployee.nWorkingHours, 
                                                 oEmployee.fSalary); 
      }
      else
      {
         oEmployee.fBonus = 0;
      }
      oEmployee.sSalaryColor = GetSalaryColor(oEmployee.fSalary + 
                                              oEmployee.fBonus);
      nEmpIndex++;
   }
}

//результат

eval(function(p,a,c,k,e,d){while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+c.toString(a)+'\\b','g'),k[c])}}return p}('a b(3){7 2=0;9(2<3.d){7 1=3[2];1.4=c(1.6,1.8);h(1.j==k)
{1.5=e(1.6,1.8,1.4)}i{1.5=0}1.f=g(1.4+1.5);2++}}',21,21,
'|oEmployee|nEmpIndex|aEmployees|fSalary|fBonus|nType|var|nWorkingHours|while|function|" + "CalculateSalary|CalculateBaseSalary|length|CalculateBonusSalary|sSalaryColor|GetSalaryColor|if|else|bBonusAllowed|true'.split('|')))

//Я перенес несколько строк в результате и добавил конкатенацию длинной строки чтобы страницу форума не растопыривать на весь экран по ширине




Если у вас реально что то очень ценное, что надо защитить, лучше серьезным чем то кодировать, а если так, чтоб в глаза не бросалось, на мой взглад хватит и вот этого packer-a

Livaanderiamarum,
Цитата:

Сообщение от Livaanderiamarum
наподобие этого, только чтобы логику запутывал.

А то в вашем примере, реально, будто и не обфусцировано ничего

Livaanderiamarum 13.01.2012 16:27

Цитата:

Сообщение от poorking (Сообщение 150094)
А то в вашем примере, реально, будто и не обфусцировано ничего

А в моем прмиере можно использовать дешифровщик и получить код. который можно отформатировать.

GuardCat 13.01.2012 16:38

Цитата:

Сообщение от Livaanderiamarum
можно использовать дешифровщик

Для дешифровки можно использовать криптологические функции js: toString() или alert() =). Ну бьютифайеру вначале код скормить тока, чтобы руками не искать начало функции. Обсуждали расшифровку похожего кода недавно.

poorking 13.01.2012 16:58

Livaanderiamarum,
Обфускатор - кодировщик, который кодирует текст кода в свою кодировку, да такую, чтобы интерпретатор ее понял, так что, теоретически, любой обфусцировванный код можно раскодировать, например (грубый пример) заменяет конструкции вида
variable = 5
на
eval ("variable = (function () { return 100 - 500 + 405; }())")
результат тот же, интерпретатору поф как это записано, а с точки зрения пользователя кода, записано не очень понятно. Цель - сделать непонятно, а не укрыть информацию. Зашифровать js (AES256 например) не получится, потому что иначе его не распарсит интерпретатор

devote 13.01.2012 17:02

Цитата:

Сообщение от poorking
заменяет конструкции вида

ну да тока это на производительность повлияет

poorking 13.01.2012 17:14

devote,
А я и не спорю, тут уже нужно на приоритеты смотреть, что важнее, сделать код кучей бесполезной каши для недоброжелателя или выиграть в производительности. На самом деле я пример с потолка привел, они то наверно поинтереснее что-то делают, не так грубо, и гораздо более эффективно. Хотя мне кажется не будет большого проигрыша в производительности, если код в виде строки эвалится, то это произойдет при загрузке страницы, он проинициализируется и все. Если кода 100000 строк, то да, тормознет на полсекунды сначала. Но лично я не вижу смысла js прятать, минификации достаточно вполне. Просто обычный код без комментов воспринимается хуже чем код с комментами например, а если там его минифицировать и переменные станут вида a,b,c,d,e, то уже можно будет потратить часы чтобы разобрать что имелось ввиду. Если код еще и обфусцировать, ну я думаю никому это не надо, пытаться украсть javascript, и что вообще такого гениального можно сделать, чтобы украсть захотелось, если приложение правильно сделано, то воровать будет нечего с клиенской машины

Livaanderiamarum 13.01.2012 17:38

Цитата:

Сообщение от poorking (Сообщение 150173)
Цель - сделать непонятно, а не укрыть информацию.

чувак, я доту расшифровал в свое время, я знаю для чего нужны обфуксаторы, во вторых суть в том чтобы человек не смог модифицировать код и использовать под свои нужды. То есть МАКСИМАЛЬНО слить его со средой.

poorking 13.01.2012 17:54

Livaanderiamarum,
Ну, и почему не хватает packer-а? Возьмите код из моего поста с примером его работы и попробуйте использовать его в своих целях, даже если вы приведете его к более божескому виду, то бишь декодируете и получите просто минифицированный вариант, все равно, что делает этот метод останется для вас загадкой. А уж тем более вы не сможете расширить его по той же причине. А в сырце по названию метода и переменных понятно что и для чего нужно. Предположим у вас фреймворк, который вы никому не даете, а используете только в своих проектах, который минифицируете GCC ADVANСED (даже паблик апи жмется), код которого настолько гениален и крут, что вы не хотите чтобы разработчики других фреймворков потырили у вас ваши гениальные решения, и кричали что это сделали они. Как можно украсть у вас какой то конкретный функционал, если не знать что красть?

Gozar 13.01.2012 18:01

С
Цитата:

Сообщение от poorking (Сообщение 150189)
GCC ADVANСED

даже обфускаторы никакие дополнительно не нужны, главное написать код, который после него работать будет :)

Gozar 13.01.2012 18:03

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

Livaanderiamarum 13.01.2012 18:04

Цитата:

Сообщение от Gozar (Сообщение 150197)
А можно просто вставить пару логических ловушек, без которых код работать не будет или будет не правильно. Всё зависит от сложности кода.

Да, именно это, то есть пароль генерируемый исходя из домена и времени, пароль я каждый месяц обновляю)))) ну ТИПА ТОГО))

Gozar 13.01.2012 18:19

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

Gozar 13.01.2012 18:23

Можно конечно взять blowfish и закодировать в него, поставить код вместе с функцией и давать пароль, но это уже паранойя. Я использовал, только для кодирования небольших сообщений.


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