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