jeanne-dhack-2026

REVERSE - LoL

2026-01-30easy#reverse#ghidra#crackme

On nous donne un exécutable. En l'envoyant dans Ghidra on remarque une fonction de validation de mot de passe.

Analyse

undefined8 FUN_0010127d(char *param_1) { undefined8 uVar1; char *local_10; for (local_10 = param_1; *local_10 != '\0'; local_10 = local_10 + 1) { } if ((long)local_10 - (long)param_1 == 0x1c) { if (((((((param_1[10] == '7') && (param_1[5] == 'r')) && (param_1[0x19] == 'n')) && ((*param_1 == 'y' && (param_1[0xe] == 'N')))) && (param_1[0x15] == 'l')) && (((((param_1[0xc] == 'r' && (param_1[0x12] == 'H')) && ((param_1[0xb] == 'e' && (((param_1[0x1b] == '!' && (param_1[4] == '4')) && (param_1[1] == '0')))))) && ((param_1[0x14] == '_' && (param_1[0xd] == 'I')))) && (param_1[3] == '_')))) && ((((param_1[0x11] == '7' && (param_1[9] == 'n')) && ((param_1[7] == '_' && (((param_1[2] == 'u' && (param_1[0x16] == 'E')) && (param_1[0x13] == 'e')))))) && (((param_1[0x10] == '_' && (param_1[0x17] == 'G')) && ((param_1[8] == 'e' && (((param_1[6] == '3' && (param_1[0xf] == 'g')) && ((param_1[0x1a] == 'D' && (param_1[0x18] == 'E')))))))))))) { uVar1 = 1; } else { uVar1 = 0; } } else { uVar1 = 0; } return uVar1; }

La fonction vérifie que la chaîne fait exactement 0x1c = 28 caractères, puis valide chaque caractère à un index précis.

Reconstruction du mot de passe

Il suffit de remettre les caractères dans l'ordre en suivant les indices :

IndexHexCaractère
00x00y
10x010
20x02u
30x03_
40x044
50x05r
60x063
70x07_
80x08e
90x09n
100x0a7
110x0be
120x0cr
130x0dI
140x0eN
150x0fg
160x10_
170x117
180x12H
190x13e
200x14_
210x15l
220x16E
230x17G
240x18E
250x19n
260x1aD
270x1b!

Le mot de passe est : you_4r3_en7erINg_7He_lEGEnD!

On l'entre dans le site pour débannir le compte et obtenir le flag.