Sloubi

Le binaire sloubli est téléchargeable ici

Analyse du binaire

On va utiliser l'outil objdump sur ce binaire pour lire son contenu et voir si on n'a pas quelque chose d'intéressant.

Dans la section .rodata on voit quelque chose d'intéressant :

kali@Tyrell:~/FCSC/2025/Intro/Sloubi$ objdump -s -j .rodata sloubi

sloubi:     format de fichier elf64-x86-64

Contenu de la section .rodata :
 2000 01000200 00000000 4e6f7065 2e000000  ........Nope....
 2010 34427d6d 4375434e 4a6d6556 6876437a  4B}mCuCNJmeVhvCz
 2020 51757346 4853377b 32674342 43725157  QusFHS7{2gCBCrQW
 2030 00000000 00000000 436f6e67 72617473  ........Congrats
 2040 2120596f 75206361 6e207573 65207468  ! You can use th
 2050 69732066 6c616720 746f2076 616c6964  is flag to valid
 2060 61746520 74686520 6368616c 6c656e67  ate the challeng
 2070 652e00                               e..  

Juste avant le "Congrats", on peut voir une chaîne qui pourrait être notre flag mélangé.

Écrivons un script pour remettre de l'ordre dans tout ça :

target = "4B}mCuCNJmeVhvCzQusFHS7{2gCBCrQW"

# Longueur attendue
n = len(target)

# Déterminons l'inverse de la permutation utilisée dans le programme
inverse_perm = [0] * n
for i in range(n):
   j = (i * 17 + 0x33) % n
   inverse_perm[j] = i

# Recréons l'entrée utilisateur initiale à partir de la version permutée
reconstructed_input = [''] * n
for i, idx in enumerate(inverse_perm):
   reconstructed_input[idx] = target[i]

# Formatage final
flag = ''.join(reconstructed_input)
print(flag)

Flag :

FCSC{JgeBhrCWQBsmHu7N2mCVCvQz4u}

*Aucune IA n'a été maltraitée :)