Привязка скрипта к компьютеру пользователя

  • Автор темы Автор темы mahoron
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

mahoron

Участник
Топикстартер
Сообщения
1
Реакции
0
Вот такая интересная проблема защиты возникла.

Само тело скрипта можно скрыть обфускаторм,
но как привязать скрипт к компьютеру пользователя?

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

Возможно достать номер лицензии InDesign из скрипта?
 
Ответ: Привязка скрипта к компьютеру пользователя

Вот такая интересная проблема защиты возникла.

Само тело скрипта можно скрыть обфускаторм,
но как привязать скрипт к компьютеру пользователя?

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

Возможно достать номер лицензии InDesign из скрипта?

Никакого обфускатора - индизайн хранит скрипты уже в откомпилированом виде, запаришься декодировать. К примеру, я свой декомпилятор так и до ума не довел - овчинка выделки не стоит.
Что касается номера лицензии - нет, насколько я знаю, не дает возможность версию получить.
Хотя, с другой стороны, есть же в скриптах возможность читать из бинарного файла - почему бы так не сделать? Из реестра, правда, скорее всего нельзя, но особо и не нужно - скрипты обычно относительно самого индизайна в определенной подпапке лежат. ;-)
 
Ответ: Привязка скрипта к компьютеру пользователя

У меня есть плагин для CS3-5 Mac/Win который выдает серийный номер ИнДизайна.
Из скрипта работает где-то так

alert(app.serialNumber);

Если есть вопросы - пишите в личку.
 
Ответ: Привязка скрипта к компьютеру пользователя

alert(app.serialNumber); работает в CS5 без дополнительных плагинов.
Проблема в том, что
а) в корпоративных версия один и тот же номер лицензии,
б) в "бесплатных" версиях то же такое может быть :)
 
Ответ: Привязка скрипта к компьютеру пользователя

ну тогда можно через vbs mac-адрес считывать
 
Ответ: Привязка скрипта к компьютеру пользователя

ну тогда можно через vbs mac-адрес считывать

Я ж говорю, проще всего создать какой-нибудь незаметный файлик в программном каталоге индейца и привязываться к нему.
 
Ответ: Привязка скрипта к компьютеру пользователя

Любое обращение к файловой системе легко можно вычислить.
Не, тут либо через app.insertLabel(), либо вообще онлайн-активация: при первом запуске скрипт запоминает мак-адрес (app.insertLabel()), потом отправляет его в удаленную базу и в ответ получает благословение :), соответственно если база обнаруживает что лимит исчерпан - скрипт на такой машине не запустится; а при последующих запусках скрипт будет только проверять (app.extractLabel() ) чтобы мак-адрес не поменялся. По-моему, такую схему будет трудно обойти.
 
Ответ: Привязка скрипта к компьютеру пользователя

лейблы можно обнулить, вообще-то :)
Правда, это всего лишь запустит триал (если по количеству запусков или количеству дней) заново. Чтобы это было маловдохновляюще можно всякие алерты выбрасывать :)
Вопрос — как считать мак-адрес на маке?
Можно и не мак-адрес. Можно генерить некую уникальную строку для каждого компа — невеликого ума дело-то.
 
Ответ: Привязка скрипта к компьютеру пользователя

До какой степени нужна привязка? Если допустима переустановка системы, то кроме MAC-адреса мало что можно "прихватить". Правда, MAC-адрес легко сменить.
Двадцать лет назад я применял привязку к картине разрушения динамической памяти при кратковременном отключении ее регенерации. На некоторых моделях ZX-Spectrum такое удавалось. Если при 30%-ном разрушении содержимого памяти картина потерь совпадала хотя-бы на 50%, считалось, что компьютер тот-же.
Не знаю, возможно ли "точечное" отключение регенерации RAM на современных компьютерах, да еще и без разваливания системы при этом?
 
Ответ: Привязка скрипта к компьютеру пользователя

либо вообще онлайн-активация: при первом запуске скрипт запоминает мак-адрес (app.insertLabel()), потом отправляет его в удаленную базу и в ответ получает благословение :)

Зачем же такие сложности, все равно на поверхности все эти ухищрения - защита "от дурака", к примеру, найти и обезвредить вызовы insertLabel и extractLabel в откомпилированом скрипте - элементарно. Тем более, как скрипт отсылать данные через интернет будет? Внешней программой? Так тем более это - уши, за которые можно всю защиту оторвать.
 
Ответ: Привязка скрипта к компьютеру пользователя

применял привязку к картине разрушения динамической памяти
офигеть, ну прям Матрица какая-то :)

как скрипт отсылать данные через интернет будет? Внешней программой?
через Socket.
Конечно, выход в инет перехватывается и считывается. Ну и что? В описанной мной схеме скрипт отсылает свой мак-адрес только один раз, соответственно, если будет попытка запустить скрипт с таким-же маком с другой машины, удаленная база уже добро не даст. Пожалуй, тут действительно, как сказал vbatushev, проще генерить и отсылать какой-нибудь id.

что - таки доделал свою "ломалку"? :y)

и обезвредить вызовы insertLabel и extractLabel в откомпилированом скрипте - элементарно.
Код:
var status = false;
if( app.extractLabel(key) )
 status = true;
if( !status )
 exit();
враг не пройдет :)
 
Ответ: Привязка скрипта к компьютеру пользователя

через Socket.
Конечно, выход в инет перехватывается и считывается.

Во-во. Не сложнее, чем отследить обращение к обычному ключевому файлу. ;-)

что - таки доделал свою "ломалку"? :y)

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

Код:
var status = false;
if( app.extractLabel(key) )
 status = true;
if( !status )
 exit();
враг не пройдет :)

Да конечно! Как малые дети, ей-богу, прописные истины объяснять приходится. ;-)
Строка "if( app.extractLabel(key) )" выкидывается полностью или "exit()" или, вообще вся эта конструкция находится и выкидывается.
Насколько я понимаю, в откомпилированном скрипте даже ссылок на смещения внутри файла или размеры блоков кода нету - вся привязка только по номерам строк. Следовательно, удалив текстовым редактором блок кода, соответствующий данной строке получаем вполне работоспособный скрипт.
 
Ответ: Привязка скрипта к компьютеру пользователя

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

Строка "if( app.extractLabel(key) )" выкидывается полностью или "exit()" или, вообще вся эта конструкция находится и выкидывается.
Мой пример - только для примера. Понятно, что на деле все будет куда заковыристей.
Код:
if( status ){
/*работа всего скрипта*/
}
как здесь быть?
или так:
Код:
eval( jsxbin_string );
где jsxbin_string - откомпилированая строка, в которой могут быть какие-угодно процедуры: создание переменных, к которым потом будет обращение, переопределение функций.

Впрочем, если твоя программа уже настолько хорошо декодирует, то конечно тут наверно уже ниче не спасет :)
 
Ответ: Привязка скрипта к компьютеру пользователя

Код:
if( status ){
/*работа всего скрипта*/
}
как здесь быть?

Тут как раз элементарно: выкидывается первая строка и вперед! :-D

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

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

ага! таки перехитрил '%)'
 
Ответ: Привязка скрипта к компьютеру пользователя

ага! таки перехитрил '%)'

Не факт! Ловим тот момент, когда недостающий кусок кода уже скачан или расшифрован, сохраняем его, а потом отвязываем от компа вышеописанным образом.
На всякую хитрую жабу есть хитрый хрущ с винтом :-)
 
Ответ: Привязка скрипта к компьютеру пользователя

перебрасывать jsxbin_string по инету я не предлагаю, считаю это излишним. достаточно из него реализовать app.insert/extractLabel, и ты уже не будешь знать этого, и тем более какой key используется.

Ловим тот момент, когда недостающий кусок кода ... расшифрован
это как?
 
Ответ: Привязка скрипта к компьютеру пользователя

Ну, начать с того, что вызов eval лежит на поверхности - так?
Следовательно, на момент его вызова, строка уже сформирована.
Меняем eval, скажем, на alert - строка нам известна!
Далее процесс повторяется уже для этой строки. :-D
 
Статус
Закрыто для дальнейших ответов.