CoderNotes - заметки программиста

Публикации  »  Bash
Скидка 65% на Skillbox

Получите скидку 65% на любой курс программирования на популярной образовательной платформе Skillbox!

Подробнее
Бесплатный хостинг + SSL-сертификат

Зарегистрируйте домен и получите 2 месяца бесплатного хостинга и SSL-сертификат на 1 год в подарок

Подробнее

Компиляция bash скриптов

Как известно, скрипты bash используются в открытом виде, но иногда может встать вопрос о том, чтобы спрятать исходных код bash скрипта, чтобы его не мог никто подсмотреть или изменить без вашего ведома. Для этого можно откомпилировать bash скрипт в машинный код с помощью программы shc, которую можно скачать по адресу http://www.datsi.fi.upm.es/~frosal/ На момент написания статьи можно скачать shc-3.8.9b.tgz (зеркало)

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

1-й этап. Подготовка программы

Скачаный архив сначала нужно распаковать командой tar xvf shc-3.8.9b.tgz, в результате получим папку с программой. Однако, она еще не готова к использованию, т.к. представляет собой просто сишную программу (файл shc-3.8.9b.с), поэтому ее необходимо сначала откомпилировать. Для компиляции исходников нужны пакеты "build-essential" (в системах на основе Debian) или "Development Tools" (CentOS). Для их установки можно использовать apt-get install build-essential для Debian и Ubuntu или yum groupinstall "Development Tools" для CentOS.

Далее выполняем компиляцию командой make shc. Теперь компилятор bash-скриптов готов к применению.

2-й этап. Компиляция bash-скрипта

Чтобы откомпилировать bash-скрипт, его нужно скопировать в папку с программой и выполнить команду shc -f script.sh, где вместо script.sh вы укажете свой bash-скрипт. После выполнения команды вы получите 2 файла: script.x.c - это переделанный на си ваш скрипт и script.x - собственно сам откомпилированный скрипт. В этом виде он абсолютно нечитаем, но при этом полностью работоспособен, как и исходный файл.

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

Опции запуска компилятора shc

-e date - дата срока действия программы (перестанет работать после этой даты) в формате dd/mm/yyyy
-m message - сообщение, которое будет написано по истечение срока действия программы (пишется в кавычках)
-f script_name - файл скрипта, который нужно откомпилировать
-i inline_option - указание опции для интерпретатора командной строки (например, -e)
-x comand - выполнить команду, в формате printf (например, exec(\\'%s\\',@ARGV);)
-l last_option - последняя опция для интерпретатора командной строки
-r - уменьшить безопасность, чтобы программа выполнялась на большинстве подобный операционных систем
-v - подробный вывод информации о процессе компиляции
-D - включение отладки exec
-T - разрешить трассировку откомпилированной программы, используя strace, ptrace, truss и т.д.
-C - вывести на экран лицензию и завершить выполнение программы
-A - вывести на экран произвольную информацию и завершить выполнение программы
-h - отобразить помощь по программе

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

 

Категория: Bash

Книги по теме:

Денис Колисниченко

Разработка Linux-приложений

Денис Колисниченко

Серверное применение Linux

Посмотреть все книги по программированию

Комментарии к статье:

25.08.21   Гость Даже не компилируется

root@Nitro-AN515-52:/data/data/shc-3.8.9b# make shc
cc -Wall shc.c -o shc
shc.c:1:4: error: expected '=', ',', ';', 'asm' or '__attribute__' before '-' token
1 | shc-3.8.9b.c
| ^
shc.c:1:5: error: too many decimal points in number
1 | shc-3.8.9b.c
| ^~~~~~~~
make: *** [makefile:31: shc] Error 1
17.01.23   Юрий Компилируется, но не исполняется

Добавить комментарий: