Как известно, скрипты 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-скриптов, чтобы защитить свою интеллектуальную собственность, позволяющая организовать демонстрацию работы скрипта без риска его кражи.
Комментарии к статье:
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
Добавить комментарий: