2015-01-23 1 views
3

Его мое понимание, что, когда я делаю драгоценный камень, я компилирую свой код ruby ​​в какую-то форму исполняемого файла, не так ли? Означает ли это, что, если кто-то не использовал методы интроспекции (что является приемлемым для меня риском), мой исходный код защищен?Если я поместил свой код ruby ​​в драгоценный камень, безопасен ли его исходный код?

+0

См. [Этот связанный вопрос] (http://stackoverflow.com/questions/10453249/viewing-a-gems-source-code) при распаковке исходного кода драгоценного камня. – taintedzodiac

ответ

3

Хотя можно скомпилировать Ruby-код в исполняемую или разделяемую библиотеку, используя Ruby's C API, что не имеет ничего общего с драгоценными камнями.

Драгоценный камень - это всего лишь коллекция кода Ruby (который может быть обычным скриптом или скомпилированными библиотеками) в хорошем пакете для использования с менеджером пакетов rubygems. Он не прилагает никаких усилий, чтобы скрыть/защитить код.

+0

Так как же я могу скомпилировать свой рубин в C? Есть ли учебник, который я мог бы использовать? –

+0

Ссылка на мой вопрос - это всеобъемлющий учебник по этой теме, предполагающий, что вам удобно писать C-код и немного разбираться в источнике Ruby. Однако, если вы рассматриваете C как метод обфускации, вы, вероятно, захотите перевести как можно больше вашего кода Ruby на вызовы API низкого уровня, что было бы нетривиальным. Я понятия не имею, насколько успешным было бы запутывание, которое даже было бы. – Max

1

Я думаю

gem unpack 

может извлечь код. Никогда не пытался это сделать и посмотреть, является ли он «удобочитаемым», но вы можете попробовать его, прежде чем публиковать свой драгоценный камень;)

+2

Это просто zipfile. –

4

Gem не является скомпилированным исполняемым файлом. Он не компилируется вообще. Ruby интерпретируется. Создание жемчужины просто связывает необходимые файлы вместе, подобно архиву zip или архиву tar.

Если вы хотите, чтобы ваш драгоценный камень был безопасным, вы должны держать его в стороне от rubygems.org. Вы можете настроить собственный собственный сервер драгоценных камней, или вы можете просто добавить свой камень в проекты, которые в нем нуждаются.

+1

Некоторые драгоценные камни _are_ скомпилированы. Но обычно исходный код включен, и они компилируются на месте, используя 'mkmf' lib. – Max

+0

bitbucket - хорошее, дешевое, безопасное место, насколько я могу судить –

1

Его понимание того, что когда я делаю драгоценный камень, я компилирую свой код ruby ​​в какой-то исполняемый файл, не так ли?

Нет. Это всего лишь zipfile с некоторыми метаданными. Содержимое zipfile - это именно то, что вы вкладываете в них.

Означает ли это, что, если кто-то не использовал методы самоанализа (что является приемлемым для меня фактором риска), мой исходный код является безопасным?

Это зависит от того, что вы подразумеваете под «безопасностью», но полностью ортогонально к RubyGems.

Если вы имеете в виду, что «его нельзя украсть», то это уже гарантировано для вас законом об авторском праве. Если вы не живете в действительно странной стране, программное обеспечение автоматически защищается авторским правом с момента его написания.

Если вы имеете в виду, что «невозможно создать обратную инженерию», то это невозможно. Если вы хотите, чтобы люди могли запускать вашу программу, вы должны предоставить их им в формате, который может быть понят CPU. Люди намного умнее компьютеров, поэтому, если программа может быть понята процессором, тогда ее также может понять человек.

Существует два общих пути, которые я буду называть «Nintendo way» и «Google way».

Способ Nintendo - предоставить пользователю процессор, а также программу, поэтому процессор пользователя не должен его понимать. Однако эта модель по-прежнему ошибочна. Пока вы даете пользователю что-то, он может понять это. В конце концов, это всего лишь математика и физика, которые можно понять. И пользователи довольно умны. Обратите внимание, что, например, большинство игровых консолей были , а не, взломанные злодейскими синдикатами, пытающимися украсть код или пиратские игры, нет, они были взломаны студентами, желающими запустить Linux или BSD на своем оборудовании.

Способ Google - предоставить пользователю ничего. Вы вводите что-то в поле поиска, Google отправляет вам результаты, но программное обеспечение никогда не покидает центр обработки данных Google.

+0

раз Я искал определение ортогонального и забыл его: 15+ –

+0

ортогональный: «статистически независимый» –

+0

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