Получение простого текстового сценария из скомпилированного сценария bash

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

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

6
задан sloth 14 June 2012 в 11:33
поделиться

2 ответа

Использование shc для компиляции ваших скриптов не защищает их. Вы не получите больше безопасности таким образом. Скомпилированный с помощью shc двоичный файл расшифровывается и загружает скрипт в память при запуске. Затем, сразу после запуска двоичного файла, вы можете просто выполнить segfault и извлечь свой сценарий из coredump.

Вот небольшой пример скрипта test.sh:

#! /bin/bash
echo "starting script and doing stuff"
sleep 1
echo "finished doing stuff"

Скомпилируйте его с помощью shc:

shc -f test.sh

Запустите его как фоновый процесс и сразу же выполните segfault:

./test.sh.x&  ( sleep 0.2 && kill -SIGSEGV $! )

sleep 0.2 даст бинарнику достаточно времени для запуска и расшифровки исходного скрипта. Переменная $! содержит pid последнего запущенного фонового процесса, поэтому мы можем легко убить его сигналом segmentation fault SIGSEGV (аналогично kill -11 $!).

[1]  + segmentation fault (core dumped)  ./test.sh.x

Теперь мы можем искать в дампе оригинальный скрипт:

cat core | strings

Мы передаем данные из дамп-файла в strings, который покажет нам все печатаемые символы в файле, и теперь мы можем увидеть оригинальный скрипт между мусором:

...
4.0.37(2)-release
BASH_VERSINFO
BASH_VERSINFO
release
i686-pc-linux-gnu
BASH_EXECUTION_STRING
BASH_EXECUTION_STRING
                           #! /bin/bash
echo "starting script and doing stuff"
sleep 1
echo "finished doing stuff"
1000
EUID
EUID
1000
...

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

52
ответ дан 8 December 2019 в 02:03
поделиться

Просто предположите ... вы можете записывать системные вызовы, используя, например, strace или что-то подобное, а затем пытаться восстановить хотя бы базовую функциональность.

Или вы можете спросить автора shc ( http://www.datsi.fi.upm.es/~frosal/sources/shc.html ).

PS

Ходят слухи, что кто-то написал deshc ( http://www.linuxjournal.com/article/8256 )

1
ответ дан 8 December 2019 в 02:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: