Solution de botanicmagic pour Aaarg

intro reverse linux x86/x64

8 janvier 2025

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}