Dark Moon : un système Unix portable sous Windows

John the ripper

Dark Moon est un sous-système embarqué, émulant des fonctionnalités POSIX grâce à Cygwin.

Ce dernier possède la particularité d’avoir été encapsulé en un unique fichier exécutable sur la plateforme Desktop Bridge de Microsoft.

Commentez

- Titre : Dark Moon : un système Unix portable sous Windows

- Auteur : John the ripper

- Parution : 20 septembre 2019

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2019 John the ripper. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- 1. Description du projet

- 2. Dark Moon et la plateforme UWP de Microsoft

- 3. Quelle est la différence entre Dark Moon et le sous-système Windows pour Linux (WSL 2) ?

- 4. Quelle est la différence entre la version de Dark Moon disponible sur Github et le Microsoft Store ?

- 5. les versions

- 6. L'utilitaire Cmdow est-il un virus ?

- 7. Installer le projet

- 8. Liste des commandes linux

- 9. Ajouter des programmes

- 10. Mode de lancement du logiciel

- 11. Dark Moon en ligne de commande Windows

- 12. apt-cyg

- 13. Captures d'écran

- 14. Licence

1 - Description du projet

Dark Moon est un projet Open Source sous licence GPLv2 développé depuis 2013 par Mehdi Boutayeb Ferkatou.

Dark Moon est un sous-système embarqué, émulant des fonctionnalités POSIX grâce à Cygwin.

Ce dernier possède la particularité d’avoir été encapsulé en un unique fichier exécutable sur la plateforme Desktop Bridge de Microsoft.

Ce projet est la seule distribution Linux portable indépendante de Windows Subsystem for Linux (WSL) à être déployée sur le Microsoft Store aujourd'hui.

Le sous-système de Dark Moon est facile à installer. Vous n’avez rien à configurer au préalable, comme c’est le cas avec les sous-systèmes Linux disponibles sur le magasin Microsoft. Cela renforce le côté intuitif de ce logiciel capable de tenir en un unique fichier exécutable ayant pour rôle de déployer les fichiers sources dans un répertoire et de les lancer lors des appels.

Le protocole SSH est inclus ainsi que OpenSSL pour le chiffrement via des méthodes de cryptographies.

Dark Moon possède une riche bibliothèque de fonctionnalités Linux.

Dark Moon est également utilisé dans le domaine de la sécurité pour effectuer des attaques sur un réseau informatique depuis le noyau portable en exécutant des scripts et des programmes.

Ce logiciel est aussi utilisé pour déployer de petits serveurs portables légers peu gourmands, et donc plus réactifs (Intel Atom, Celeron, Pentium).

Ceci est un atout appréciable si vous souhaitez utiliser une machine de test sur des PC peu performants pour monter une infrastructure Linux flexible, et qui n’a pas vocation à être utilisée dans la durée en local, le tout sans avoir recours à la virtualisation ( ce qui serait parfaitement impossible à mettre en œuvre compte tenu de la configuration énoncée précédemment) permettant de communiquer sous Windows avec du POSIX Linux.

Dark Moon se présente en version STABLE et CURRENT. CURRENT est recommandée pour les développeurs ou utilisateurs ayant de bonnes connaissances techniques. Dans le cas contraire, il est recommandé d'utiliser la version STABLE.

L'outil a été développé par un jeune toulousain qui le maintient depuis 2013.

2 - Dark Moon et la plateforme UWP de Microsoft

Il est en théorie impossible de porter un noyau Linux sur le Microsoft Store si ce dernier n’exploite pas WSL de Microsoft

Le problème est que le noyau est trop complexe pour UWP et utilise beaucoup d'API de bas niveau qui ne peuvent tout simplement pas être portées sinon le Build de l’APPX échoue.

Dark Moon a pu être encapsulé dans une APPX car ce dernier a été cloisonné dans un fichier exécutable contenant des ressources interprétables par UWP.

D’autant que les ressources sont consultables par tous dans le disque C:/ et exploitables et modifiables contrairement à WSL.

3 - Quelle est la différence entre Dark Moon et le sous-système Windows pour Linux (WSL 2) ?

Le sous-système Microsoft est un noyau Linux intégré à Windows, mais WSL nécessite une virtualisation de très bas niveau pour fonctionner.

WSL n’est pas Open Source, c’est une technologie propriétaire qui ne fonctionne que sous Windows 10.

La différence avec Dark Moon est que le logiciel est un portage de programmes Linux sur Windows. Les outils de développement intégrés à Dark Moon vous construiront un exécutable Windows, tandis que WSL vous construira un exécutable Linux.

Il se peut que l'exécutable Linux résultant ne s'exécute pas correctement sur WSL.

En outre, contrairement au WSL, vous pouvez exécuter un .exe et accéder à tous les fichiers du noyau, ce qui n’est pas encore possible avec WSL/Bash en raison de la sécurité de Windows 10. La dernière différence est que Dark Moon est un noyau « portable », vous pouvez le transporter dans n'importe quel dossier ou périphérique.

4 - Quelle est la différence entre la version de Dark Moon disponible sur Github et le Microsoft Store ?

Dark Moon UWP (Microsoft Store) ne nécessite aucune intervention humaine pour l'installation et tout est automatisé, à partir du moment où l'utilisateur clique sur « Télécharger » jusqu'au lancement de XFCE. Avec la version Microsoft Store, l’utilisateur exécutera une version approuvée par Microsoft pour Windows 10. L'application s'installera sur un dossier prédéfini %systemdrive%/Linux.

Avec la version Win32, l'utilisateur peut modifier le programme d'installation pour le placer dans le répertoire de son choix.

5 - les versions

Il existe 2 versions de ce logiciel :

- une version de la console fonctionnant directement à partir de cmd.exe :
Cette version de Dark Moon étant nomade (portable), vous pouvez déplacer le répertoire du logiciel n’importe où, y compris sur un lecteur USB ou un disque dur portable. Par exemple, vous pouvez envisager d'installer et d'exécuter un serveur SSH sur votre clef USB à partir de Dark Moon ;

- une version intégrant un environnement graphique XFCE 4.

6 - L'utilitaire Cmdow est-il un virus ?

Dark Moon intègre l'outil Cmdow pour masquer les processus. Voici ce que le développeur de l'utilitaire dit à ce sujet :

Bien sûr que non ! Cependant, tout le monde n'est pas d'accord… L'une des nombreuses fonctionnalités de Cmdow permet à l'utilisateur de masquer des fenêtres de programme, ce qui a conduit 40% des éditeurs d'antivirus à classer Cmdow comme un outil de piratage de type « cheval de Troie » 1. D'autre part, 60% des éditeurs d'antivirus considèrent Cmdow comme totalement sûr.

Vous pouvez visualiser vous-même les résultats de l'analyse antivirus. Téléchargez et extrayez la dernière version de l'archive Cmdow, puis téléchargez cmdow.exe sur VirusTotal. Vous vous retrouverez sur une page comme celle-ci: https://virustotal.com/fr/fichier/767b877e735c425bf05c34683356abfde4070b092f17a4741ea5ac490611f3de/analysis/.

Évidemment, si vous avez des doutes sur la sécurité de Cmdow, ne l'utilisez pas et n'auditez pas le code source vous-même. L'audit devrait être assez simple, car le code est explicite avec des commentaires libéraux et il n'y a pas d'assemblage ni de blobs binaires. cmdow compile sans erreurs ni avertissements à l'aide de l'EDI gratuit Code::Blocks. Il y a même un fichier de projet Code :: Blocks ( cmdow.cbp ) inclus dans le téléchargement Cmdow.

1 Dix fournisseurs considèrent en réalité que l'attribution d'un zéro à la fonction ShowWindowAsync de l'API Windows suffit à créer un cheval de Troie !

7 - Installer le projet

Si vous avez téléchargé l'archive à partir de Github, extrayez-la simplement, cliquez sur le répertoire « Fichiers compilés par Linux » et lancez  « Linux.exe ».

Le désarchivage et l'installation se feront sans intervention humaine.

8 - Liste des commandes linux

Voici la liste des commandes disponibles sur le terminal :

Voi job_spec [&] historique [-c] [-d offset] [n] ou hist>
((expression)) if COMMANDS;  puis COMMANDES;  [elif C>
.  nom_fichier [arguments] jobs [-lnprs] [jobspec ...] ou jobs>
: kill [-s sigspec |  -n signum |  -sigs>
[arg ...] laissez arg [arg ...]
[[expression]] local [option] nom [= valeur] ...
alias [-p] [nom [= valeur] ...] déconnexion [n]
bg [job_spec ...] mapfile [-d delim] [-n count] [-O ou>
bind [-lpsvPSVX] [-m keymap] [-f fichier> popd [-n] [+ N |  -N]
break [n] printf [-v var] format [arguments]
builtin [shell-builtin [arg ...]] pushd [-n] [+ N |  -N |  dir]
appelant [expr] pwd [-LP]
case MOT dans [PATTERN [|  PATTERN] ...)> lire [-ers] [-a tableau] [-d delim] [->
cd [-L | [-P [-e]] [- @]] [dir] readarray [-n compte] [-O origine] [-s>
commande [-pVv] commande [arg ...] en lecture seule [-aAf] [nom [= valeur] ...] o>
compgen [-abcdefgjksuv] [option -o] [> return [n]
compléter [-abcdefgjksuv] [-pr] [-DE]> sélectionner NOM [dans MOTS ...;] faire COMM>
compopt [option -o | + o] [-DE] [nom ..> définir [-abefhkmnptuvxBCHP] [option -o->
continuer [n] shift [n]
Commande coproc [NAME] [redirections] shopt [-pqsu] [-o] [optname ...]
declare [-aAfFgilnrtux] [-p] [nom [= v> nom_fichier source [arguments]
dirs [-clpv] [+ N] [-N] suspendre [-f]
désavouer [-h] [-ar] [jobspec ... |  pid> test [expr]
echo [-neE] [arg ...] time [-p] pipeline
activer [-a] [-dnps] [-f nomfichier] [na> fois
eval [arg ...] piège [-lp] [[arg] signal_spec ...]
exec [-cl] [-a nom] [commande [argument]> true
exit [n] tapez [-afptP] nom [nom ...]
export [-fn] [nom [= valeur] ...] ou ex> typeset [-aAfFgilnrtux] [-p] nom [= v>
faux ulimit [-SHabcdefiklmnpqrstuvxPT] [l>
fc [-e ename] [-lnr] [premier] [dernier] o> umask [-p] [-S] [mode]
fg [job_spec] unalias [-a] nom [nom ...]
pour NAME [dans les mots ...];  faire COMMAND> unset [-f] [-v] [-n] [nom ...]
pour ((exp1; exp2; exp3));  faites COMMAN> jusqu'à COMMANDES;  faire des commandes;  terminé
nom de fonction {COMMANDS;  } ou nom> variables - Noms et significations de so>
getopts optstring nom [arg] wait [-n] [id ...]
hash [-lr] [-p nom du chemin] [-dt] [nom> while COMMANDS;  faire des commandes;  terminé
help [-dms] [pattern ...] {COMMANDS;  }
Voi job_spec [&] historique [-c] [-d offset] [n] ou hist>
((expression)) if COMMANDS;  puis COMMANDES;  [elif C>
.  nom_fichier [arguments] jobs [-lnprs] [jobspec ...] ou jobs>
: kill [-s sigspec |  -n signum |  -sigs>
[arg ...] laissez arg [arg ...]
[[expression]] local [option] nom [= valeur] ...
alias [-p] [nom [= valeur] ...] déconnexion [n]
bg [job_spec ...] mapfile [-d delim] [-n count] [-O ou>
bind [-lpsvPSVX] [-m keymap] [-f fichier> popd [-n] [+ N |  -N]
break [n] printf [-v var] format [arguments]
builtin [shell-builtin [arg ...]] pushd [-n] [+ N |  -N |  dir]
appelant [expr] pwd [-LP]
case MOT dans [PATTERN [|  PATTERN] ...)> lire [-ers] [-a tableau] [-d delim] [->
cd [-L | [-P [-e]] [- @]] [dir] readarray [-n compte] [-O origine] [-s>
commande [-pVv] commande [arg ...] en lecture seule [-aAf] [nom [= valeur] ...] o>
compgen [-abcdefgjksuv] [option -o] [> return [n]
compléter [-abcdefgjksuv] [-pr] [-DE]> sélectionner NOM [dans MOTS ...;] faire COMM>
compopt [option -o | + o] [-DE] [nom ..> définir [-abefhkmnptuvxBCHP] [option -o->
continuer [n] shift [n]
Commande coproc [NAME] [redirections] shopt [-pqsu] [-o] [optname ...]
declare [-aAfFgilnrtux] [-p] [nom [= v> nom_fichier source [arguments]
dirs [-clpv] [+ N] [-N] suspendre [-f]
désavouer [-h] [-ar] [jobspec ... |  pid> test [expr]
echo [-neE] [arg ...] time [-p] pipeline
activer [-a] [-dnps] [-f nomfichier] [na> fois
eval [arg ...] piège [-lp] [[arg] signal_spec ...]
exec [-cl] [-a nom] [commande [argument]> true
exit [n] tapez [-afptP] nom [nom ...]
export [-fn] [nom [= valeur] ...] ou ex> typeset [-aAfFgilnrtux] [-p] nom [= v>
faux ulimit [-SHabcdefiklmnpqrstuvxPT] [l>
fc [-e ename] [-lnr] [premier] [dernier] o> umask [-p] [-S] [mode]
fg [job_spec] unalias [-a] nom [nom ...]
pour NAME [dans les mots ...];  faire COMMAND> unset [-f] [-v] [-n] [nom ...]
pour ((exp1; exp2; exp3));  faites COMMAN> jusqu`à COMMANDES;  faire des commandes;  terminé
nom de fonction {COMMANDS;  } ou nom> variables - Noms et significations de so>
getopts optstring nom [arg] wait [-n] [id ...]
hash [-lr] [-p nom du chemin] [-dt] [nom> while COMMANDS;  faire des commandes;  terminé
help [-dms] [pattern ...] {COMMANDS;  }
Voi job_spec [&] historique [-c] [-d offset] [n] ou hist>
((expression)) if COMMANDS;  puis COMMANDES;  [elif C>
.  nom_fichier [arguments] jobs [-lnprs] [jobspec ...] ou jobs>
: kill [-s sigspec |  -n signum |  -sigs>
[arg ...] laissez arg [arg ...]
[[expression]] local [option] nom [= valeur] ...
alias [-p] [nom [= valeur] ...] déconnexion [n]
bg [job_spec ...] mapfile [-d delim] [-n count] [-O ou>
bind [-lpsvPSVX] [-m keymap] [-f fichier> popd [-n] [+ N |  -N]
break [n] printf [-v var] format [arguments]
builtin [shell-builtin [arg ...]] pushd [-n] [+ N |  -N |  dir]
appelant [expr] pwd [-LP]
case MOT dans [PATTERN [|  PATTERN] ...)> lire [-ers] [-a tableau] [-d delim] [->
cd [-L | [-P [-e]] [- @]] [dir] readarray [-n compte] [-O origine] [-s>
commande [-pVv] commande [arg ...] en lecture seule [-aAf] [nom [= valeur] ...] o>
compgen [-abcdefgjksuv] [option -o] [> return [n]
compléter [-abcdefgjksuv] [-pr] [-DE]> sélectionner NOM [dans MOTS ...;] faire COMM>
compopt [option -o | + o] [-DE] [nom ..> définir [-abefhkmnptuvxBCHP] [option -o->
continuer [n] shift [n]
Commande coproc [NAME] [redirections] shopt [-pqsu] [-o] [optname ...]
declare [-aAfFgilnrtux] [-p] [nom [= v> nom_fichier source [arguments]
dirs [-clpv] [+ N] [-N] suspendre [-f]
désavouer [-h] [-ar] [jobspec ... |  pid> test [expr]
echo [-neE] [arg ...] time [-p] pipeline
activer [-a] [-dnps] [-f nomfichier] [na> fois
eval [arg ...] piège [-lp] [[arg] signal_spec ...]
exec [-cl] [-a nom] [commande [argument]> true
exit [n] tapez [-afptP] nom [nom ...]
export [-fn] [nom [= valeur] ...] ou ex> typeset [-aAfFgilnrtux] [-p] nom [= v>
faux ulimit [-SHabcdefiklmnpqrstuvxPT] [l>
fc [-e ename] [-lnr] [premier] [dernier] o> umask [-p] [-S] [mode]
fg [job_spec] unalias [-a] nom [nom ...]
pour NAME [dans les mots ...];  faire COMMAND> unset [-f] [-v] [-n] [nom ...]
pour ((exp1; exp2; exp3));  faites COMMAND> jusqu`à COMMANDES;  faire des commandes;  terminé
nom de fonction {COMMANDS;  } ou nom> variables - Noms et significations de so>
getopts optstring nom [arg] wait [-n] [id ...]
hash [-lr] [-p nom du chemin] [-dt] [nom> while COMMANDS;  faire des commandes;  terminé
help [-dms] [pattern ...] {COMMANDS;  }

9 - Ajouter des programmes

Vous pouvez ajouter d'autres programmes avec les outils suivants :

- git

- wget

- setup-x86_64 (les paquets disponibles sur les sites miroir de cygwin sont entièrement compatibles avec Dark Moon car ils sont émulés par cygwin.dll)

10 - Mode de lancement du logiciel

Il existe 2 versions de ce logiciel :

- une version en console ;

- une version en interface graphique avec Xfce.

Pour exécuter la console Windows depuis Dark Moon, tapez « cmd » :

[1].Start an XFCE session
[2].Start terminal
[3].Exit DarkMoon
#####
#######
#                                            ##O#O##
######          ###                                           #VVVVV#
##             #                                          ##  VVV  ##
##         ###    ### ####   ###    ###  ##### #####     #          ##
##        #  ##    ###    ##  ##     ##    ##   ##      #            ##
##       #   ##    ##     ##  ##     ##      ###        #            ###
##          ###    ##     ##  ##     ##      ###       QQ#           ##Q
##       # ###     ##     ##  ##     ##     ## ##    QQQQQQ#       #QQQQQQ
##      ## ### #   ##     ##  ###   ###    ##   ##   QQQQQQQ#     #QQQQQQQ
############  ###   ####   ####   #### ### ##### #####   QQQQQ#######QQQQQ
DARK MOON X for Microsoft Windows (c) UWP. GNU licensed project
2
Admin@DESKTOP-70FKMR6 ~
$ cmd
Microsoft Windows [version 10.0.17134.885]
(c) 2018 Microsoft Corporation. Tous droits réservés.
C:\Linux\home\Admin>

Pour exécuter PowerShell tapez « Powershell » :

[1].Start an XFCE session
[2].Start terminal
[3].Exit DarkMoon
#####
#######
#                                            ##O#O##
######          ###                                           #VVVVV#
##             #                                          ##  VVV  ##
##         ###    ### ####   ###    ###  ##### #####     #          ##
##        #  ##    ###    ##  ##     ##    ##   ##      #            ##
##       #   ##    ##     ##  ##     ##      ###        #            ###
##          ###    ##     ##  ##     ##      ###       QQ#           ##Q
##       # ###     ##     ##  ##     ##     ## ##    QQQQQQ#       #QQQQQQ
##      ## ### #   ##     ##  ###   ###    ##   ##   QQQQQQQ#     #QQQQQQQ
############  ###   ####   ####   #### ### ##### #####   QQQQQ#######QQQQQ
DARK MOON X for Microsoft Windows (c) UWP. GNU licensed project
2
Admin@DESKTOP-70FKMR6 ~
$ powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. Tous droits réservés.
PS C:\Linux\home\Admin>

11 - Dark Moon en ligne de commande Windows

Lancer Bash et XFCE à partir de cmd et powershell :

- Pour démarrer XFCE, tapez dans la console :

cd% systemdrive% / linux
start_xfce

- Et pour démarrer une session Bash, tapez ceci :

cd% systemdrive% / linux
start_bash

- Vous pouvez également choisir de lancer le menu en tapant ceci sur la console (comme vu dans la partie 10) :

cd% systemdrive% / linux
start_linux

12 - apt-cyg

Installez et lancez apt-cyg :

Téléchargez apt-cyg avec la commande wget :

$ wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg

Vous obtiendrez ceci :

--2019-07-26 20: 19: 24-- https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
Résolution de raw.githubusercontent.com (raw.githubusercontent.com)… 151.101.120.133
Connexion à raw.githubusercontent.com (raw.githubusercontent.com) | 151.101.120.133 |: 443… connecté.
requête HTTP transmise, en attente de la réponse… 200 OK
Taille: 13765 (13K) [text / plain]
Sauvegarde en : «apt-cyg.1»
apt-cyg.1 100% [======================================== =======>] 13,44K --.- KB / s ds 0,03s
2019-07-26 20:19:25 (396 KB / s) - «apt-cyg.1» sauvegardé [13765/13765]

Après avoir téléchargé apt-cyg, vous devez faire un CHMOD de façon à donner les droits d’exécution :

chmod + x apt-cyg

Et finalement, vous devrez faire un mv (pour déplacer le fichier) :

mv apt-cyg /usr/local/bin

Voici tous les arguments de commande pour apt-cyg :

$ apt-cyg
PRÉNOM
apt-cyg - utilitaire de gestion de paquets

SYNOPSIS
apt-cyg [opération] [options] [cibles]

LA DESCRIPTION
apt-cyg est un utilitaire de gestion de paquets qui suit les paquets installés sur
Système Cygwin.  Invoquer apt-cyg implique de spécifier une opération avec
options potentielles et cibles sur lesquelles opérer.  Une cible est généralement un paquet
nom, nom de fichier, URL ou chaîne de recherche.  Les cibles peuvent être fournies en tant que commande
arguments de ligne.

Opérations
installer
Installer les packages.

retirer
Supprimez le (s) paquet (s) du système.

mettre à jour
Téléchargez une nouvelle copie de la liste de paquets principaux (setup.ini) à partir du
serveur défini dans setup.rc.

télécharger
Récupérez les packages du serveur, mais n’installez / mettez à niveau rien.

spectacle
Affiche des informations sur les paquets donnés.

dépend
Produire un arbre de dépendance pour un package.

dépendants
Produire une arborescence de packages qui dépendent du package nommé.

liste
Recherchez dans chaque package installé localement les noms correspondants à regexp.  Sinon
Les noms de paquets sont fournis dans la ligne de commande, tous les paquets installés
être interrogé.

tout lister
Ceci recherchera chaque paquet dans la liste des paquets maîtres (setup.ini)
noms qui correspondent à regexp.

catégorie
Afficher tous les packages membres d'une catégorie nommée.

listfiles
Répertorie tous les fichiers appartenant à un paquet donné.  Plusieurs packages peuvent être spécifiés
sur la ligne de commande.
chercher
Recherchez les packages téléchargés qui possèdent le (s) fichier (s) spécifié (s).  Le chemin peut
être relatif ou absolu, et un ou plusieurs fichiers peuvent être spécifiés.
fouiller
Effectuez une recherche sur cygwin.com pour récupérer les informations sur les fichiers relatifs aux packages.  Le fourni
la cible est considérée comme un nom de fichier et searchall retournera le
paquet (s) contenant ce fichier.
miroir
Placez le miroir.  une URL complète vers un emplacement où se trouvent la base de données, les packages et
les signatures pour ce référentiel peuvent être trouvés.  Si aucune URL n'est fournie, affichez
miroir de courant.
cache
Définissez le répertoire de cache du paquet.  Si un fichier est introuvable dans le répertoire cache,
il sera téléchargé.  Les formulaires Unix et Windows sont acceptés, ainsi que
chemins absolus ou réguliers.  Si aucun répertoire n’est fourni, affiche le répertoire en cours.
cache.
OPTIONS
--nodeps
Spécifiez cette option pour ignorer toutes les vérifications de dépendance.
--version
Afficher la version et quitter.

13 - Captures d'écran

14 - Licence

Code publié sous licence GNU

Une partie de l’article est tiré de la documentation anglophone de Dark Moon.