Quand j’ai commencé à apprendre la cybersécurité, j’ai rapidement compris qu’il ne suffisait pas seulement de connaître les réseaux, Linux ou les outils comme Nmap. Il est aussi crucial de comprendre comment la machine fonctionne à un niveau plus profond. Pour cela, le langage C est incontournable. Il est proche du matériel, extrêmement rapide, et c'est la base de la plupart des systèmes d'exploitation. Dans cet article, je vais expliquer les bases du C qu’il faut apprendre au début et comment progresser pour l’utiliser dans l'analyse de vulnérabilités et la sécurité.
Pourquoi apprendre le C en cybersécurité ?
Le C n'est pas utilisé pour automatiser de petites tâches (Python est meilleur pour ça). En cybersécurité, le C sert à comprendre ce qui se passe sous le capot : comment la mémoire est gérée, comment un buffer overflow se produit, ou comment analyser des malwares (souvent écrits en C/C++). Le C permet de :
comprendre la gestion de la mémoire (RAM) ;
analyser et créer des exploits ;
faire du reverse engineering (rétro-ingénierie) ;
interagir directement avec le noyau Linux ou Windows ;
comprendre les failles de sécurité à la source.
Mais avant de faire tout cela, il faut bien apprendre les bases.
1. Commencer par les variables
Une variable permet de stocker une information dans la mémoire RAM. En C, il faut toujours déclarer le type avant :
char nom[] = "Abdessamad";
int age = 22;
On peut ensuite afficher ces informations avec la fonction printf :
printf("Bonjour %s, tu as %d ans.\n", nom, age);
2. Comprendre les types de données
En C, le typage est très strict. La machine a besoin de savoir exactement combien d'espace mémoire allouer.
int= nombre entier (ex:80)float= nombre décimal (ex:10.5)char= un seul caractère (ex:'A')
Il n'y a pas de type "texte" natif comme en Python, on utilise des tableaux de caractères pour faire des mots.
3. Apprendre les conditions
Les conditions permettent au programme de prendre une décision.
int port = 22;
if (port == 22) {
printf("Service SSH détecté\n");
} else {
printf("Autre service\n");
}
C'est très utilisé pour vérifier les codes de retour (par exemple, vérifier si une connexion réseau a réussi ou échoué).
4. Les boucles
Les boucles permettent de répéter une action. La syntaxe est un peu différente de Python :
for (int i = 1; i <= 3; i++) {
printf("Test du port %d\n", i);
}
5. Les tableaux (au lieu des listes)
En C, on n'a pas de listes dynamiques simples, on utilise des tableaux dont la taille est fixe :
int ports[4] = {21, 22, 80, 443};
for (int i = 0; i < 4; i++) {
printf("Port cible : %d\n", ports[i]);
}
6. Les fonctions
Une fonction permet de regrouper du code. Il faut préciser ce que la fonction va renvoyer.
void afficher_port(int port) {
printf("Analyse du port %d\n", port);
}
int main() {
afficher_port(80);
return 0;
}
7. Le cœur du C : Les pointeurs
C'est la notion la plus importante en C pour la cybersécurité. Un pointeur ne stocke pas une valeur, mais l'adresse mémoire où se trouve la valeur.
int port = 80;
int *pointeur_port = &port;
printf("Le port est stocké à l'adresse mémoire : %p\n", pointeur_port);
Comprendre les pointeurs est indispensable pour chercher des vulnérabilités de corruption de mémoire.
8. Les structures
Les structures permettent de créer des types de données personnalisés, très utiles pour modéliser des paquets réseau.
struct Paquet {
int ip_source;
int port_dest;
};
struct Paquet p1;
p1.port_dest = 443;
9. Commencer avec le réseau
Faire du réseau en C est plus complexe qu'en Python, mais c'est très instructif. On utilise la bibliothèque de sockets de l'OS (<sys/socket.h> sous Linux).
Cela demande de manipuler des structures, des pointeurs et des adresses IP traduites en octets (avec arpa/inet.h).
10. Créer de petits projets
Pour progresser en C, la théorie ne suffit pas :
Projet 1 : Scanner de ports basique en C Utiliser les sockets TCP pour tenter de se connecter à une liste de ports sur une adresse IP locale.
Projet 2 : Gestion de mémoire Créer un programme qui alloue de la mémoire dynamiquement avec
malloc(), la remplit de données, puis la libère avecfree().Projet 3 : Simulation d'un Buffer Overflow Dans un environnement contrôlé, créer un programme vulnérable avec
strcpy()pour observer comment la mémoire déborde.
11. Ce qu’il faut apprendre ensuite
Un bon ordre pour progresser en C :
Bases (Variables, Boucles) → Fonctions → Pointeurs → Tableaux & Chaînes → Structures → Allocation dynamique (malloc) → Sockets réseau → Reverse Engineering basique.
12. C avec Linux
Le C et Linux sont faits l'un pour l'autre. Le noyau Linux est écrit en C.
On compile un programme depuis le terminal avec gcc :
gcc scanner.c -o scanner
./scanner
Apprendre à lire les erreurs de compilation (segfaults) aide énormément à comprendre l'architecture Linux.
13. Le C ne remplace pas les bases de la cybersécurité
Connaître la syntaxe du C ne suffit pas. Il faut comprendre l'architecture des processeurs (registres, pile d'exécution), l'assembleur, et les protocoles réseau pour que vos programmes en C aient un vrai sens en sécurité informatique.
Conclusion
Le langage C a une courbe d'apprentissage plus rude que Python, mais c'est un investissement sur le long terme. Au début, concentrez-vous sur la syntaxe de base, les pointeurs et les structures. Même un petit programme réseau de 50 lignes en C vous apprendra infiniment plus sur le fonctionnement réel de votre ordinateur qu'un script Python équivalent.

0 Commentaires