Bonsoir à tous,
Je suis actuellement étudiant en sécurité informatique et plus précisément en software engineering. L'une de nos compétences étant d'appréhender le fonctionnement de chaque programme en détail, nous sommes parfois confrontés à des sortes de défis, qu'on appelle régulièrement des 'CTF'.
L'un des CTF était de trouver une clé précise pour le programme. Pour faire simple : pour gagner le CTF, on devait entrer la bonne clé.
Bref après quelques bidouillages (inutile de vous poster le code, c'est en assembleur et je pense que certains ne maîtrisent pas ici :/) j'ai eu quelques indices :
- La clé doit faire au moins 5 de longueur
- Le premier caractère de la clé doit être un ASCII aléatoire entre 32 et 128
- Le second caractère est un '@'
- et enfin le troisième, quatrième et cinquième doivent être la somme (en ASCII) équivalentes toutes les trois à 300
On nous a demandé le tout de faire un programme trouvant toutes les combinaisons possibles pour la clé, en C et en python. J'ai réussi la partie python assez facilement (2 ans que je l'étudie), mais le C que nous venons de commencer il y a deux semaines je bloque un peu.
J'ai essayé de chercher comment faire la somme de tous les ASCII sur des fofo anglais mais j'ai rien trouvé qui puisse m'aider
Pour l'étape 1,2 et 3, j'ai bien réussi :
Voilà, si quelqu'un pouvait me donner un indice parce que là je bloque totalement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 #include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #define ASCII_S 32 #define ASCII_E 126 char* genString(size_t length) { int i; char* toGen = malloc(length + 1); for(i=0;i<length;++i) { toGen[i] = (char)(rand()%(ASCII_E-ASCII_S))+ASCII_S; } toGen[i] = '\0'; return toGen; } char* genSecondLength(char* string) { char toAdd = '@'; strncat(string,&toAdd,1); // printf("%s",string); return string; } int main(void) { srand(time(NULL)); char *firstLengthKey = genString(1); genSecondLength(firstLengthKey); }
PS : La partie Python est la suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 import random charset = 'abcdefgijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_-+|`~?/.,' key = charset[random.randint(0, len(charset) - 1)] key += '@' key2 = "" while len(key2) == 0 or key2[-1] not in charset: key2 = charset[random.randint(0, len(charset) - 1)] key2 += charset[random.randint(0, len(charset) - 1)] key2 += chr(300 - ord(key2[-1]) - ord(key2[-2])) print(key + key2)
Merci à tous
Partager