Как зашифровать свой скрипт оболочки Bash в Linux с помощью SHC

Вопрос:

Как зашифровать мой скрит оболочки bash в среде Linux?

Скрипт оболочки содержит пароль, и я не хочу, чтобы другие, у которых есть доступ для просмотра, просмотрели скрипт оболочки и получили пароль.

Есть ли способ зашифровать мой скрипт оболочки?

Ответ:

Во-первых, в качестве лучшей практики вам не следует шифровать ваш скрипт.

Вы должны правильно документировать свой скрипт оболочки, чтобы любой, кто его понимает, видел, что именно он делает.

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

При этом, если вы все еще настаиваете на шифровании, вы можете использовать утилиту SHC, как описано ниже.

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

Однако тот, кто понимает, как это работает, может извлечь исходный скрипт оболочки из зашифрованного двоичного файла, созданного shc.

SHC — это компилятор оболочки скрипта.

1. Скачайте shc и установите его

Скачайте shc и установите его, как показано ниже.

# wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.7.tgz
# tar xvfz shc-3.8.7.tgz
# cd shc-3.8.7
# make

Убедитесь, что shc установлен правильно.

$ ./shc -v
shc parse(-f): No source file specified

shc Usage: shc [-e date] [-m addr] [-i iopt] [-x cmnd] [-l lopt] [-rvDTCAh] -f script

2. Создайте скрипт

Создайте образец скрипта оболочки bash, который вы хотите зашифровать с помощью shc для целей тестирования.

Мы  создадим следующий скрипт оболочки random.sh, который генерирует случайные числа.

Вы должны указать, сколько случайных чисел вы хотите генерировать.

$ vi random.sh
#!/bin/bash

echo -n "How many random numbers do you want to generate? "
read max

for (( start = 1; start <= $max; start++ ))
do
  echo -e $RANDOM
done

$ ./random.sh
How many random numbers do you want to generate? 3
24682
1678
491

3. Шифрование скрипта bash с помощью shc

Зашифруйте скрипт random.sh с помощью shc, как показано ниже.

$ ./shc -f random.sh

Это создаст следующие два файла:

$ ls -l random.sh*
-rwxrw-r--. 1 ramesh ramesh   149 Mar 27 01:09 random.sh
-rwx-wx--x. 1 ramesh ramesh 11752 Mar 27 01:12 random.sh.x
-rw-rw-r--. 1 ramesh ramesh 10174 Mar 27 01:12 random.sh.x.c
  • random.sh — это оригинальный незашифрованный скрипт
  • random.sh.x — зашифрованный скрипт оболочки в двоичном формате
  • random.sh.x.c является исходным кодом C файла random.sh. Этот исходный код C скомпилирован для создания вышеупомянутого зашифрованного файла random.sh.x. Вся логика shc заключается в том, чтобы преобразовать скрипт shell.sh в программу random.sh.x.c C (и, конечно же, скомпилировать это для генерации исполняемого файла random.sh.x)
$ file random.sh
random.sh: Bourne-Again shell script text executable

$ file random.sh.x
random.sh.x: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

$ file random.sh.x.c
random.sh.x.c: ASCII C program text

4. Выполните  зашифрованной скрипт

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

$ ./random.sh.x
How many random numbers do you want to generate? 3
7489
10494
29627

Обратите внимание, что сам бинарный файл по-прежнему зависит от оболочки (первая строка, предоставленная в файле random.sh. то есть  /bin/bash), чтобы быть доступной для выполнения скрипта.

5. Указание даты истечения срока действия для скрипта вашей оболочки

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

Скажем, вы не хотите, чтобы кто-либо выполнял random.sh.x после 31 декабря 2018 года.

Создайте новый зашифрованный скрипт оболочки, используя опцию «shc -e», чтобы указать дату истечения срока действия.

Дата истечения срока указывается в формате dd / mm / yyyy.

$ ./shc -e 31/12/2011 -f random.sh

В этом примере, если кто-то попытается выполнить random.sh.x, после 31 декабря 2011 года они получат сообщение об истечении срока действия по умолчанию, как показано ниже.

$ ./random.sh.x
./random.sh.x: has expired!
Please contact your provider

Если вы хотите указать свое собственное сообщение об истечении срока действия, используйте параметр -m (вместе с опцией -e, как показано ниже).

$ ./shc -e 31/12/2011 -m "Твое время вышло" -f random.sh

$ ./random.sh.x
./random.sh.x: has expired!
Contact admin@thegeekstuff.com for new version of this script

6. Создание распространяемых зашифрованных скриптов

Помимо -e и -m (для истечения срока действия), вы также можете использовать следующие параметры:

  • -r будет ослаблять безопасность для создания распределяемого двоичного файла, который выполняется на других системах, которые работают с той же операционной системой, что и та, на которой он был скомпилирован.
  • -T позволит создавать созданные двоичные файлы с помощью таких программ, как strace, ltrace и т. д.
  • -v для подробностей

Как правило, вы можете использовать оба параметра -r и -T для создания распространяемого и прослеживаемого shell-скрипта оболочки, как показано ниже.

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

$ ./random.sh.x
How many random numbers do you want to generate? 3
28954
1410
15234

Наконец, стоит повторить еще раз: вы не должны шифровать ваш скрипт в первую очередь.

Но если вы решили зашифровать свой скрипт с помощью shc, помните, что умный человек все еще может сгенерировать исходный скрипт из зашифрованного двоичного файла, созданного shc.

 

cryptoparty

Cryptography is typically bypassed, not penetrated.

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

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

5e7fa976b0640d40