8Techniques de hacking
glisser dans les étroites failles de sécurité, et quiconque apprécie l’idée et le dé de
trouver la meilleure solution possible. Ces personnes sont fortement attirées par la
programmation et apprécient pleinement la beauté d’un morceau de code élégant ou
l’ingéniosité d’un hack. Puisque comprendre la programmation est indispensable à
la compréhension de l’exploitation des programmes, c’est par elle que nous allons
commencer.
0x210 Qu’est-ce que programmer?
Programmer est un concept très naturel et intuitif. Un programme n’est rien d’autre
qu’une suite d’instructions écrites dans un langage précis. Les programmes sont
partout et même les technophobes en utilisent tous les jours. Indiquer une direc-
tion, cuisiner une recette, jouer au football et l’ADN constituent des formes de
programmes. Voici un exemple de programme pour indiquer une direction:
Sur Main Street, allez vers l’est. Continuez sur Main Street jusqu’à voir
une église sur votre droite. Si la rue est bloquée par des travaux, tournez
à droite sur la 15e rue, à gauche sur Pine Street et à droite sur la 16e rue.
Sinon, vous pouvez simplement avancer et tourner à droite sur la 16e rue.
Descendez la 16e rue et tournez à gauche sur Destination Road. Continuez
votre route pendant 5 kilomètres. Vous verrez alors la maison sur la droite.
L’adresse est 743 Destination Road.
Toutes les personnes qui connaissent le français peuvent comprendre et suivre ces
indications, puisqu’elles sont écrites en français. Nous sommes d’accord, elles ne
sont pas éloquentes, mais chaque instruction est claire et facile à comprendre, tout
au moins pour ceux qui lisent le français.
Cependant, la langue maternelle d’un ordinateur n’est pas le français; il comprend
uniquement le langage machine. Pour expliquer à un ordinateur comment effectuer
une opération, les instructions doivent lui être données dans sa propre langue. Cepen-
dant, un langage machine est mystérieux et il est difcile de travailler avec–il est
constitué de bits et d’octets et diffère d’une architecture à l’autre. Pour écrire un
programme en langage machine pour un processeur Intel x86, vous devez déterminer
la valeur associée à chaque instruction, l’effet de chaque instruction et une myriade
de détails de bas niveau. Ce type de programmation demande beaucoup de soin et
reste lourde. Elle n’est en aucun cas intuitive.
Pour contourner la complexité du langage machine, nous avons besoin d’un traduc-
teur. Un assembleur est une forme de traducteur de langage machine–il s’agit d’un
programme qui convertit le langage assembleur en code lisible par la machine. Le
langage assembleur est moins énigmatique que le langage machine, car il utilise des
noms pour les différentes instructions et variables, à la place des valeurs. Cependant,
il est encore loin d’être intuitif. Les noms des instructions sont très ésotériques et
le langage est propre à chaque architecture. Tout comme un langage machine pour
les processeurs Intel x86 est différent d’un langage machine pour les processeurs
Sparc, un langage assembleur x86 diffère de son homologue pour Sparc. Chaque
2536_Hacking.indb 8 07/06/12 18:41
© 2012 Pearson France – Techniques de hacking, 2e éd. – Jon Erickson