Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как защитить свои скрипты (обфускация) (https://javascript.ru/forum/misc/10386-kak-zashhitit-svoi-skripty-obfuskaciya.html)

Gozar 01.07.2010 23:07

Как защитить свои скрипты (обфускация)
 
Потребовалось мне тут срочно запутать код для, так сказать, защиты от воров. И вот что пришло в голову за пол часа ваяния.

берём файл скрипта:
script.js


файл список функций для замены, по штуке на строку:
arr.txt


вида:
Block
Checker
...
Loader


а далее заменяем все функции из списка arr.txt в файле script.js на нечто следующее:
Block на ththththththhhthht
Checker на thththththhhhhthht
Loader на thhhthththhhhhthht


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

Защита не идеальная, но реализация проста.

Что думаете?

Octane 01.07.2010 23:14

Можно прогнать через обфускатор, а потом через jsbeautifier, и читать визуально различимые имена функций.

Gvozd 01.07.2010 23:36

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

Octane 01.07.2010 23:49

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

Gozar 01.07.2010 23:52

Цитата:

Сообщение от Gvozd (Сообщение 61918)
а вообще, кто захочет украсть-сделает это

Логику придется понять, а это самое главное.

B@rmaley.e><e 02.07.2010 00:11

А еще лучше - использовать только символы _ и $. Или юникодовые закорючки.
Но, как заметил Octane, повторная обфускация исправит названия переменных.

Gvozd 02.07.2010 01:57

Цитата:

Сообщение от B@rmaley.e><e
Или юникодовые закорючки.

вы таки читаете мои мысли)))

Kolyaj 02.07.2010 09:34

http://utf-8.jp/public/jjencode.html

Gozar 02.07.2010 11:12

Цитата:

Сообщение от B@rmaley.e><e (Сообщение 61925)
А еще лучше - использовать только символы _ и $. Или юникодовые закорючки.

чем лучше? пример, пожалуйста.

Цитата:

Сообщение от B@rmaley.e><e (Сообщение 61925)
Но, как заметил Octane, повторная обфускация исправит названия переменных.

дело в затраченном времени на это.

Цитата:

Сообщение от Kolyaj (Сообщение 61938)

не всё будет работать после применения, хотя этот вариант мне больше всего нравиться.

Я не претендую на шифрование кода, а только на приведение в плохо-читабельный вид.

B@rmaley.e><e 02.07.2010 11:59

Цитата:

Сообщение от Gozar
чем лучше?

Нечитабельностью.
__ = __.____()[___.__]


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

Gozar 02.07.2010 12:39

Цитата:

Сообщение от B@rmaley.e><e (Сообщение 61943)
Нечитабельностью.
__ = __.____()[___.__]

вам придется весь код превратить в такой, из-за чего он станет не рабочий в моем случае. и кстати читать такой код намного проще чем
tftftftftftftttf = tftftftftftfttff.tftftffftftftttf()[tftftftttftftttf.tffftftftftftttf]

Kolyaj 02.07.2010 12:42

Лучше l1 или O0.

Gvozd 02.07.2010 12:55

Kolyaj,
+1
в некоторых моноширинных шрифтах, эти символы выглядят идентично, что делает вообще невозможным читать код.
или можно пойти по стопам Whitespace

B@rmaley.e><e 02.07.2010 13:14

Цитата:

Сообщение от Gvozd
или можно пойти по стопам Whitespace

Какой пробельный символ можно использовать в имени переменной?

Kolyaj 02.07.2010 13:32

Пробельные символы нельзя использовать в именах идентификаторов, но можно любой (или не любой) юникодный символ
var 丠 = 1, 田 = 2;
alert([丠, 田]);

x-yuri 02.07.2010 14:56

Цитата:

Сообщение от Kolyaj
но можно любой (или не любой) юникодный символ

да уж, можно аниме начинать писать (;

Gozar, а это требование клиента?

Gvozd 02.07.2010 15:55

Цитата:

Сообщение от B@rmaley.e><e
Какой пробельный символ можно использовать в имени переменной?

Цитата:

Сообщение от Kolyaj
Пробельные символы нельзя использовать в именах идентификаторов

window[' 	']=function(){
var scope={};
scope['	 ']=123;
alert(scope['	 ']);
}
window[' 	']();

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

Kolyaj 02.07.2010 15:56

Gvozd,
это не идентификаторы :)

Gvozd 02.07.2010 15:57

Цитата:

Сообщение от Kolyaj
это не идентификаторы

спасибо, КЭП)))
но ведь могут полноценно использоваться вместо них.
или я не прав?

Kolyaj 02.07.2010 16:01

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

Gozar 02.07.2010 17:09

Цитата:

Сообщение от x-yuri (Сообщение 61969)
Gozar, а это требование клиента?

нет, это моё требование.

x-yuri 02.07.2010 22:06

имхо, не парься и не создавай себе проблем. В большинстве сулчаев это просто не имеет смысла ;)

http://phpclub.ru/talk/showthread.ph...284#post903284
http://phpclub.ru/talk/showthread.ph...548#post903548

и в конце концов, в каких единицах ты будешь оценивать сложность взлома? Думаю, в баксах самое оно: выложить на какой-то хакеро-форум, типа ребята, за сколько вломаете. А потом ведь надо еще прикинуть, на какую цену не согласятся потенциальные взломщики. Хотя можно, конечно, сделать настолько, насколько на _это_ есть время, но это не мой путь ниндзя :) Не люблю не знать, зачем я что-то делаю

p.s. интересно было бы узнать, что необходимо защитить для более предметной беседы

Gozar 02.07.2010 22:58

Цитата:

Сообщение от x-yuri (Сообщение 62023)
p.s. интересно было бы узнать, что необходимо защитить для более предметной беседы

Цитата:

Если у тебя стоящая идея, красть исходники никто не будет. Гораздо дешевле эту идею переработать, нанять прогеров, которые напишут ее быстрее и качественнее (т.е. минуя ошибки в развитии, которые ты прошел) - и все.
К моему большому сожалению я не могу защитить саму идею, код действительно легко написать, при этом даже не сильно важно насколько профессионально он написан.

Я просто пытаюсь выиграть время, сколько возможно и получить всё что успею. Любые идеи устаревают или крадутся большинством, как только это произойдет защищать будет нечего.

Gozar 02.07.2010 23:16

ps: хотя можно никому не показывать, а только давать пользоваться, но тут свои сложности.

x-yuri 03.07.2010 07:36

Цитата:

Сообщение от Gozar
Любые идеи устаревают или крадутся большинством, как только это произойдет защищать будет нечего.

или распространяются, автор может быть не против ;) я, пожалуй, за свободное распространение идей, хотя не все, к сожалению, со мной согласятся :(

Gozar 03.07.2010 08:15

Цитата:

Сообщение от x-yuri (Сообщение 62044)
или распространяются, автор может быть не против ;) я, пожалуй, за свободное распространение идей, хотя не все, к сожалению, со мной согласятся :(

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

PeaceCoder 03.07.2010 09:41

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

Gozar 03.07.2010 09:49

я считаю что нужно путать все и клиентские и серверные и может даже базу :)

Gvozd 03.07.2010 12:31

Цитата:

Сообщение от Gozar
может даже базу

я вижу что это шутка, но лучше так не шутить, а то новичек какой-нибудь всерьез примет)
надо не базы путать, а приложение защищать, чтобы никто к ним доступа не смогу получить(кроме тебя, хостера, и отдела К;) )

Gozar 03.07.2010 12:43

Цитата:

Сообщение от Gvozd (Сообщение 62057)
я вижу что это шутка, но лучше так не шутить, а то новичек какой-нибудь всерьез примет)

новичкам не надо это всерьез принимать они итак это ещё не разучились делать, для них база это "куча" ;)
они же разделы
create table razdel22555
создают. Я когда такой код вижу, аж дрожь пробирает :(

subzey 03.07.2010 18:15

ドキュメント.で要素を取得するidを('log').内部のHTML
:)

x-yuri 03.07.2010 19:09

давайте обфусцируем форум, будем общаться на японском или хотя бы на английском, а? (: А то идеи начнут распространятся O.o

B@rmaley.e><e 03.07.2010 21:15

x-yuri, достаточно просто всех забанить.

subzey 03.07.2010 23:47

С садистским блеском в глазах
TRUNCATE TABLE `users`;


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