Jak skompilować skrypt powłoki Linuksa jako samodzielny plik wykonywalny * binarny* (tzn. nie tylko np. chmod 755)?

Szukam darmowego zestawu narzędzi open source, który będzie kompilował różne "klasyczne" języki skryptowe, np. Korn Shell, ksh, csh, bash itp. jako program wykonywalny -- i jeśli skrypt wywoła inne programy lub pliki wykonywalne, aby były one zawarte w pojedynczym pliku wykonywalnym.

Uzasadnienie:

  1. Aby zaciemnić kod do dostawy do klienta, aby nie ujawniać naszej własności intelektualnej - do dostawy na klienta własnej maszyny/systemów, dla których nie mam kontrola nad tym, jakie uprawnienia mogę ustawić w odniesieniu do dostępu, więc plik programu musi być binarny, w którym działanie nie może być łatwo widoczne przez przeglądanie w edytorze tekstu lub hexdump viewer.

  2. Aby zrobić pojedynczy, po prostu wdrożony program dla klienta bez / lub minimalnej ilości zewnętrznych zależności.

Wolałbym coś prostego bez potrzeby używania Menedżera pakietów, ponieważ:

  1. Nie mogę polegać na wiedzy klienta, aby przeprowadzić (un) instrukcje dotyczące pakowania i

  2. Nie mogę polegać na zasadach rządzących ich maszynami dotyczących instalowania pakietów (i rzeczywiście od stron trzecich).

Najprostszym preferowanym podejściem jest możliwość kompilacji do właściwego kodu maszynowego pojedynczego pliku wykonywalnego, który będzie uruchamiany bez żadnych zależności.

Author: Jahid, 2011-06-21

7 answers

Rozwiązaniem, które w pełni spełnia moje potrzeby byłoby SHC-darmowe narzędzie, lub CCsh narzędzie komercyjne. Oba skrypty powłoki kompilują do C, który następnie może być skompilowany przy użyciu kompilatora C.

Linki o SHC:

Linki o CCsh:

 36
Author: therobyouknow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-02 23:07:14

Możesz użyć tego: http://megastep.org/makeself/

Generuje skrypt powłoki, który automatycznie wyodrębnia pakiet tar.gz archiwizuje do katalogu tymczasowego, a następnie może uruchomić dowolne polecenie po rozpakowaniu.

Używając tego narzędzia, możesz dostarczyć klientowi tylko jeden skrypt powłoki.

Ten skrypt rozpakuje twojeofbsh zaciemnione skrypty i binaria do /tmp i uruchamia je przejrzyście.

 5
Author: SirDarius,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-21 09:43:41

Możesz zaciemniać skrypty powłoki za pomocą czegoś w rodzaju ofbsh. Nie będziesz jednak łatwo łączyć innych programów w JEDEN program wykonywalny dla Uniksa. Standardowo instalacją będzie buldowanie pakietu dla menedżera pakietów Twojej platformy (np. rpm, deb, pkg) lub do udostępnienia tarbla do rozwinięcia w odpowiednim katalogu.

Jeśli potrzebujesz pliku wykonywalnego rozpakowującego zawartość, możesz użyć archiwum powłoki. Take a spójrz na dokumenty dla shar (1) i zobacz, czy to dostanie to, czego chcesz

Jeśli naprawdę potrzebujesz zdolności skryptowej do sklejania wielu programów C, spójrz na język Tcl. Posiada API, które zostało zaprojektowane do trywialnego zawijania programów C, które oczekują, że będą widzieć parametry stylu argv[]. Można nawet osadzić fragmenty kodu C w niestandardowym interpreterze Tcl i przykleić go do różnych skryptów Tcl.

Jeśli naprawdę chcesz, aby było nieprzezroczyste, możesz zaszyfrować Skrypty tcl i owinąć całość w coś, co odszyfruje Skrypty tcl do bufora, a następnie uruchamia na nich interpreter Tcl. Tcl może przyjmować skrypty z pliku lub bufora char*, więc niezaszyfrowane Skrypty nigdy nie muszą trafić do systemu plików.

 3
Author: ConcernedOfTunbridgeWells,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-22 10:42:55

Shc

Zmodyfikowałem oryginalne źródło i zaktualizowałem do nowej wersji z dodatkiem funkcji i poprawkami błędów. To Tutaj .

Przykładowe Użycie:

shc -f script.sh -o binary_name

Script.sh zostanie skompilowany do pliku binarnego o nazwie binary_name

Zauważ, że nadal potrzebujesz wymaganej powłoki do zainstalowania w systemie, aby uruchomić ten plik wykonywalny.

 2
Author: Jahid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-08 09:29:21

Arx jest świetnym pakieterem i być może będziesz w stanie zintegrować obfuscator z jego przepływem pracy.

 1
Author: vdm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-30 16:23:02

Opcje, które są dostępne dla Ciebie:

  • Napisz logikę w kodzie, że gdy kod zostanie uruchomiony po raz pierwszy na pudełku, sprawdzi, czy istnieją wszystkie wymagane pakiety. A jeśli nie, kod automatycznie pobierze pakiety i zainstaluje je...bez pytania użytkownika o cokolwiek. Jedyne pytanie, jakie użytkownik musi zadać, to "czy można kontynuować instalację wyżej wymienionych pakietów? (Y / N)". Wszystko poza tym jest za dużo.

  • Gdy powyższy kod jest kompletny (tak, Wiem, że kodowanie tego może nie być takie proste, lub może być tak, Nie wiem, jakie masz możliwości kodowania), skopiuj i wklej wypełniony kod na stronę taką jak kinglazy.com {[10] } i wygenerowany zostanie dla ciebie plik wykonywalny.

Istnieje sporo korzyści z tej konkretnej opcji:

  • tak, będziesz mógł uruchomić zaszyfrowaną wersję skryptu bez ujawnienie wszelkich zastrzeżonych informacji.
  • nikt nie może próbować "zobaczyć" Twojego skryptu, ponieważ jeśli to zrobią, nie zobaczą nic poza niezrozumiałym, zaszyfrowanym żargonem, który nie będzie dla nich sensowny.
  • nikt nie może próbować zmodyfikować twojego skryptu, ponieważ jeśli tak się stanie, skrypt natychmiast stanie się nieoperacyjny.
  • nikt nie może uruchomić debuggera na Twoim skrypcie, aby zobaczyć, jak to działa. Jeśli tak się stanie, skrypt zostanie przerwany.
  • ponadto nikt nie może tworzyć kopii Twojego skryptu na tym samym serwerze. Jeśli to zrobią, to przerwą i nie zadziała. Pozwoli to użytkownikom na tworzenie dowiązań symbolicznych do oryginalnej lokalizacji, gdziekolwiek chcesz, aby skrypt był.

Może brakuje mi pewnych rzeczy w tym, o co prosiłeś, ale wierzę, że powyższe spełnia dużą część tego, co chciałeś.

Nie wiem, czy to działa na innych skryptach, ale na pewno działa na skryptach powłoki.

 1
Author: Blessed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-31 20:59:11

Możesz również użyć darmowej wersji online CCsh, aby skompilować skrypt powłoki do pliku binarnego: http://www.comeaucomputing.com/tryccsh/

 0
Author: Carl Ambroselli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-27 17:00:49