Comme dit dans la description du challenge, c'est du python, mais compilé. Des tools comme existe pour décompiler ce type de binaire. Il existe aussi une version pour les flemmards.
$ python pyinstxtractor.py keygenme1
[+] Processing keygenme1
[+] Pyinstaller version: 2.1+
[+] Python version: 3.7
[+] Length of package: 5662545 bytes
[+] Found 47 files in CArchive
[+] Beginning extraction...please standby
[+] Possible entry point: pyiboot01_bootstrap.pyc
[+] Possible entry point: keygenme1.pyc
[!] Warning: This script is running in a different Python version than the one used to build the executable.
[!] Please run this script in Python 3.7 to prevent extraction errors during unmarshalling
[!] Skipping pyz extraction
[+] Successfully extracted pyinstaller archive: keygenme1
You can now use a python decompiler on the pyc files within the extracted directory
$ uncompyle6 keygenme1.pyc
# uncompyle6 version 3.9.1
def xor_data(data, key):
return "".join((chr(ord(c) ^ key) for c in data))
def generate_key(input_str):
xor_key = 42
if len(input_str) != 8:
return "Mauvaise longueur de clé..."
expected_sum = 824
input_sum = sum((ord(c) for c in input_str))
if input_sum == expected_sum:
encrypted_flag = [
105, 126, 108, 120, 111, 99, 81, 90, 83, 94,
66, 26, 68, 117, 72, 83, 94, 25, 73, 26, 78, 25, 117,
73, 30, 68, 117, 72, 25, 117, 66, 30, 88, 78, 117,
94, 66, 26, 87]
flag = "".join((chr(b ^ xor_key) for b in encrypted_flag))
return flag
return "Clé incorrecte :("
user_input = input("Entre la clé: ")
print(generate_key(user_input))
De là, on comprend bien ce qu'il se passe. Il faut que notre input fasse 8 de longueur et que le total des valeurs ASCII de celui-ci fasse 824. Comme notre input n'est pas utilisé pour déchiffrer le flag, on va pas s'embêter à keygen ça et simplement lancer la partie qui nous intérresse
De là on récupère pas mal de fichiers, mais celui qui nous intéresse est keygenme1.pyc, c'est lui qui contient le main du programme. Même si c'est faisable, pour éviter de galérer, on va utiliser un autre outil comme pour décompiler le .pyc en un équivalent du code source .py. Encore une fois, une version .