В этот прекрасный осенний выходной будем компилировать Bash-скрипт в бинарный файл. Да-да! И такое возможно.

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

Встречаем shc (Shell Script Compiler).

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
shc принимает скрипт, который указан в командной строке, и создаёт исходный код на C. Затем сгенерированный исходный код компилируется. Утилита shc сама по себе не является компилятором, она кодирует и шифрует сценарий оболочки.

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

На выходе получаешь исходник на сях и готовый бинарник. Ставится всё это дело так:

apt/yum install build-essential gcc
apt/yum install shc

Давай создадим бинарник:

shc -f test.sh

Рядом с файлом появятся ещё 2 файла: test.sh.x и test.sh.x.c (первый — это бинарник, второй — исходник).

Проверяем:

file test.sh.x
test.sh.x: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=c265ebae7158a2c51461e890c15fdacb1cc81cb1, for GNU/Linux 3.2.0, stripped

У shc есть множество ключей, к примеру, ты можешь задать триальный период, и бинарник будет превращаться в тыкву после определённой даты. Либо повысить уровень эвристики и запутать реверс-инженера.

Минус тут один: это не Golang, и бинарник будет работать на схожих Linux-системах. Но это не страшно: пишешь в README требования к запуску и снимаешь с себя ответственность.

Страница проекта на GitHub

Вечером увидимся, далеко не убегай. Давай.