Game1.ps1

$level=0

function New-Level {
    param([String]$instruction,[String]$solution)
    $password = ConvertTo-SecureString $solution -AsPlainText -Force
    $Script:level++
    $l=$Script:level
    New-LocalUser "level$l" -Password $password -PasswordNeverExpires -UserMayNotChangePassword | Add-LocalGroupMember Administrateurs
    Start-Process "cmd.exe" -Credential (New-Object management.automation.pscredential "level$l",$password) -ArgumentList "/C"
    (New-Item "C:\Users\level$l\Documents\Get-Instruction.ps1" -ItemType File -Force).Attributes = 'Hidden'
    (New-Item "C:\Users\level$l\Documents\Get-Solution.ps1"    -ItemType File -Force).Attributes = 'Hidden'
    (New-Item "C:\Users\level$l\Documents\Solution"            -ItemType File -Force).Attributes = 'Hidden'
    Set-Location "C:\Users\level$($l-1)\Documents"
    $solution = "Le mot de passe pour level$l est '$solution'."
    "'Le mot de passe pour level$l est $instruction.'"                                                              >> Get-Instruction.ps1
    ConvertFrom-SecureString (ConvertTo-SecureString $solution -AsPlainText -Force) -key(1..16)                     >> Solution
    '$SecureString = ConvertTo-SecureString (Get-Content Solution) -key(1..16)'                                     >> Get-Solution.ps1
    '(New-Object System.Management.Automation.PSCredential ''N/A'', $SecureString).GetNetworkCredential().Password' >> Get-Solution.ps1
    '[int](Get-Content C:\Users\Malus)+1 | Set-Content C:\Users\Malus'                                              >> Get-Solution.ps1
}
function Get-Solution {
}
# Désactivation de la complexité des mots de passe et Initialisation du Jeu
secedit /export /cfg secpol.cfg
(Get-Content secpol.cfg).Replace("PasswordComplexity = 1", "PasswordComplexity = 0") | Out-File secpol.cfg
secedit /configure /db c:\windows\security\local.sdb /cfg secpol.cfg /areas SECURITYPOLICY
Remove-Item -Force secpol.cfg -Confirm:$false
(New-Item C:\Users\Malus -ItemType File).Attributes = 'Hidden'
New-Item C:\Users\level0\Documents -ItemType Directory -Force
New-Level level1 level1

# Niveau 1
$mot_compose = 'hard_','unders_','s_','_en','en_','multi_','_team' | Get-Random
Out-File "C:\Users\level$level\Documents\$mot_compose"
New-Level "le nom du fichier avec un ''_'' a remplacer par l''edition de PowerShell (variable)" $mot_compose.Replace('_',$PSEdition.ToLower())

# Niveau 2
New-Level "le nombre de commandes de type Cmdlet" (Get-Command -CommandType Cmdlet | Measure-Object).Count

# Niveau 3
New-Level "le nombre de DLL Windows dont le nom commence par ''K''" (Get-ChildItem C:\Windows\System32\k*.dll).Count

# Niveau 4
New-Level "le numero de serie du Bios sans espace (ComputerInfo)" (Get-CimInstance -ClassName Win32_BIOS).SerialNumber.Replace(' ','')

# Niveau 5
New-Level "le ''MachineID'' dans la cle de registre ''HKLM:\SOFTWARE\Microsoft\SQMClient''" (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\SQMClient").MachineID

# Niveau 6
New-Level "l''identifiant universel unique (UUID) du systeme Windows" (Get-CimInstance Win32_ComputerSystemProduct).UUID

# Niveau 7
New-Level "l''identifiant de securite (SID) de l''utilisateur level$level" (Get-LocalUser "level$level").SID.Value

# Niveau 8
$alea = Get-Random -Maximum 1000
Out-File "C:\Users\level$level\Documents\$alea"
New-Level "le nom de la cmdlet equivalente a ''mount'' + le nom du fichier dans Documents" ((Get-Alias mount).Definition + (Get-ChildItem).Name)

# Niveau 9
New-Level "l''Adresse Mac de l''adaptateur ''Ethernet0''" (Get-NetAdapter Ethernet0).MacAddress

# Niveau 10
New-Level "l''Adresse IPv4 de l''adaptateur ''Ethernet0''" (Get-NetIPAddress -InterfaceAlias Ethernet0).IPv4Address

# Niveau 11
For($i=1;$i -lt (Get-Random -Maximum 1000);$i++) {
  $item = New-Item "C:\Users\level$level\Documents\A ranger\$(Get-Random -Maximum 1000)$i" -ItemType ('File','Directory' | Get-Random) -Force
}
New-Level "le nombre de fichiers dans les Documents ''A ranger''" (Get-ChildItem "C:\Users\level$level\Documents\A ranger" -File).Count

# Niveau 12
New-Level "le nombre de capacites Windows non presentes sur le systeme en ligne" (Get-WindowsCapability -Online | Where-Object State -eq NotPresent).Count

# Niveau 13
For($i=1;$i -lt (Get-Random -Maximum 1000);$i++) {
  (New-Item "C:\Users\level$level\Documents\Confidentiels\$(Get-Random -Maximum 1000)$i" -ItemType ('File','Directory' | Get-Random) -Force).Attributes = 'Hidden'
}
New-Level "le nombre de dossiers caches dans les Documents ''Confidentiels''" (Get-ChildItem "C:\Users\level$level\Documents\Confidentiels" -Directory -Hidden).Count

# Niveau 14
$alea = Get-Random -Maximum 1000
(New-Item "C:\Users\level$level\Documents\Coffre Fort" -Value $alea -Force).Attributes = 'Hidden'
New-Level "la valeur de NPARA_PASSWORD a la ligne 846 du script systeme ''winrm.vbs'' + le code secret du document cache" ((Get-Content C:\windows\system32\winrm.vbs)[846].Split('"')[1] + $alea)

# Niveau 15
New-Level "le nombre de services en cours d''execution et en type de demarrage manuel" (Get-Service | Where-Object StartType -eq Manual | Where-Object Status -eq Running).Count

# Niveau 16
New-Level "le nombre de services qui dependent directement du service ''Remote Procedure Call''" (Get-Service RPCSS -DependentServices).Count

# Niveau 17
New-Level "le nombre de proprietes de l''objet ''Process''" (Get-Process | Get-Member -MemberType Properties).Count

# Niveau 18
$fourniture = 'stylo','crayon','gomme','bloc-notes','agrafeuse','trombones','ciseaux','regle','calculatrice' | Get-Random
New-Item "C:\Users\level$level\Desktop\$fourniture" -Force
New-Level "la fourniture sur le bureau + le nombre de variables d''environnement du système" ($fourniture + (Get-ChildItem Env:).Count)

# Niveau 19
(New-Item "C:\Users\level$level\Documents\Confidentiels\PassPhrase" -Value "éclair âpre sur l'île ô combien unique des îlots émerveillés" -Force).Attributes = 'Hidden'
New-Level "la phrase secrete dans les Documents ''Confidentiels'', toute en MAJUSCULES et sans espace" (Get-Content "C:\Users\level$level\Documents\Confidentiels\PassPhrase").toUpper().Replace(' ','')