Как скрыть код Bash скрипов

Очень часто на фрилансе бывает, так что заказчик просит сделать некоторую работу, получив тестовую версию, принимает её и отказывается платить.

Я на фрилансе достаточно часто делаю скрипты под заказ, администрирование серверов и тд, автоматизация неких процессов на сервер, уловив основную идею написания, как правило, заказчик пропадает, решив что это все так просто и не за что платить. Столкнувшись с понятием Обфуска́ция в С, решил поискать аналогичное решение и для своего любимого Bash. Разработчик некто Francisco Javier Rosales García Решение называется shc — транслятор Bash в C

Из опций особо понравилось

-e date
Expiration date in dd/mm/yyyy format [none]
-m message
 message to display upon expiration ["Please contact your provider"]

Скачать можно исходники по адресу www.datsi.fi.upm.es/~frosal/

Пример работы:

1) Создадим простейший Bash скрипт test.sh

#!/bin/bash echo "Hello" #вывод приветствия a=$1 #Первая введенная переменная echo $a #Вывод содержимого переменной

Проверяем

sh test.sh test
Hello WORD
test

2) Запустим shc и выполним преобразование

[user@server shc-3.8.7]$ ./shc -v -r -T -f test.sh

3) На выходе получаем

shc shll=bash
shc [-i]=-c
shc [-x]=exec '%s' "$@"
shc [-l]=
shc opts=
shc: cc test.sh.x.c -o test.sh.x
shc: strip test.sh.x
shc: chmod go-r test.sh.x

4) Проверка

./test.sh.x test
Hello WORD
test

Теперь по порядку

Создается файл test.sh.x.c — практически нечитаемое содержимое Сишного кода, его в любой момент можно скомпилить вручную используя cc компилятор.

Второй файл test.sh.x — уже бинарный, выполняется на любом практически Линуксе, проверил на 5ти (Gentoo, RHEL, Debian, ALT, OpenSuSE)

О производительности говорить не приходится, так как это неактуально, скрипты пишутся для других задач.

Источник http://habrahabr.ru/blogs/sandbox/139666/

Радмир Рамазанов

IT-специалист. Занимаюсь компьютерами, серверами, сайтами, телефонией. Пишу статьи про Windows, Linux, Android, периферийное оборудование, ошибки и их решения

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *