7 - Programme de création de shell-code par KoP

 

            Grâce à ce programme, vous pouvez créer simplement un fichier binaire ou texte.

            J'ai mis qu'il était destiné à la création de shell-code mais vous pouvez

            l'utiliser pour tout type de données.

            Veuillez dabord mettre la source suivante dans un fichier nommé Make-SC.cpp:

 

            Copier/Coller------------------------------------------------------------------------

                  /*

                        Programme de crétion de Shell-Code

                              Par KoP du groupe HackerStorm

                                    E-Mail: HackerStorm@HotMail.Com

 

                        Merci de ne pas modifier cette source.

                  */

 

                  #include <stdio.h>

                  #include <stdlib.h>

 

                  main(int argc,char*argv[])

                  {

                  unsigned char data,t=0,erreur=0,etape=0,k;

                  char buf[2000],buf1[2000],buf2[2000];

                  unsigned int i,j,l;

                  if(argc!=3)

                  {

                        puts("Usage: Make-SC [fichier source] [fichier sortie]");

                        puts("\tProgramme de création de Shell-Code par KoP du groupe HackerStorm");

                        puts("\tPour me contacter -> E-mail: HackerStorm@HotMail.Com\n");

                        puts("Le fichier source peut accépter plusieurs type de datas :");

                        puts("                   Source        -> Sortie");

                        puts("- brut :           0159dsd       -> 0159dsd");

                        puts("- décimal :        \\97\\          -> a");

                        puts("- multiple :       \\\"a\"*10\\      -> aaaaaaaaaa");

                        puts("                   \\97*10\\       -> aaaaaaaaaa");

                        puts("- fichier sortie : \\\"shell.dat\"\\ -> 0a8f9djhg9 si le fichier shell.dat");

                        puts("                                    contient les données \"0a8f9djhg9\"");

                  }

                  FILE*sortie,*entree;

                  if((sortie=fopen(argv[1],"rb"))==NULL)

                        {

                          printf("Impossible d'ouvrir le fichier source \"%s\".\n",argv[1]);

                          return 1;

                        }

                  entree=fopen(argv[2],"wb");

                  for(;;)

                  {

                        data=getc(sortie);

                        if(feof(sortie))break;

                        if(data!='\\'&&data!=13&&data!=10)

                        {    

                              putc(data,entree);

                              continue;

                        }

                        if(data=='\\')

                        {

                                for(i=0,etape=0,t=0;;i++)

                                {

                                    data=getc(sortie);

                                    if(feof(sortie)){erreur=1;break;}

                                    if(data=='*'&&t==0)etape=1;

                                    if(data==' '&&t==0){i--;continue;}

                                    if(data=='\\'&&t==0)break;

                                    if(data=='\\'&&t==1)t=2;

                                    if(data=='"'&&t!=2)t=(t==0)?1:0;

                                    t=(t==2)?0:t;

                                      buf[i]=data;

                                }

                                buf[i]='\0';

                                if(erreur==1)

                              {

                                    puts("Erreur dans le fichier source.");

                                    break;

                                }

                              if(etape==1)

                              {

                                      for(j=0,l=0,k=0;j<i+1;j++)

                                    {

                                            if(buf[j]=='*'){k=1;buf1[l]='\0';l=0;continue;}

                                            if(k==0)buf1[l++]=buf[j];

                                            if(k==1)buf2[l++]=buf[j];

                                    }

                                    buf2[l]='\0';

                                    if(atoi(buf2)==0)continue;

                                    if(buf1[0]!='"')sprintf(buf1,"%c",atoi(buf1));

                                    if(buf1[0]=='"')

                                    {

                                          for(i=0;;i++)

                                          {

                                                if(buf1[i]=='"'&&buf1[i-1]!='\\'&&i!=0)break;

                                                buf1[i]=buf1[i+1];

                                          }

                                          buf1[i-1]='\0';

                                    }

                                    j=atoi(buf2);

                                    for(i=0;i<j;i++)

                                          fprintf(entree,buf1);

                                    continue;

                              }

                              if(etape==0)

                              {

                                    if(buf[0]!='"')

                                    {

                                          sprintf(buf,"%c",atoi(buf));

                                          fprintf(entree,"%s",buf);

                                          continue;              

                                    }

                                    if(buf[0]=='"')

                                    {

                                          for(i=0;;i++)

                                          {

                                                if(buf[i]=='"'&&buf[i-1]!='\\'&&i!=0)break;

                                                buf[i]=buf[i+1];

                                          }

                                          buf[i-1]='\0';

                                          FILE*sortie2;

                                          if((sortie2=fopen(buf,"rb"))==NULL)

                                          {

                                                printf("Impossible d'ouvrir le fichier \"%s\".\n",buf);

                                                break;

                                          }

                                          for(i=0;;i++)

                                          {

                                                data=getc(sortie2);

                                                if(feof(sortie2))break;

                                                putc(data,entree);

                                          }                      

                                          fclose(sortie2);

                                    }

                              }

                              continue;

                        }

                  }

                  fclose(sortie);

                  fclose(entree);

                  return 0;

            -------------------------------------------------------------------------------------

 

            Veuillez le compiler en tapant sous Linux, Unix: gcc Make-SC.cpp -o Make-SC

            ou encore sous DOS: tcc Make-SC.cpp

 

            Un fichier Make-SC ou Make-SC.exe devrait être créé.

 

            Pour faire fonctionner ce programme, vous devez saisir en argument un nom de fichier source.

            Les fichiers sources peuvent contenir plusieurs type de données :

            - brut :           0159dsd       -> 0159dsd

            - décimal :        \97\          -> a

            - multiple :       \"a"*10\      -> aaaaaaaaaa

                               \97*10\       -> aaaaaaaaaa

            - fichier sortie : \"shell.dat"\ -> 0a8f9djhg9 si le fichier "shell.dat"

                                                contient les données "0a8f9djhg9"

 

            Exemple de fichier source :

            (sauvegardez le sous exemple.in)

 

            Copier/Coller------------------------------------------------------------------------

                  Salut, comment allez vous \"??"*3\

                  \13\\10\

                  Moi je vais \"très "*5\ bien :)\13\\10\

                  Voici votre fichier passwsd :\13\\10\\13\\10\

                  \"/etc/passwd"\\13\\10\

                  \42*80\\13\\10\

                  Un petit tableau de 5 sur 5 :\13\\10\

                  \"* * * * *\n"*5\

            -------------------------------------------------------------------------------------

 

            Voilà, je vais maintenant détailler chaque ligne :

            ligne 1 :"Salut, comment allez vous \"??"*3\"

                  La sortie sera : "Salut, comment allez vous ??????".

                  Ceci écrit 3 fois "??".

            ligne 2 :"\13\\10\"

                  A pour effet un saut à la ligne(norme).

            ligne 3 :"Moi je vais \"très "*5\bien :)\13\\10\"

                  La sortie sera "Moi je vais très très très très très bien :)"+saut à la ligne

                  Ceci écrit 5 fois "très " et fait un saut à la ligne.

            ligne 4 :"Voici votre fichier passwsd :\13\\10\\13\\10\"

                  Fait 2 saut à la ligne.

            ligne 5 :"\"/etc/passwd"\\13\\10\"

                  Ouvre votre fichier /etc/passwd et l'ajoute depuis l'emplacement de la balise.

                  Fait ensuite un saut à la ligne.

            ligne 6 :"\42*80\\13\\10\"

                  Ecrit une ligne de 80 caractère "*"(42 -> "*").

                  Fait ensuite un saut à la ligne.

            ligne 7 :"Un petit tableau de 5 sur 5 :\13\\10\"

                  Ressort le texte tel quel et fait un saut à la ligne.

                  Fait ensuite un saut à la ligne.

            ligne 8 :"\"* * * * *\n"*5\"

                  La sortie sera "* * * * *"

                                 "* * * * *"

                                 "* * * * *"

                                 "* * * * *"

                                 "* * * * *"

                  Car "\n" remplace un saut à la ligne.

 

            Dans cet explication, je parle de sortie.

            La sortie est, pour ce programme un fichier que vous devez spécifier sur la ligne de commande.

            exemple de ligne de commande : ./Make-SC exemple.in exemple.out

            exemple.in est prit comme fichier source et exemple.out comme fichier sortie.

 

            Voilà, j'espère que ce programme vous servira.

            Pour envoyer un shell code, vous pouvez utiliser n'importe quel

            programme(que vous pouvez faire) qui lis un fichier et envoi ses données

            en utilisant les protocoles réseaux.

 

                                          Par KoP