Apprendre le Hacking #1 // Un monde de bases

in #busy6 years ago (edited)

Apprndre le hacking(1).png


Sommaire

  • Présentation
  • Variables
  • Opérateurs arithmétique
  • Boucles
  • Opérateurs de comparaison
  • Fonctions


Présentation

Bonjour à tous et à toutes ! Vous vous doutez bien que vous n'allez pas devenir les nouveaux plus grands hackers de l'histoire en un seul article ? Il va falloir parcourir du chemin ensemble, un chemin semé d'embûches et de reflexion. Il va aussi bien évidemment commencer par apprendre les bases.

C'est pour cela que je vous propose aujourd'hui un cours accéléré en C. Vous pourrez bien évidemment approfondir votre apprentissage par la suite sur internet. Je pense que une fois les bases en poche, le mieux est de se confronter à des problèmes. Pour cela je vous conseil le site Coding Game qui propose tout un éventail de problème à résoudre sous forme de jeux. Vous pouvez même vous confronter à des personnes réelles.

De quoi vous allez avoir besoin ?

Et bien tout d'abord, de Linux. Si vous n'avez pas lu mon dernier article de cette série je vous invite à y jeter un coup d'oeil rapidement. En effet, il est là pour vous aidez à la mise en place d'une machine virtuelle pour installer Linux.

Mais vous aurez surtout besoin de ça :

Capture.PNG

Un terminal, c'est là que nous allons passer la moitié de notre temps. Il va nous servir à coder, modifier, supprimer, executer.

Capture.PNG

Google, c'est là que nous allons passer la seconde moitié de notre temps. Il va nous servir à trouver les réponses à nos questions ... la plupart du temps !


Une lourde préparation

Aller, en route dans un monde fantastique ! Tout d'abord nous allons créer un répertoire dans lequel nous allons placer des sous répértoire. C'est pour un petit coup d'organisation ! Pour créer un répertoire, il nous faut la commande mkdir suivi du nom que vous voulez lui donner. On va ensuite vérifié que le dossier est bien créé avec la commande ls qui va nous afficher tous les dossiers et fichiers du répertoire courant. On va ensuite aller dans notre nouveau dossier grâce à la commande cd suivi du nom du dossier. Ainsi on a :

Capture.PNG

Bon, pour ne pas trop prendre de temps, je vous laisser créer (une fois dans ce répertoire) un nouveau dossier que vous allez par exemple nommer cours1. Vous allez ensuite vous placer à l'intérieur de ce dernier et nous pouvons commencer.

Pour la suite du cours et jusqu'à la fin de la série je vais utiliser vim comme éditeur de texte. Si il n'est pas installé par défaut, je vous invite à faire un tour sur internet pour l'installer. Ou bien si vous me faîtes confiance, lancer la commande sudo apt install vim.

Je vais donc commencer par créer mon nouveau fichier à l'aide de vim. Il ne faudra pas oublier de mettre l'extention .c à la fin de votre fichier. Par exemple, pour moi : vim main.c. Ok bon dernière chose importante (oui je suis désolé pour les plus avancées, j'ai promis de faire un cours pour tout le monde), Les pemières lignes de votre code .c doit contenir les librairies que vous allez utiliser. Nous verrons à qui servent ces librairies plus bas dans le cours. Vous devrez ensuite penser à mettre un int main(). Vous allez comprendre.

Capture.PNG

N'oubliez pas de bien placer vos accolades. Nous verrons une fois de plus ceci plus bas dans le cours.

Les variables

Bon nous y voilà ! Une variable en programmation pourrait être vue comme un objet. Nous allons en vérité donner une valeur à un nom. Cette valeur peut tout aussi bien être un nombre qu'une chaine de caractères. Il y a plusieurs sortes de variables, les variables normales et les constantes. Ce sont des variables qui ne changent pas.

Dans votre code, pour déclarer vos variables, vous allez avoir besoin de leur donner un type. Il faudrait voir ceci comme la préparation d'une recette de cuisine. Oui la programmation est assez imagée. Ce qui n'est pas plus mal, ça fait travailler votre créativité. Donc une variable c'est comme un ingrédient, lui donner un type va permettre de mieux organiser la mémoire de votre ordinateur quand le programme va s'éxecuter.

Tu nous parle de type mais c'est quoi ?

Le type va permettre à ton ordinateur de savoir quel est l'information que contient la variable. Il y a pour cela plusieurs types, le plus courant est le type int pour integer ou nombre entier. Vient ensuite le type float pour les nombre à virgule. Puis le type char pour contenir un caractère.

Prenons un exemple, je vais créer une variable de type int que je vais nommer lvo qui va contenir mon nombre d'abonnés. Une seconde variable de type float que je vais nommer number et qui va contenir un nombre à virgule. Enfin, une troisième variable de type char que je vais nommer alpha et qui va contenir un caractère.

Capture.PNG


Opérateurs arithmétique

En programmation et comme dans la vie de tous les jours, vous allez avoir besoin de faire des calculs. Et les calculs en C, c'est vraiment pas compliqué !

Imaginons par exemple que nous voulons ajouter 100 à notre variable lvo. Le code va tout simplement être : lvo = lvo + 100 qui en français donne ajoute 100 à la variable lvo et stocke le résultat dans lvo. Simple non ? Et bien regardez :

Capture.PNG

C'est la même chose pour tous les calculs ! Pour ceux qui ne connaissent pas encore le modulo --> %, vous allez beaucoup vous en servir, le principe est simple, le modulo vous donner le reste de la division.


Les petits raccourcis

Bon, étant donné que être assis sur une chaise à programmer c'est fatiguant, je vous propose un soulagement. Si vous trouvez que écrire lvo = lvo + 1 est compliqué, vous pouvez écrire lvo++.

De même, si vous trouvez que écrire *lvo = lvo - 1" est complqué, vous pouvez simplement écrire lvo--.

Donc pour rajouter 100 abonnés à lvo : lvo += 100. De même pour tous les opérateurs arithmétiques.

Capture.PNG


Les structures de contrôles et les boucles

Une programme n'est qu'une suite d'instructions à réaliser. C'est finalement assez proche même très proche de notre fonctionnement, en effet, en reprennant l'exemple de la recette de cuisine ou bien avec de nouveaux exemples tels que notre ADN, le gps qui vous donnes une direction, etc ...

Les structures de contrôles

En programmation, tout ceci se traduit par des strutures de contrôles et des boucles. Une structure de contrôle va simplement dire de faire ceci SI ceci est pas possible. Prenons un le cas simple d'une recette de cuisine : " Si les 400g de beurres sont mis, ajoutez une pincée de sel. Sinon, ajoutez les 400g de beurre.". Ok, pour créer ce programme, nous allons avoir besoin d'une variable de type int. Le code va être le suivant.

Capture.PNG

N'oubliez pas les accolades et les points virgules. Avez vous trouvez le truc qui cloche ? J'ai mis un printf(). Cette fonction va nous permettre d'afficher des choses dans la console. Il va pour cela falloir enregistrer votre travail et quitter l'éditeur de texte/code. Pour éxecuter du code .c sous linux, il va falloir utiliser gcc suivi de votrefichier.c. On va donc compiler notre programme.

Capture.PNG

Une erreur s'affiche me disant qu'un problème est survenu avant l'accolade. En effet, on peut voir que dans mon code, j'ai mis, à la fin de mon dernier printf() une virgule à la place d'un point virgule. Nous allons en même temps que de corriger cette erreur, mettre une dernière instruction dans notre code source. Pour dire à notre programme que nous avons terminé, nous allons placer un return 0. Ainsi, on indique à notre système d'exploitation que le programme s'est terminé sans erreur.

Capture.PNG

On utilise GCC, ce dernier nous donne un fichier a.out que nous pouvons voir grâce à la commande ls. Pour exécuter ce fichier on place jsute devant ./ ce qui donne ./a.out.

Capture.PNG

Et si dans notre variable nous avions mis 0 à la place de 400 ?

Capture.PNG

Sachez que vous pouvez aussi imbriquer vos if/else.

Capture.PNG

Le /n fait un saut à la ligne dans le terminal. Je vous laisse deviner et mettre en commantaire ce que donne ce programme.

Les boucles

Dans un programme, un boucle va servir à continuer de faire tourner le programme en boucle tant qu'une instruction ou plusieurs, n'est ou ne sont pas valiée(s). Il existe trois type de boucle, la boucle while(), la do while() que je vous invite a voir sur internet et la for().

La boucle while()

Cette boucle signifie tant que et est très simple d'utilisation. En effet, imaginons le scénario suivant : "tant que lvo n'a pas 1000 abonnés, ajouter 100 aboonés à chaque tours de boucles. ."

Ceci va se traduire par le code suivant :

Capture.PNG

Ce programme dit : tant que abonnés est inférieur à 1000, on ajoute 100. Pour afficher la valeur d'une variable dans un printf(), il faut utiliser %d entre vos guilement et mettre le nom de la variable après une virgule et des guillemets. Ce programme affiche donc :

Capture.PNG

La boucle for()

Cette boucle à le même principe que la boucle while(). On l'utilisie quand on souhaite un nombre d'itération fixe. Ainsi, notre code devient :

Capture.PNG

Dans notre boucle for on donne tout d'abord notre variable, on a ensuite une sorte de condition à la while(), donc tant que abonnés et inférieur à 1000, puis on ajoute les 100. On affiche le tout avec un printf().

Opérateurs de comparaison

Cette partie devrait être assez rapide. En effet, sans forcément vous en rendre compte, vous avez déjà utilisé des opérateurs de comparaison. Pour le savoir, il faut tout d'abord savoir à quoi cela correspond.
Comparons deux variables. L'une du nom de a et qui contient la valeur 1 et l'autre du nom b et qui contient la valeur 15.

  • Nous voulons vérifier que a est plus petit que b
    a < b
  • Nous voulons vérifier que a est plus grand que b
    a > b
  • Nous voulons vérifier que a est égal à b
    a == b
  • Nous voulons vérifier que a est inférieur ou égal à b
    a <= b
  • Nous voulons vérifier que a est supérieur ou égal à b
    a >= b
  • Nous voulons vérifier que a est différent de b
    a != b

Attention aux subtilités

  • !(a < b) est identique à (a >= b)
  • !(a == b) est identique à (a != b)
  • ...

Dans la vie d'un programmeur, il faut aussi ne pas oublier les opérateurs logiques. par exemple : "a est inférieur à b ou a est inférieur à c" se traduit par :
((a < b) || (a < c))
Ou bien : "a est inférieur à b ET a est inférieur à c" se traduit par :
((a < b) && (a < c))

Les fonctions

Dans un programme, il y a souvent des actions à répéter plusieurs fois. Au lieu de à chaque fois retaper le code, on va écrire une fonction et on aura juste besoin de l'appeler à chaque fois que ceci est nécessaire.

Par exemple printf() est une fonction et voici un bout de son code :

Capture.PNG

Donc au lieu de taper ce code dès qu'on veut afficher quelque chose, on créer la fonction qu'on stocke dans une librairie. Puis dans notre programme on appelle au tout début la libriaire et ensuite, dès que nous désirons afficher une chaine de caractères, on a juste à appeler notre fonction.

Nous ne sommes pas obligé de créer un nouveau fichier pour créer une fonction. En effet, nous pouvons faire ceci dans notre code.

Créons notre première fonction

La syntaxe ? Mais vous la connaissez déjà ! Et oui, c'est la même que la fonction main() dans laquelle vous faites votre code. C'est à dire

type nomFonction(paramètres) {
instructions;
}

Créons une fonction qui va afficher bonjour quand on l'appelle !

Capture.PNG
Capture.PNG

Et voilà ! Rapide et efficace ! Comme vous pouvez le voir, ma fonction est de type void. Cela signifie que la fonction ne retourne rien. Elle n'a pas de return. De plus, elle n'a pas de paramètre.

Créons une fonction de type int avec un paramètre

Capture.PNG
Capture.PNG

Créons une fonction de type int avec deux paramètres

Capture.PNG
Capture.PNG


Je vous conseil à présent de bien vous entraîner avec ces bases, vous avez le minimum en mains pour pouvoir aller faire un tour sur Coding Game et être au point pour la semaine prochaine ou nous verrons ce qui se passe dans la mémoire quand on éxecute un programme (le tout début du hacking donc). A vos claviers !




Hey ! J'éspère que cette série te plaîs ! N'hésite pas à me le dire en commentaire et aussi à me donner des conseils de rédaction, j'aime partager et apprendre des autres !

Tu peux aussi me suivre sur mes réseaux sociaux afin d'être informé de l'arrivé d'un nouvel article ou d'une nouvelle vidéo :


Sort:  

Merci super article !

Merci à toi !

Bon travail ! Merci

Il y a pas de quoi !

Tuto super complet, pour avoir les bases de la programmation :D
Tu penses pousser les tuto jusqu'à ou ? ça redonnerai presque envie de reprendre un peu le C

Haha oui j'essai d'être le plus claire possible !
Je compte pousser les tutos jusqu'à ce que vous soyez capable de lire un code source comme un livre ! Non plus sérieusement, faire tout un tour de la programmation en C, comprendre comment marche la mémoire et où est stockée l'information, l'exploitation de failles avec notamment du réseau et un peu de cryptologie 🙋‍♂️🙋‍♂️

Nice! Je prendrais alors les tutos en cours de route quand ça sera un peu plus poussé :D

Pas de soucis alors ! Hâte de te retrouver sur mes tutos !

Fais tout de même attention, le prochain article portera beaucoup sur la mémoire et le travail du compilateur, c'est vraiment la base du hacking de savoir comment tout ce petit monde fonctionne, c'est aussi pour aborder plus simplement les pointeurs qui peuvent parfois êtres prise de tête !

Ou comment obtenir de bonnes bases en programmation ! Excellent travail ! Upvoté à 100% !

Merci beaucoup ! 🙋‍♂️

Bonjour !
Très bon post, très bien expliqué, présenté en image, néanmoins je pense que beaucoup de personne voulant "devenir hacker" on entendu parlé du DW.
Je pense qu'un tuto expliquant ce que c'est, ce qu'il y contient (dans les limites de l'acceptable on va pas dire tout ce que l'on peut y trouver), une explication de ou aller dessus et le comportement a y tenir pour "limiter" si je peu dire les échanges au strict nécessaire pour apprendre serais intéressant pour les personne voulant vraiment devenir des futurs "pro".

Car comme dans beaucoup de domaine, il n'y a pas plus riche mine d'information dans le monde que le DW. Surtout concernant le hacking.

Je pense vraiment que faire un tuto mettant les gens en garde contre cette zone de l'internet, expliquant comme ce protéger si l'on y va et ou chercher l'information et surtout CE QU'IL NE FAUT PAS FAIRE. Serais d'une grande aide à beaucoup de monde. J'ai appris énormément de chose la-bas donc je parle en connaissance de cause ^^

Il est claire qu'il n'y a pas plus riche mine d'information dans le monde que dans le DW. Je pense cependant devoir tout d'abord sensibiliser avant de vraiment y faire un saut. C'est à dire, d'abord parler des attaques (les plus connues), comment s'en protéger etc ... Puis ensuite commencer à en parler ! :)

Merci d'avoir pris le temps d'écrire ce commentaire, bonne journée!

Oui voilà commencer par une sensibilisation puis expliquer comment s'en protéger. Mais expliquer ce que c'est est important surtout dans ce domaine

Great post! Consider to participate to one of the following contests!
Below is a list of some contests/giveaways on Steemit that you should definitely participate in.
The list isn't in any particular order and it isn't exhaustive.

1. Meme Challenge by
@fibra59 / https://steewit.com/@fibra59


A entertaining and popular contest to tickle your funny bones, it is sponsored by several Steemians and it'll certainly put you under the meme spotlight.
Tag - memechallenge

2. Open Mic Week by
luzcypher / https://steewit.com/@luzcypher
/
pfunk / https://steewit.com/pfunk


This contest will allow you to get your musical juices flowing. Make a musical video and submit it now.
Tag - openmic

3. Wild and Strange Contest/Steem-Pocalypse by
papa-pepper / https://steewit.com/@papa-pepper


Two very interesting contests running into their 5th and 3rd seasons respectively, you don't want to miss grabbing a spot on the next edition.
Tag - wildnstrange / steem-pocalypse

4. STEEM Cup Series/Steemit Scramble by
ats-david / https://steewit.com/@ats-david


If you are a sport enthusiast or otherwise, don't miss out on participating in these sporting event related contests.
Check out the latest contest here.

5. Art Challenge by
aksinya / https://steewit.com/@aksinya


You don't need to be an artist to join. Just interpret an artwork that is posted in your own words.
Tag - artchallenge

Coin Marketplace

STEEM 0.20
TRX 0.12
JST 0.029
BTC 60670.43
ETH 3380.02
USDT 1.00
SBD 2.51