[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
SHC - Compilador Shell
From: |
MrBiTs |
Subject: |
SHC - Compilador Shell |
Date: |
Mon, 14 Feb 2005 07:50:19 -0200 |
User-agent: |
Mozilla Thunderbird 1.0 (X11/20041206) |
> Ainda nao testei esse SHC, mas a ideia parece muito boa =]
Embora o desenvolvedor fale em criptografia, ele é na verdade um
"compilador" para shell-script. Vai converter o codigo de um script em
codigo fonte C e chamar o GCC para compilá-lo, gerando assim um módulo
executável que irá "proteger" a sua inteligência.
Senão, vejamos:
Tomemos o script básico abaixo:
#!/bin/bash
echo "Ola, Mundo"
echo "Agora sao $(date +%H:%M) de $(date +%d/%m/%Y)"
Compilando-o temos:
$ ls -lh teste*
-rwxr-xr-x 1 mrbits mrbits 84 2005-02-14 07:31 teste.sh*
-rwxr-xr-x 1 mrbits mrbits 7.9K 2005-02-14 07:32 teste.sh.x*
-rw-r--r-- 1 mrbits mrbits 8.8K 2005-02-14 07:32 teste.sh.x.c
Ou seja, um script de míseros 84 bytes vira um "executável" de
7.9Kbytes. Temos ai quase 1000% de aumento no tamanho do arquivo final.
Qto aos tempos de execução, temos:
$ time ./teste.sh
Ola, Mundo
Agora sao 07:34 de 14/02/2005
real 0m0.077s
user 0m0.020s
sys 0m0.020s
$ time ./teste.sh.x
Ola, Mundo
Agora sao 07:34 de 14/02/2005
real 0m0.087s
user 0m0.040s
sys 0m0.030s
Obviamente isso deve crescer de acordo com o tamanho do script. Embora o
produto seja MUITO interessante, deve-se levar em conta a sua real
necessidade. Como o Rafael citou, um dos grandes méritos do produto é
proteger informações. A parte interessante da coisa é que o SHC não
trabalha com as strings "abertas" no seu codigo. Fazendo um strings
teste.sh.x | grep -i mundo, nao temos retorno, o que significa que a
string "Ola, Mundo" não foi gravada como plain text no codigo. Se
tivermos um programa ola.c, e simplesmente submete-lo a gcc -o ola ola.c
e repetirmos o comando strings ola | grep -i mundo, veremos o retorno
"Ola, Mundo". Isso acrescenta uma segurança a mais no nosso script,
visto que podemos fazer algo como PASSWD="senha" e essa senha não será
mostrada no comando strings.
No geral, para quem está interessado em distribuir seus produtos mas não
os fontes, vale o produto.
--
\\|||//
(.) (.)
--ooOO--( )--OOoo--
MrBiTs
address@hidden
-------------------
[As partes desta mensagem que não continham texto foram removidas]