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



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



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



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



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



tags: #linux #bash #utilites



💩 @bashdays