Outil utilisé pour ce challenge : Cutter
Avant d’aller plus loin, il faut connaître le fonctionnement de :
Voici le programme principal de l’exécutable aaarg
:
undefined8 main(int argc, char **str)
{
undefined8 uVar1;
int64_t iVar2;
uint64_t uVar3;
char **endptr;
uVar1 = 1;
if (1 < argc) {
// convertion de la chaîne de caractères en nombre entier
iVar2 = strtoul(str[1], &endptr, 10);
uVar1 = 1;
// argc (argument count) is an integer that indicates how many arguments
// were entered on the command line when the program was started.
// The first argument is always the name of the program.
//
// Donc ici, si le nombre d'arguments multiplié par -1 est égal au nombre entier négatif entré par le user
// exemple 1 : ./aaarg -2
// exemple 2 : ./aaarg -3 hackropole
// exemple 3 : ./aaarg -4 hackropole aaarg
if ((*(char *)endptr == '\0') && (uVar1 = 2, iVar2 == -argc)) {
uVar3 = 0;
do {
// alors on affiche caractère par caractère
putc((int32_t)*(char *)(uVar3 + 0x402010), _stdout); // débute en 0x402010
uVar3 = uVar3 + 4; // prochain caractère 4 octets plus loin
} while (uVar3 < 0x116); // pendant 0x116 octets
putc(10, _stdout);
uVar1 = 0;
}
}
return uVar1;
}
Voici la séquence d’octets du flag à afficher à partir de l’adresse 0x402010
:
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | 0123456789ABCDEF
0x402010 46 E2 80 8D 43 E2 80 8D 53 E2 80 8D 43 E2 80 8D | F...C...S...C...
0x402020 7B E2 80 8D 66 E2 80 8D 39 E2 80 8D 61 E2 80 8D | {...f...9...a...
0x402030 33 E2 80 8D 38 E2 80 8D 61 E2 80 8D 64 E2 80 8D | 3...8...a...d...
0x402040 61 E2 80 8D 63 E2 80 8D 65 E2 80 8D 39 E2 80 8D | a...c...e...9...
0x402050 64 E2 80 8D 64 E2 80 8D 61 E2 80 8D 33 E2 80 8D | d...d...a...3...
0x402060 61 E2 80 8D 39 E2 80 8D 61 E2 80 8D 65 E2 80 8D | a...9...a...e...
0x402070 35 E2 80 8D 33 E2 80 8D 65 E2 80 8D 37 E2 80 8D | 5...3...e...7...
0x402080 61 E2 80 8D 65 E2 80 8D 63 E2 80 8D 31 E2 80 8D | a...e...c...1...
0x402090 38 E2 80 8D 30 E2 80 8D 63 E2 80 8D 35 E2 80 8D | 8...0...c...5...
0x4020A0 61 E2 80 8D 37 E2 80 8D 33 E2 80 8D 64 E2 80 8D | a...7...3...d...
0x4020B0 62 E2 80 8D 62 E2 80 8D 37 E2 80 8D 63 E2 80 8D | b...b...7...c...
0x4020C0 33 E2 80 8D 36 E2 80 8D 34 E2 80 8D 66 E2 80 8D | 3...6...4...f...
0x4020D0 65 E2 80 8D 31 E2 80 8D 33 E2 80 8D 37 E2 80 8D | e...1...3...7...
0x4020E0 66 E2 80 8D 63 E2 80 8D 36 E2 80 8D 37 E2 80 8D | f...c...6...7...
0x4020F0 32 E2 80 8D 31 E2 80 8D 64 E2 80 8D 37 E2 80 8D | 2...1...d...7...
0x402100 39 E2 80 8D 39 E2 80 8D 37 E2 80 8D 63 E2 80 8D | 9...9...7...c...
0x402110 35 E2 80 8D 34 E2 80 8D 65 E2 80 8D 38 E2 80 8D | 5...4...e...8...
0x402120 64 E2 80 8D 7D 00 00 00 | d...}...
Vérification :
./aaarg -6 hackropole aaarg by pva
FCSC{f9a38adace9dda3a9ae53e7aec180c5a73dbb7c364fe137fc6721d7997c54e8d}