Как я могу зашифровать или сделать мой сценарий оболочки нечитаемым?


9

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


По моему мнению, у shc есть некоторые недостатки: у меня есть постоянный проект на github (obash), где я пытаюсь решить эти проблемы. Возможно, вы захотите узнать, подходит ли вам это лучше, чем SHC.
louigi600

Ответы:


11

SHC

Вы можете попробовать шаги, описанные на этом сайте, под названием: Как зашифровать скрипт Bash Shell в Linux с помощью SHC . В этой статье обсуждается использование инструмента под названием SHC - Shell script Compiler .

Ресурсы URL

Это исполняемый файл, который вы должны будете собрать, используя gcc / g ++.

Применение

$ ./shc -f random.sh

Как только вы запустите его, ваш скрипт random.shбудет преобразован в этот файл:

-rwx-wx--x. 1 ramesh ramesh 11752 Mar 27 01:12 random.sh.x

Это надежно?

Нет, есть хороший анализ метода, используемого инструментом SHC, который показывает, что он не слишком силен и его можно обойти, если вы знаете, что делаете. Статья была опубликована на веб-сайте linuxjournal.com под названием « Параноидальный пингвин - ограничения shc, утилита шифрования оболочки» .

ПРИМЕЧАНИЕ. Эти классы инструментов, вероятно, лучше описать как обфускаторы.


@Sim Спасибо. Есть ли способ расшифровать этот сценарий ???
Рам

@ Ram - да, это ни в коем случае не является надежным. Что ты пытаешься скрыть? Информация о пользователе / ​​пароле или просто как работает скрипт?
СЛМ

@ Сим Я пытаюсь скрыть, как работает скрипт?
Рам

@ Ram - ОК, это, наверное, нормально, я бы не советовал пытаться скрыть пароли. Когда я попробовал это приложение, оно вело себя немного странно на моем компьютере. Я бы попробовал, но получившиеся исполняемые файлы запускались так, как будто они были на заднем плане, и мне пришлось выполнить команду, fgчтобы вывести его на передний план, и тогда все заработало нормально. Я все еще ищу альтернативы.
СЛМ

9
Несмотря на название, SHC не шифрует скрипт каким-либо значимым образом. Шифрование подразумевает, что он расшифровывается перед использованием. Если скрипт может быть выполнен, он должен быть сначала расшифрован и может быть извлечен в этот момент. Преобразование программы, чтобы ее было сложнее понять, не меняя ее поведения, называется обфускацией. Это очень и очень редко стоит, и для сценария оболочки это является переоценкой его полезности.
Жиль "ТАК - перестань быть злым"

29

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

Если вы хотите, чтобы кто-то мог запускать скрипт, но не читать его, это совершенно другая проблема, которая не имеет ничего общего с шифрованием. Это называется запутывание .

Если у вас есть пароль или другая конфиденциальная информация в этом сценарии, никакая обфускация не сможет скрыть это. Рано или поздно скрипт будет использовать пароль, чтобы что-то сделать, и в этот момент пароль будет ясно виден всем, кто его ищет.

Если вы хотите скрыть, как работает ваш скрипт, потому что боитесь, что кто-то скопирует его, забудьте об этом. Никому нет дела.

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

Если вы хотите скрыть, как работает ваш скрипт, потому что вы хотите скрыть то, что он делает, это не выполнимо. Кто-то может посмотреть на ваш сценарий, пока он выполняется, и посмотреть, что он делает.

Если вы прочитали это далеко и все еще хотите «зашифровать» свой сценарий, вы неправильно понимаете что-то важное. Не отправляйте никому свой сценарий или отправляйте его в виде простого текста.


4
+1 за «никому нет дела». кроме того, что некоторые делать уход - я бы взять один взгляд на нечитаемом сценарий оболочки и думать «никоим образом не в аду я собираюсь бежать , что в моей системе».
Cas

1
Извините, людям все равно, и это важно. У вас есть перспектива, и существует альтернативная перспектива. У обоих будут те, кто берет. Между тем, ответ ниже хорошо работает для меня. Большую часть времени мы хотим защитить от случайных хакеров / пользователей. Хорошо поймите, что решительные хакеры сломают что-либо.
Анил

@anil Вы защищаете только от людей, которые не будут достаточно умны или компетентны, чтобы что-то делать с исходным кодом. Это может заставить вас чувствовать себя лучше, но не делает вас более защищенным.
Жиль "ТАК - прекрати быть злым"

@ Жиль, может, я неправильно тебя понял. Я на самом деле пытаюсь защитить от людей, которые могут что-то делать с исходным кодом, если у них есть (исходный код = содержание сценария). Только эти люди могут не знать, как взломать зашифрованный файл, не пытаясь понять, как это сделать. Против действительно решительного _ Я согласен, что нет действительно хорошей защиты.
Анил

11

Получил это при поиске в интернете, любезно предоставил Клаудио П.

  1. Напишите свой скрипт (script-base.sh)

    #!/bin/sh 
    echo "Hello World" 
    
  2. Зашифруйте ваш скрипт (укажите пароль):

    openssl enc -e -aes-256-cbc -a -in script-base.sh > script-enc 
  3. Напишите де Враппер (script-final.sh):

    #!/bin/sh 
    openssl enc -d -aes-256-cbc -a -in script-enc | sh - 
    
  4. Запустите «script-final.sh», введите пароль, и скрипт будет работать без записи простого текстового скрипта на диск.


1

По сути, вы можете запутать, но не скомпилировать свой скрипт. Простая причина в том, что сценарии оболочки интерпретируются отдельными командами, которые система должна выполнять одна за другой, и вы можете видеть эти команды, когда они выполняются системой одна с sh -xфлагом (и, возможно, также -v флаг)

Для большинства программистов этого будет достаточно, чтобы понять, что происходит.

Вы можете затемнять переменные и общий поток , если вы хотите, но вы не можете запутать indvidual команды , выполняемые по программе - что для сценариев оболочки , как правило , являются все из них.

Самым простым решением, вероятно, является переписывание сценария оболочки на скомпилированном языке, таком как C.


1
Даже скомпилированный двоичный файл может быть разобран и переработан, если он определен достаточно.
Джозеф Р.

3
Все исполняемые файлы могут быть перепроектированы. Требование здесь должно было быть нечитаемым невооруженным глазом
Thorbjørn Ravn Andersen

Я знаю. Я просто оставляю записку для будущих читателей.
Джозеф Р.

-2

попробуйте отправить свой скрипт на этот сайт, если вы хотите скрыть его от публичного просмотра.

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

как человек, у которого много раз украли его работу, мне просто все равно, является ли «запутывание» или «шифрование» табу. Пока мой сценарий защищен и работает так же, как и до шифрования, я вполне доволен. я никогда больше не позволю кому-то еще взять мои идеи и использовать их. и нет, писать мой сценарий на скомпилированном языке - это не вариант. я не знаю как.

в любом случае, если вы не хотите использовать сайт, упомянутый выше, попробуйте последнюю версию shc. Я считаю, что они обновили его в github для решения многих проблем безопасности, упомянутых другими. введите следующее в google " shc github ", и вы увидите множество доступных опций, которые вы можете попробовать.

удачи!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.