Прячем 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 WORD" #вывод приветствия
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)

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

Similar posts

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 24

    –12
    Странные предпосылки.
    Касательно «заказчик не оплатит»: проще работать либо со 100% предоплатой, либо по времени.
      +20
      Касательно «заказчик не оплатит»: проще работать либо со 100% предоплатой, либо по времени.
      Работать-то проще, а вот получить работу со 100% предоплатой сложнее:)
        –4
        если ты хороший специалист, это совершенно не проблема.
          +8
          А если средненький — то работать нет необходимости, да?
            0
            тогда для тебя есть вариант 50%, пока не заработаешь себе имя.
        +9
        Очень часто бывает, что 100% оплатишь, а тебя фрилансер надует :)
        Вот если бы обфускатор для веб-денюшек…
          +4
          Ну тут главное достичь соглашения, я 100% оплаты стараюсь не брать, мне проще вначале выполнить работу, защитить ее и потом уже все отдавать и просить денюжку, оплата = исходники
          Так же никто не отменял гаранторов :) Если человек не идет на такие условия, значит что то не так
            0
            Согласен, гарант — очень нужная «вещь» в этом деле, есть только одно НО: Время… Время… Его так мало…
        +2
        Сталкивался с shc, выдрать исходник без проблем вообще, например тупо из gdb сдампить.
          +6
          Можно все, вопрос времени и знаний, но как то люди со знанием gdb не будут я думаю на фрилансе маленькие проектики заказывать, а потом кидать исполнителя)
            +16
            Заказчик, который умеет дампить сырцы из gdb (а также патчить KDE под FreeBSD), наверное, не будет искать фрилансера, чтобы он ему скрипты писал.
              0
              особо хитрые перцы могут одного попросить скрипты наваять, а потом другого сырцы сдампить за 10% от стоимости первоначальной работы. А заказчики 80lvl так вообще могут при этом никому не заплатить.
                0
                Все же не верю, что так будут поступать грамотные заказчики. Обычно так себя ведут необразованные нахрапистые люди, которые только в общих чертах разбираются в области нужного им заказа. А тут и возникает вопрос «откуда они могут знать, какую защиту поставил автор и что возможно сдампить сырец?»
              +4
              Справедливости ради, у shc дофига безопасности для такого уровня тулзы :)

              Например, по дефолту включен интересный функционал, который привязывает скрипт к конкретному /bin/sh, и не дает скрипту выполняться в другом окружении. Проверка целостности env'ов. Есть даже антиотладка (!!), которая не даёт втупую запустить скрипт из-под gdb или strace.

              Заказчик попотеет ради ста рублей, не считая испорченную репутацию ;)
              –3
              Один я не понял как echo «Hello» вывело Hello WORD?

              P.S. Статья понравилась, но ведь можно же просто в crontab удаление скриптом самого себя через какое-то время добавить.
                +1
                Ам… это я с Hello WORD ошибся)))) В начале была строчка с echo «Hello WORD», потом WORD удалил, а результат уже взял из хистори выполнения. (спасибо исправил)

                crontab — видимо вы несовсем поняли о чем идет речь, задача защитисть свои скрипты, а не удалять их из расписания отдав исходники.
                  –3
                  вы меня тоже не совсем верно поняли. я имел ввиду что-то типа
                  rm скрипт.sh
                  в кронтабе
                    0
                    Давайте думать вместе
                    Что будет удалять rm скрипт.sh, бинарный или исходный файл?
                    Кто управляет crontab?

                      –3
                      да. исходный.
                      управляет кроном, конечно же, рут.
                      но!
                      если человек не может написать скрипт самостоятельно, ему обычно нет разницы между бинарником и исходником. поэтому данный способ тоже имеет право на существование.
                        0
                        Не в ту степь но ладно
                        А кроном управляет любой юзер, у каждого он свой
                    +1
                    Тогда уж не WORD, а WORLD? )))))
                  0
                  А на FreeBSD работать будет?
                    +1
                    Будет, даже на mac работает
                    0
                    Интересный способ, спасибо!
                    {tol}На фриланс обычно отдают 2 типа заказчиков- одни знают как это работает, но хотят сэкономить время на другие цели и те кто не понимает в баше.
                    Для вторых можно ведь не изгаляться обфускацией, а сделать проверку по дате. Из серии: читаем, запоминаем, проверяем дата+срок триала, какое-то действие.
                    Для первых не возникнет необходимости снимать дамп и прочее, так как для них ресурс время ценнее чем деньги и вряд ли интересно что такое shc, почему так странно выглядит скрипт на баше и вообще что в действительности он будет делать.{/tol}

                    Only users with full accounts can post comments. Log in, please.