Deixo-vos então um pequeno exemplo de como construir um pequeno shell em C.


Pode ser muito bem adaptado para que receba valores da linha de comandos.

Acho que não valerá apena estar a explicar linha por linha, visto que é uma programação muito básica, se houver uma dúvida digam.

Source:

http://pastebin.com/cW1HP3eB

  1. /*##################################################
  2. ##  SIMPLES SHELL EM C / WINDOWS                  ##    
  3. ##                                                ##      
  4. ##  @2011  BY PEDRO TAVARES                       ##        
  5. ##  http://infptavares.blogspot.com               ##          
  6. ##                                                ##            
  7. ##################################################*/
  8. /*  DECLARACAO DE BLIBLIOTECAS  */
  9. #include <stdio.h>
  10. #include <string.h>
  11. #include <stdlib.h>
  12. /*  PROTOTIPOS DE FUNCOES  */
  13. void prompt();
  14. void _parse();
  15. void wordpad();
  16. void ler();
  17. /*  FUNCAO <ABRIR/MOSTRAR> FICHEIRO  */
  18. void ler(){
  19.      
  20.      FILE *F;
  21.      char nome[20];                              /*  DECLARACAO ESTATICA DE VARIAVEIS */                          
  22.      char buff[200];
  23.      
  24.      printf(nn.::::::::::::::: MOSTRA FICHEIRO :::::::::::::::.nn);
  25.      printf(nQual o nome do ficheiro que deseja abrir?”);
  26.      scanf(“%s”,&nome);
  27.      
  28.      F=fopen(nome,“r”);                          /*  ABERTURA DO FICHEIRO  */
  29.      if(F==NULL){
  30.            printf(“Ficheiro Invalido!!nn);
  31.            return;    
  32.      }
  33.        
  34.      while(!feof(F)){
  35.                      
  36.           fgets(buff,200,F);                     /*  LISTAGEM  */
  37.           printf(“%s”,buff);
  38.                      
  39.      }
  40.      
  41.      fclose(F);                                 /*  FECHO DO FICHEIRO  */    
  42. return;    
  43. }
  44. /*  FUNCAO <ESCREVER> FICHEIRO  */
  45. void wordpad(){
  46.      FILE *F;                                   /*  DECLARACAO ESTATICA DE VARIAVEIS */
  47.      char nome[20];
  48.      char buff[200];
  49.      
  50.      printf(“Qual o nome do novo ficheiro?”);    
  51.      scanf(“%s”,&nome);
  52.      
  53.      F=fopen(nome,“a”);                         /*  ABERTURA DO FICHEIRO  */
  54.      
  55.      while(strcmp(buff,“exit”)!=0){
  56.          scanf(“%s”,buff);                          
  57.          fputs(buff,F);                         /*  ENVIAR DADOS PARA O FICHEIRO  */
  58.          fputs(n,F);  
  59.      }
  60.      
  61.      fclose(F);                                /*  FECHO DO FICHEIRO  */
  62.      
  63.      
  64. return ;    
  65. }
  66. /*  FUNCAO PARSING <ANALISA STRING>  */
  67. void _parse(char *buff){
  68.      int i;
  69.      for(i=0;i<strlen(buff);i++){
  70.       /* TESTAR E VERIFICAR AS CONDICOES E CHAMAR OPERACAO */
  71.                                
  72.           if(strcmp(&buff[i],“sair”)==0){
  73.               exit(0);                          
  74.           }                        
  75.           if(strcmp(&buff[i],“ls”)==0){
  76.                                  
  77.               system(“dir”);                        
  78.           }
  79.           if(strcmp(&buff[i],“wordpad”)==0){
  80.            
  81.               wordpad();            
  82.           }
  83.      
  84.           if(strcmp(&buff[i],“ler”)==0){
  85.            
  86.               ler();            
  87.           }
  88.       }
  89.        
  90. return ;    
  91. }
  92. /*  FUNCAO PROMPT :>  */
  93. void prompt(){
  94.      printf(“:>”);
  95. return;    
  96. }
  97. /*  FUNCAO MAIN  */
  98. int main (){
  99.     char buff[200];    
  100.    
  101.     printf(“Bem vindo a minha SHELL o_On);
  102.     printf(“As opcoes implementadas sao:  dir ; ler ; wordpad ; sairnnn);
  103.     while(1){
  104.    
  105.             prompt();
  106.             scanf(“%s”,buff);
  107.              
  108.             _parse(buff);
  109.              
  110.     }
  111. return 0;    
  112. }

Pedro Tavares is a professional in the field of information security, currently working as IT Security Engineer. He is also a founding member and Pentester at CSIRT.UBI and founder of the security computer blog seguranca-informatica.pt.

In recent years he has invested in the field of information security, exploring and analyzing a wide range of topics, such as pentesting (Kali Linux), malware, hacking, cybersecurity, IoT and security in computer networks.  He is also Freelance Writer.

Read more here.