Как скомпилировать скрипт оболочки Linux, чтобы он был автономным исполняемым * двоичным файлом * (т.е. не просто, например, chmod 755)? - PullRequest
40 голосов
/ 21 июня 2011

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

Причины:

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

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

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

  1. Я не могу полагаться на знания клиента, чтобы выполнить (un) инструкции по упаковке и

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

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

Ответы [ 7 ]

39 голосов
/ 22 июня 2011

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

Ссылки о SHC:

Ссылки о CCsh:

5 голосов
/ 21 июня 2011

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

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

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

Этот сценарий затем извлечет ваши ofbsh запутанные сценарии и двоичные файлы в / tmp и выполнит их прозрачно.

4 голосов
/ 21 июня 2011

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

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

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

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

2 голосов
/ 01 апреля 2015

shc

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

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

shc -f script.sh -o binary_name

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

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

1 голос
/ 31 марта 2016

Доступные вам опции:

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

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

Этот конкретный параметр имеет довольно много преимуществ:

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

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

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

1 голос
/ 30 апреля 2013

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

0 голосов
/ 27 декабря 2016

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

...