Как защитить скрипт оболочки от простого получения [дублировать]

Порядок, в котором указаны взаимозависимые связанные библиотеки, неверен.

Порядок, в котором связаны библиотеки, имеет значение, если библиотеки зависят друг от друга. В общем случае, если библиотека A зависит от библиотеки B, тогда libA ДОЛЖЕН появляться перед libB в флагах компоновщика.

Например:

// B.h
#ifndef B_H
#define B_H

struct B {
    B(int);
    int x;
};

#endif

// B.cpp
#include "B.h"
B::B(int xx) : x(xx) {}

// A.h
#include "B.h"

struct A {
    A(int x);
    B b;
};

// A.cpp
#include "A.h"

A::A(int x) : b(x) {}

// main.cpp
#include "A.h"

int main() {
    A a(5);
    return 0;
};

Создайте библиотеки:

$ g++ -c A.cpp
$ g++ -c B.cpp
$ ar rvs libA.a A.o 
ar: creating libA.a
a - A.o
$ ar rvs libB.a B.o 
ar: creating libB.a
a - B.o

Скомпилируйте:

$ g++ main.cpp -L. -lB -lA
./libA.a(A.o): In function `A::A(int)':
A.cpp:(.text+0x1c): undefined reference to `B::B(int)'
collect2: error: ld returned 1 exit status
$ g++ main.cpp -L. -lA -lB
$ ./a.out

Чтобы повторить снова, порядок имеет значение!

16
задан Christian 7 November 2013 в 10:10
поделиться

7 ответов

Вот инструмент, который я создал для минимизации bash-скриптов: https://github.com/precious/bash_minifier - он пытается удалить все комментарии и как можно больше пробелов / вкладок / новых строк , Он также доступен в качестве сервиса здесь https://bash-minifier.appspot.com/ .

Чтобы минимизировать ваш скрипт bash, выполните следующую команду:

python minifier.py /path/to/shell/script.sh
4
ответ дан Vsevolod Kulaga 4 September 2018 в 10:34
поделиться

: P здесь что-то смешное.

говорят, что ваш сценарий имеет имя origin, а запутанный - с именем obsf.

здесь origin:

#!/bin/sh
echo "fooo"

здесь obsf

$ echo "echo $(base64 origin)" > obsf
$ cat obsf
echo IyEvYmluL3NoCmVjaG8gImZvb28iCg==
$ chmod +x obsf

теперь rm origin и запустите obsf следующим образом:

$ sh obsf | base64 -d | sh
fooo

heh: 3

25
ответ дан c00kiemon5ter 4 September 2018 в 10:34
поделиться

Инструмент для обфускации сценариев оболочки: http://www.comp.eonworks.com/scripts/obfuscate_shell_script-20011012.html

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

2
ответ дан Community 4 September 2018 в 10:34
поделиться

Хотя это старый вопрос, он, похоже, популярен в Google. Я также искал bash minifer / obfuscator и не любил ответ в ответ.

Я не хотел добавлять тарабарщину или компилировать скрипт. Поэтому я написал один, который сделал то, что я хотел в Perl, и поместил его в GitHub в https://github.com/Aralhach/bashobfus/tree/master Он может:

  • Сгладить отступ
  • Удалить комментарии в режиме полной строки (кроме начального хешбанга (#!)) и пустых строк
  • Переименовывает все строчные переменные в основных объявлениях (чтобы избежать переименования переменных, таких как PATH), для циклов, доступа к массиву и операторов чтения.

Там может быть какой-то случай, когда он терпит неудачу, но я тестировал его с довольно большим сценарием bash, и появлялись случаи замены переменных. Он также оставляет переменные только в одиночных кавычках (') - это всплыло при печати AWK-скрипта , но заменяет одиночные кавычки ('), когда оператор уже находится внутри двойных кавычек («) - - это появилось при печати инструкции MySQL .

Это заставляет меня думать, что я рассмотрел все варианты большого использования, но раньше я ошибался. баги, не стесняйтесь сообщать о них (или исправить их!: D). Я также думал о добавлении функции для объединения коротких строк в один с «;», но случаев было слишком много, чтобы анализировать, делая мой крайний срок.

Я надеюсь, что люди сочтут это полезным!

6
ответ дан Daniel Gray 4 September 2018 в 10:34
поделиться

Исходный файл script.sh:

#!/usr/bin/env bash
echo "foo"

Создать other.sh

$ echo '#!/usr/bin/env bash' > other.sh
$ echo "echo '$(base64 script.sh)' | base64 -d | sh" >> other.sh
$ chmod +x other.sh

Результат (cat other.sh):

#!/usr/bin/env bash
echo 'IyEvdXNyL2Jpbi9lbnYgYmFzaAplY2hvICJmb28iCg==' | base64 -d | sh

Попробуйте:

$ ./other.sh
foo
1
ответ дан Eduardo Cuomo 4 September 2018 в 10:34
поделиться

Минимизация и обфускация скрипта оболочки - это две разные вещи.

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

Minification:

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

#!/bin/sh
Script=${1}
if [ ! -z "${Script}" ] && [ -f ${Script} ] ; then
        CurrenTime=$(date | sed -e 's~ ~_~g' -e 's~:~~g')
        cp ${Script} ${Script}_${CurrenTime}
        #### Remove all empty lines
        #### Remove lines that begin with spaces and a comment sign #
        #### Remove all comment lines (meaning, lines that begin with a "#")
        awk '
                (/.*/ || /#!/) && (!/^#$/) &&
                (!/^#[[:blank:]]/) && (!/^#[a-z]/) && 
                (!/^#[A-Z]/) && (!/^##/) &&
                (!/^\t#/) && (!/^[[:space:]]*$/) &&
                ( /^#.*!/ || !/^[[:space:]]*#/)
        ' ${Script} | sed 's_^[[:space:]]*__g' > ${Script}.tmp 2>/dev/null
        #' ${Script} > ${Script}.tmp 2>/dev/null (comment out the above line and uncomment this line if your HEREDOCS are affected)
        ExitCode=$?
        if [ ${ExitCode} -eq 0 ] && [ -s ${Script}.tmp ] ; then
                echo
                echo "SUCCESS: Your newly [ minified ] script can be found here [ ${Script}.tmp ]."
                echo "Review the script [ ${Script}.tmp ] and if happy with it, replace your original script with it!"
                echo "NOTE: Your original script [ ${Script} ] was backed up as [ ${Script}_${CurrenTime} ]!"
                echo
                exit 0
        else
                echo
                echo "FAILURE: Unable to [ minify ] the specified script [ ${Script} ]!!!"
                echo
                exit 2
        fi
else
        echo
        echo "USAGE: ${0}  <your-script>"
        echo
        exit 3
fi

Примечание. Минализация имеет тенденцию иметь значение, только если миниатюрный скрипт является большим ... с несколькими сотнями или даже тысячами строк.

Obfuscation:

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

Самый простой способ обфускации вашего скрипта - использование инструментов шифрования, таких как Openssl.

To encrypt your script using Openssl:

    1. cat <your-script> | openssl aes-128-cbc -a -salt -k "specify-a-password" > yourscript.enc

    OR

    2. openssl aes-128-cbc -a-salt -in <path-to-your-script> -k "yourpassword"

To decrypt a script using Openssl (notice the '-d'):

    1. cat yourscript.enc | openssl aes-128-cbc -a -d -salt -k "specify-a-password" > yourscript.dec

    OR

    2. openssl aes-128-cbc -a -d -salt -in <path-to-your-script> -k "yourpassword" > yourscript.dec

Шифрование / Обфускация:

  1. Если ваша конечная цель - затруднить чтение другим скриптом, попробуйте вставить его здесь , чтобы получить зашифрованную копию.
  2. Если вы передумаете SHC, последняя версия может быть загружена здесь .
1
ответ дан RoyMWell 4 September 2018 в 10:34
поделиться

Основываясь на идее c00kiemon5ter, здесь у вас есть сценарий

. Ваши витые рекурсивные умы будут любить его, поскольку это не оригинальный сценарий, а запутанный (обфусканный (оригинал))

#!/bin/bash
#
# Usage:
#     obfuscate scrript.sh > script_obfuscated.sh
#
PIXIE=$(mktemp)
base64 -d  >${PIXIE}<<DIXIE
IyEvYmluL2Jhc2ggClBJWElFPSQobWt0ZW1wKQpiYXNlNjQgLWQgID4ke1BJWElFfTw8RElYSUUK
SXlFdlltbHVMMkpoYzJnS2FXWWdXeUFnTFdZZ0lpUXhJaUJkSUFwMGFHVnVDbU5oZENBOFBGQkpX
RWxGSUFvaklTOWlhVzR2WW1GegphQ0FLVUVsWVNVVTlYQ1FvYld0MFpXMXdLUXBpWVhObE5qUWdM
V1FnSUQ1Y0pIdFFTVmhKUlgwOFBFUkpXRWxGQ2lRb1ltRnpaVFkwCklDUXhLUXBFU1ZoSlJRcHpi
M1Z5WTJVZ1hDUjdVRWxZU1VWOUNuSnRJQzF5WmlCY0pIdFFTVmhKUlgwS1VFbFlTVVVLWlhocGRD
QXcKQ21acENtTmhkRHc4VGtWU1JBb2dJQ0IxYzJGblpUb2diMkoxYzJOaGRHVWdjMk55YVhCMENn
b2dJQ0JYYVd4c0lHZGxibVZ5WVhSbApJQ0p6WTNKcGNIUXViMkp6YUNJS1RrVlNSQW89CkRJWElF
CnNvdXJjZSAke1BJWElFfQpybSAtcmYgJHtQSVhJRX0K
DIXIE
source ${PIXIE}
rm -rf ${PIXIE}
-1
ответ дан RSG 4 September 2018 в 10:34
поделиться
Другие вопросы по тегам:

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