четверг, 24 мая 2012 г.

Криптуем bash-скрипты с использование SHC

  1. Качаем и устанавливаем 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. Создаем тестовый скрипт
    $ 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
    Проверяем, что он работает
    $ chmod +x random.sh
    $ ./random.sh
    How many random numbers do you want to generate? 4
    16836
    14453
    15120
    11611
  3. Криптуем наш скрипт с помощью shc
    $ ./shc -f random.sh
    shc создает два файла
    $ 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 - исходный код random.sh на Си. Этот исходник компилируется и создается 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? 5
    8784
    24255
    31233
    23229
    18248
  5. Создаем скрипт с указанием даты экспайреда(опция -e, формат даты - dd/mm/yyyy)
    $ ./shc -e 31/12/2011 -f random.sh
    Проверяем:
    $ ./random.sh.x
    ./random.sh.x: has expired!
    Please contact your provider
    Указываем свое сообщение, выводимое в том случае, если скрипт заэкспейрен
    $ ./shc -e 31/12/2011 -m "Contact kuzzya@domain.com for new version of this script" -f random.sh
    
    И снова проверяем:
    $ ./random.sh.x
    ./random.sh.x: has expired!
    Contact kuzzya@domain.com for new version of this script
  6. Делаем распространяемым и прослеживаемым скрипт + смотрим подробно его создание
    $ ./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
    How many random numbers do you want to generate? 3
    8129
    30502
    11763