babash.psm1
function Remove-LocalUser { param([String]$name) userdel $name --force } function New-LocalUser { param([String]$name,[String]$password) useradd --password $(openssl passwd -1 $password) $name --create-home --shell '/bin/bash' } function New-Level { param([String]$instruction,[String]$indice,[String]$solution) $Script:level++ New-LocalUser "babash$Script:level" -Password $solution $SecureSolution = ConvertFrom-SecureString (ConvertTo-SecureString "Le mot de passe pour babash$Script:level est '$solution'." -AsPlainText -Force) -key(1..16) $SecureIndice = ConvertFrom-SecureString (ConvertTo-SecureString $indice -AsPlainText -Force) -key(1..16) New-Item "/home/babash$($Script:level-1)/.instruction" -Value "Le mot de passe pour babash$Script:level est $instruction." -Force New-Item "/home/babash$($Script:level-1)/.indice" -Value $SecureIndice -Force New-Item "/home/babash$($Script:level-1)/.solution" -Value $SecureSolution -Force } function Get-Instruction { if ($env:USER -match 'babash') { Get-Content "$env:HOME/.instruction" } else { Get-Content /home/babash0/.instruction } } function Get-Indice { if ($env:USER -match 'babash') { $SecureIndice = ConvertTo-SecureString (Get-Content "$env:HOME/.indice") -key(1..16) (New-Object System.Management.Automation.PSCredential 'N/A', $SecureIndice).GetNetworkCredential().Password [int](Get-Content /tmp/.malus)+5 | Set-Content /tmp/.malus } else { Get-Content /home/babash0/.instruction } } function Get-Solution { if ($env:USER -match 'babash') { $SecureSolution = ConvertTo-SecureString (Get-Content "$env:HOME/.solution") -key(1..16) (New-Object System.Management.Automation.PSCredential 'N/A', $SecureSolution).GetNetworkCredential().Password [int](Get-Content /tmp/.malus)+10 | Set-Content /tmp/.malus } else { Get-Content /home/babash0/.instruction } } function Build-Levels { New-Level babash1 babash1 babash1 # Niveau 1 $alea = Get-Random -Maximum 6 New-Level "le raccourci clavier pour basculer sur le terminal texte n°$alea" "3 touches pressées simultanément" "CtrlAltF$alea" # Niveau 2 $alea = 'galere','noob','bug','oops','help','what','retry','lost','nul','bleu' | Get-Random New-Item "/home/babash$Script:level/$alea" -Force New-Level "le raccourci pour basculer sur la console graphique + le nom du fichier dans le dossier personnel" "Utilisez la commande 'ls'" "CtrlAltF7$alea" # Niveau 3 $alea = Get-Random -Maximum 10000 New-Item "/home/babash$Script:level/$alea" -ItemType Directory -Force New-Level "le raccourci pour ouvrir un émulateur de terminal + le nom du répertoire dans le dossier personnel" "Utilisez l'option '-l'" "CtrlAltT$alea" # Niveau 4 $alea = 'galere','noob','bug','oops','help','what','retry','lost','nul','bleu' | Get-Random New-Item "/home/babash$Script:level/$alea" -ItemType Directory -Force $alea = Get-Random -Maximum 10000 New-Item "/home/babash$Script:level/$alea" -Force New-Level "les 2 interfaces graphiques Linux les plus légères + le nom du fichier dans le dossier personnel" "La 1ère termine par 't', la 2ème commence par 'X'" "LXQtXFCE$alea" # Niveau 5 $alea = 'galere','noob','bug','oops','help','what','retry','lost','nul','bleu' | Get-Random New-Item "/home/babash$Script:level/$alea" -Force $alea = Get-Random -Maximum 1000 New-Item "/home/babash$Script:level/$alea" -ItemType Directory -Force New-Level "ce qui permet de vérifier l'identité de l’utilisateur + le nom du répertoire dans le dossier personnel" "Commence par 'auth'" "authentification$alea" # Niveau 6 New-Level "le prompt de l'utilisateur du prochain niveau" "Le prompt vous invite à taper une commande" "babash$($Script:level+1)@$(hostname):~$" # Niveau 7 $cmd = 'adduser','ls','who','passwd','wc','echo','date','sleep' | Get-Random New-Level "le nom + version des utilitaires dont fait partie '$cmd' dans le manuel" "Utilisez la commande 'man'" (man $cmd | tail -n 1).Split(' ')[0].Replace(' ','') # Niveau 8 $un_service = (Get-Content /etc/services)[(8..98 | Get-Random)].Split("`t")[0] $nb_services= (Get-Content /etc/services | Measure-Object).Count New-Item "/home/babash$Script:level/$un_service" -Force New-Level "le nom du fichier dans le dossier personnel + le nombre de services répertoriés dans '/etc/services'" "Utilisez la commande 'wc'" "$un_service$nb_services" # Niveau 9 New-Level "le nombre de secondes entre l'époque UNIX (01-01-1970 UTC) et aujourd'hui (date sans heure)" "Utilisez les formats %D et %s" (date --date (date +%D) +%s) } function Start-Playing { $Script:level=0 Remove-Item /home/babash* -Recurse -Force -Confirm:$false 1..10 | ForEach-Object { Remove-LocalUser "babash$_" -ErrorAction SilentlyContinue } Remove-Item /tmp/.malus -Force (New-Item /tmp/.malus -Force).UnixFileMode += 'OtherWrite,GroupWrite' New-Item /home/babash0 -ItemType Directory -Force Build-Levels Get-Help babash } |