Подтвердить что ты не робот

Как скомпилировать оболочку linux script как автономный исполняемый файл * двоичный * (то есть не только, например, chmod 755)?

Я ищу бесплатный набор инструментов с открытым исходным кодом, который будет компилировать различные "классические" языки сценариев, например. Korn Shell, ksh, csh, bash и т.д. В качестве исполняемого файла - и если script вызывает другие программы или исполняемые файлы, для их включения в один исполняемый файл.

Причины:

  • Чтобы запутать код доставки для клиента, чтобы не раскрывать нашу Интеллектуальную собственность - для доставки на собственную машину/систему клиента, для которой я не могу контролировать, какие разрешения я могу установить для доступа, поэтому файл программы должен быть двоичным, в результате чего результаты работы не могут быть легко видны при просмотре в текстовом редакторе или в режиме просмотра hexdump.

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

Я бы предпочел что-то простое без необходимости в менеджере пакетов с:

  • Я не могу полагаться на знания клиентов для выполнения (un) инструкций по упаковке и

  • Я не могу полагаться на политики, управляющие их машинами относительно установки пакетов (и действительно от третьих сторон).

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

4b9b3361

Ответ 1

Решение, полностью отвечающее моим потребностям, будет SHC - бесплатный инструмент или CCsh - коммерческий инструмент. Оба компилируют сценарии оболочки на C, которые затем могут быть скомпилированы с использованием компилятора C.

Ссылки о SHC:

Ссылки о CCsh:

Ответ 2

Вы можете использовать это: http://megastep.org/makeself/

Это создает оболочку script, которая автоматически извлекает связанный архив tar.gz во временный каталог и затем может запускать произвольную команду при извлечении.

С помощью этого инструмента вы можете предоставить клиенту только одну оболочку script.

Этот script затем будет извлекать ваши запущенные скрипты и двоичные файлы из bbbb в /tmp и прозрачно запускать их.

Ответ 3

Вы можете обфускать сценарии оболочки с помощью что-то вроде ofbsh. Однако вы не сможете легко объединить другие программы в один исполняемый файл для unix. Обычно подход к установке должен заключаться в том, чтобы загрузить пакет для вашего менеджера пакетов пакетов (например, rpm, deb, pkg) или предоставить tarball для разрастания в соответствующем каталоге.

Если вам нужен исполняемый файл, который распаковывает содержимое, вы можете использовать архив оболочки. Взгляните на документы для shar (1) и посмотрите, получится ли то, что вы хотите

Если вам действительно нужна возможность сценариев для склейки нескольких программ на C, взгляните на язык Tcl. Он имеет API, который предназначен для тривиального переноса программ на C, которые ожидают увидеть параметры стиля argv[]. Вы даже можете встраивать куски кода C в собственный интерпретатор Tcl и склеивать его вместе с различными сценариями Tcl.

Если вам действительно нужно сделать это непрозрачным, вы можете зашифровать сценарии tcl и обернуть все это тем, что расшифровывает сценарии tcl в буфер, а затем запускает на них интерпретатор Tcl. Tcl может принимать сценарии из файла или буфера char*, поэтому незашифрованные скрипты никогда не попадают в файловую систему.

Ответ 4

shc

Я изменил исходный источник и обновился до новой версии с некоторыми дополнениями и исправлениями ошибок. Это здесь.

Пример использования:

shc -f script.sh -o binary_name

script.sh будет скомпилирован в двоичный файл с именем binary_name

Обратите внимание, что для запуска этого исполняемого файла вам все еще нужна требуемая оболочка, которая будет установлена ​​в вашей системе.

Ответ 5

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

Ответ 6

Доступные для вас параметры:

  • Напишите логику в коде, которая, когда код запускается в первый раз в поле, проверяет, существуют ли все необходимые пакеты. И если они этого не сделают, код автоматически запустит сам пакет и установит их... без запроса пользователю что-либо сделать. Единственный вопрос, который нужно задать пользователю: "Можно ли продолжить установку вышеупомянутых пакетов? (Y/N)". Все, что за пределами этого, слишком много.

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

Существует несколько преимуществ этой конкретной опции:

  • Да, вы сможете запустить зашифрованную версию вашего script без предоставления какой-либо проприетарной информации.
  • Никто не может попытаться "просмотреть" ваш script, потому что, если они это сделают, они не видят ничего, кроме неразборчивого, зашифрованного жаргона, который не имеет для них смысла.
  • Никто не может попытаться изменить ваш script, потому что, если они это сделают, script немедленно станет неработоспособным.
  • Никто не может запустить отладчик на вашем script, чтобы узнать, как он работает. Если они это сделают, script прервется.
  • Кроме того, никто не может создавать копии вашего script на том же сервере. Если они это сделают, он прервется и не будет работать. Это позволит пользователям создавать символические ссылки в исходное местоположение везде, где вы хотите, чтобы script был.

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

Не уверен, что это работает на других скриптах, но это, безусловно, для сценариев оболочки.

Ответ 7

Вы также можете использовать бесплатную онлайн-версию CCsh для компиляции оболочки script в двоичный файл: http://www.comeaucomputing.com/tryccsh/