Introduzindo um pouco mais a fundo o shell script (revisado)

Shell Script é a linguagem de programação de alto nível interpretada pelo shell. Se você não entendeu o significado da frase anterior, é bem provável que este artigo possa lhe ser útil.

[ Hits: 23.654 ]

Por: Perfil removido em 31/03/2009


Santa prototipagem Tux-man!



Sim... Jovem prodigioso jedi, prototipagem é derivada da palavra protótipo. :)

E quando referido a programação, prototipagem, é um ante projeto confeccionado para testar os recursos que um sistema originalmente oferece além da redução das incertezas sobre as funcionalidades do mesmo.

Essencialmente (e desprezando muitas fazes de desenvolvimento) pense comparativamente a esta idéia, nas fases de relacionamento íntimo chamadas de namoro e noivado como ensaios do objetivo casamento (é, eu também senti calafrios?). Se tudo correr bem casamos. Se surgirem dúvidas ou desastres tentamos consertar a situação ou abandonamos a missão, mas, curiosamente nunca desistimos desta guerra e procuramos outros, digamos, caminhos.

Porém nosso arsenal está mais poderoso agora devido a experiências anteriores e portanto não cometemos os mesmos erros... Embora "na prática a teoria seja outra", quanto a relacionamentos humanos neste nível de intimidade.

Logo se um código foi, total ou parcialmente, prototipado em Shell Script, tem muitas chances de ter seus objetivos alcançados quando for traduzido para outra linguagem, além de herdar a portabilidade do Shell já solucionando problemas de dependências de instalação e compatibilidades quando o mesmo for portado fora do ambiente de onde originalmente foi depurado.

O poder da inteligência e a falta que ela pode fazer...

Claro que o alto poder sobre o sistema o qual citamos anteriormente pode gerar falhas de segurança e proteção à integridade do mesmo e por isso, não podem e nunca devem ser desprezados, lógico a menos que se tenha total certeza das consequências ao utilizá-lo.

Logo dedicação ao estudo sobre o tema é essencial à sobrevivência e posteriormente à evolução. Vale lembrar que o maior inimigo de um sistema computacional é um usuário mal informado e não o mal intencionado.

Como exemplo de mal uso de recursos de um sistema cito um caso pessoal parido por preguiça mental e fatores de mal funcionamento orgânico provocado "semvergonhosamente" por grande ingestão de álcool etílico - vulgarmente conhecida como ressaca - a qual me fez executar o comando proibido da morte (# rm -rf * , por favor não tentem fazer isso em casa cri-antas) presenteando-me com um sistema literalmente " limpíssimo e leve" como a insustentável idiotice do meu ser e por isso, nada funcional. Um exemplo do que eu chamo de leso auto eutanásia antológica (leia - suicídio por uso da lógica de anta etilicamente lesada).

É... Mais um enorme pedaço de merda para adubar minha tosca existência no universo de T.I. Mas graças ao "papai do Shell" que cuida muito bem de seus filhos, eu tinha um sistema de backup eficiente e não por coincidência escrito em Shell Script que tirou nota alta em seu teste de prototipagem compulsória.

Página anterior     Próxima página

Páginas do artigo
   1. Obviamente desconfiado
   2. Santa prototipagem Tux-man!
   3. Cara, cadê a tal da prototipagem?
Outros artigos deste autor

Ingressar desktop GNU/Linux no domínio Active Directory do Windows Server 2008

Montando partições em memória

PuTTY - Release 0.66 - Parte II

Xen - XL.cfg - Sintaxe da Configuração de Domínios - Parte II

Compilando Kernel no CentOS 6.0

Leitura recomendada

Shell - Funções

Backup automático em Shell Script

O que é Shell Script

Pipelines (Canalizadores)

Programando em Shell Script para iniciantes

  
Comentários
[1] Comentário enviado por fabioarnoni em 31/03/2009 - 22:55h

Legal !!! gostei dos exemplos !! Estou estudando shell Script + python, também acho uma combinação poderosa heheheh Shell é utilidade total pra nós !

[2] Comentário enviado por removido em 01/04/2009 - 09:11h

Em breve! Como colocar este tipo de shell script em uma interface kommander... Ié?

[3] Comentário enviado por rikatz em 01/04/2009 - 18:42h

Só um comentário (nao eh critica nem sugestao, comentario mesmo :P )
Se alguém está pensando em fazer um Shell Script e embuti-lo em um código C para esconder suas instruções, como eu já vi ser feito, pensem que o compilador C trata aquelas instruções como exemplo.
Peguemos a string utilizada pelo autor, e após compilado o fonte, execute o comando "strings programa_compilado":
Um dos trechos expostos é exatamente:

clear; mysql -u root -p123456 -D testes -e ' SELECT * FROM minha_tabela' | less

Ou seja, se alguém tiver algum modo de ocultar essas strings, não é compilando o programa ;P

Sugestoes?

[4] Comentário enviado por stremer em 01/04/2009 - 18:57h

ae...
para esconder as strings de qualquer executavel (binario) é preciso encriptar o arquivo!
No caso do linux o executavel criado pelo C é um binário ELF.
Existe uma ferramente chamada Shiva que faz este trabalho. Infelizmente nunca a usei nem sei se funciona!

Quem tiver tempo de fazer um teste seria bem legal!

[5] Comentário enviado por mslomp em 01/04/2009 - 23:11h

um método braçal para esconder a string:

tomando a string do exemplo:
char comando[] = "clear; mysql -u root -p123456 -D testes -e ' SELECT * FROM minha_tabela' | less";

podemos declará-la no formato hexa, como no exemplo (reparem que adicionei o null (0x00) ao final):

==========================================
#include <stdio.h>

char comando[] = \
{0x63,0x6C,0x65,0x61,0x72,0x3B,0x20,0x6D,0x79,0x73, \
0x71,0x6C,0x20,0x2D,0x75,0x20,0x72,0x6F,0x6F,0x74, \
0x20,0x2D,0x70,0x31,0x32,0x33,0x34,0x35,0x36,0x20, \
0x2D,0x44,0x20,0x74,0x65,0x73,0x74,0x65,0x73,0x20, \
0x2D,0x65,0x20,0x27,0x20,0x53,0x45,0x4C,0x45,0x43, \
0x54,0x20,0x2A,0x20,0x46,0x52,0x4F,0x4D,0x20,0x6D, \
0x69,0x6E,0x68,0x61,0x5F,0x74,0x61,0x62,0x65,0x6C, \
0x61,0x27,0x20,0x7C,0x20,0x6C,0x65,0x73,0x73,0x00};

int main(void)
{
printf("%s\n",comando);
return 0;
}
==========================================

porém, ainda assim é possível enxergarmos a string através de um simples dump, inclusive através do comando strings citado pelo colega acima.
precisamos então que os valores de cada caractere "se percam" do universo de caracteres imprimíveis (que caracterizam uma string literal). ou seja, se nem todos estiverem contidos nesse universo, já não teremos mais uma string, e sim uma "zona".
para obter isso, tomei o menor valor - 0x20 (correspondente ao espaço) - e então peguei um valor arbitrário abaixo* desse (nesse caso, 0x19 - não é 0x20 -1!), e subtraí cada valor hexa desse índice. depois, para reverter, basta somar dinamicamente** 0x19 para cada elemento da cadeia.
* o índice deve ser inferior ao menor valor hexa da string para evitarmos valores negativos.
** para evitar que o gcc por si só otimize a coisa e reconstrua a string, o que estragaria a festa :D

resultado:

==========================================
#include <stdio.h>
#include <string.h>

char comando[] = \
{0x4A,0x53,0x4C,0x48,0x59,0x22,0x07,0x54,0x60,0x5A, \
0x58,0x53,0x07,0x14,0x5C,0x07,0x59,0x56,0x56,0x5B, \
0x07,0x14,0x57,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x07, \
0x14,0x2B,0x07,0x5B,0x4C,0x5A,0x5B,0x4C,0x5A,0x07, \
0x14,0x4C,0x07,0x0E,0x07,0x3A,0x2C,0x33,0x2C,0x2A, \
0x3B,0x07,0x11,0x07,0x2D,0x39,0x36,0x34,0x07,0x54, \
0x50,0x55,0x4F,0x48,0x46,0x5B,0x48,0x49,0x4C,0x53, \
0x48,0x0E,0x07,0x63,0x07,0x53,0x4C,0x5A,0x5A,0x00};

int main(void)
{
int i;
for(i=0;i<strlen(comando);i++)
comando[i] += 0x19;
printf("%s\n",comando);
return 0;
}
==========================================

e então, mesmo em um hex editor, a string não estará tão evidente - o que não é válido para um cracker bem treinado.
pode-se ainda utilizar algo como __attribute__ ((section ("blablabla"))) em nossa variável, a fim de evitarmos que nossa string vá para lugares óbvios no executável, como .bss e .data. isso daria um (pequeno, mas chato) trabalho extra para alguém mal intencionado.

[6] Comentário enviado por removido em 02/04/2009 - 06:14h

;P

[7] Comentário enviado por buruno em 09/04/2009 - 12:18h

|Boa dica mslomp :D


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts