Solution de sorgs-varte pour Baby Morse

intro hardware radio

27 décembre 2023

Table des matières

Description

Le but est de communiqué en morse avec netcat. La consigne : Dites FLAG et vous l’aurez.

Solution

Avec l’appel netcat sur console il y a ceci :

$ nc localhost 4000
--.- ..- . ...- --- ..- .-.. . --.. ...- --- ..- ...

Une fois l’algo de décodage fait, plus qu’à coder la réponse :

import subprocess

alpha_morse = dict(A='.-', B='-...', C='-.-.', D='-..', E='.', F='..-.', G='--.',
                H='....', I='..', J='.---', K='-.-', L='.-..', M='--', N='-.',
                O='---', P='.--.', Q='--.-', R='.-.', S='...', T='-', U='..-',
                V='...-', W='.--', X='-..-', Y='-.--', Z='--..')

def netcat2(host, port, res):
    command = ["nc", host, str(port)]

    server_process = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

    message = server_process.stdout.readline().strip().decode()
    print("Received:", message)

    response = to_morse(res)
    print('response :', response)
    server_process.stdin.write((response+"\n").encode())
    server_process.stdin.flush()

    message = server_process.stdout.readline().strip().decode()
    message = server_process.stdout.readline().strip().decode()
    print("Received:", message)
    server_process.stdin.close()
    server_process.stdout.close()
    server_process.stderr.close()

def to_morse(txt):
    res = ""
    for l in txt:
        if l == ' ':
            res+=' '
            continue
        res+= alpha_morse[l]
    return res

def to_letter(morse):
    res=""
    for m in morse.split(' '):
        if m == " ":
            res+=' '
            continue
        res+=list(alpha_morse.keys())[list(alpha_morse.values()).index(m)]
    return res

print(to_letter("--.- ..- . ...- --- ..- .-.. . --.. ...- --- ..- ..."))
netcat2("localhost", "4000", "F L A G")