Description du challenge
Le challenge consiste à inverser des chaînes de caractères envoyées par un service distant. Le service envoie une chaîne de caractères précédée de >>>
, et attend en retour la même chaîne, mais avec les caractères dans l’ordre inverse.
Résolution du challenge
Il faut commencer par se connecter sur le port TCP 4000 pour observer le comportement du service. À partir d’une invite PowerShell,
ncat localhost 4000
Écriture du code Powershell
Nous allons écrire un script Powershell pour automatiser le processus d’inversion et de soumission des chaînes de caractères. Le script utilisera un socket pour se connecter au service, recevoir des données, inverser les chaînes de caractères et renvoyer les résultats.
Voici le code powershell utilisé :
$server = "localhost"
$port = 4000
$tcpConnection = New-Object System.Net.Sockets.TcpClient($server, $Port)
$tcpStream = $tcpConnection.GetStream()
$reader = New-Object System.IO.StreamReader($tcpStream)
$writer = New-Object System.IO.StreamWriter($tcpStream)
$writer.AutoFlush = $true
$buffer = new-object System.Byte[] 1024
$encoding = new-object System.Text.AsciiEncoding
function reverse
{
Param(
[string]$str
)
$sb = New-Object System.Text.StringBuilder($str.Length)
write-verbose $sb.Capacity
for ($i = ($str.Length - 1); $i -ge 4; $i--)
{
[void]$sb.Append($str.Chars($i))
}
return $sb.ToString()
}
while ($tcpConnection.Connected)
{
[string]$chaine = $reader.readline()
Write-Host $chaine
if ($chaine.StartsWith("FCSC"))
{
write-host "FOUND :)"
write-host $chaine -ForegroundColor Green
break
}
if ($chaine.startswith(">"))
{
$verlan = reverse($chaine)
$command = $verlan+"`n"
write-host $command
$writer.Write($command)
$writer.Flush()
}
}
$reader.Close()
$writer.Close()
$tcpConnection.Close()
Explication du code
Comme d’autres, j’ai recontré la difficulté de l’absence de retour à la ligne dans les chaînes de caractères inversées soumises au service. c’est l’objet de la ligne
$command = $verlan+"`n"
Pareil, il faut filtrer les lignes renvoyées par le serveur pour n’inverser que les chaînes commençant par >>>
.
Enfin, le script s’arrête de lui même dès que la chaîne renvoyée par le serveur débutera par “FCSC”, la solution sera alors affichée en couleur verte.
Conclusion
Ce challenge permet de s’exercer à manipuler les chaînes de caractères et à communiquer à l’aide d’un sockect TCP.