Assombrissement

Code impénétrable

Le code impénétrable d'un programme informatique est un code dont la compréhension est très difficile pour un humain tout en restant parfaitement compilable par un ordinateur.

Appelé aussi assombrissement ou obfuscation, cette technique de programmation – qui va à l'encontre des usages habituels – a ses raisons.

C'est tout d'abord un moyen de protéger les investissements de développement d'un logiciel par des techniques de génération de code objet rendant plus difficile la rétro-ingénierie. Il consiste notamment au remplacement d'identificateurs et de labels mnémoniques par des labels non signifiants.

Mais c'est aussi un violon d'Ingres de certains programmeurs. Ce loisir consiste en l'écriture de code source dont la fonction est difficile à déterminer. L'usage d'une syntaxe illisible, de particularités sémantiques peu connues ou peu recommandables du langage utilisé ou d'algorithmes peu naturels sont différentes techniques d'assombrissement.

La première forme d'assombrissement concerne le code objet généré à fin de distribution d'un programme alors que la seconde concerne le code source.

Sommaire

Quelques assombrissements historiques

Assembleur

Programmes éliminant tous les commentaires d'un programme-source et remplaçant toutes les étiquettes (par exemple BOUCLE, REPRISE, ERREUR par des ETI00001, ETI00002, ETI00003 moins parlants.).

Variante plus perverse encore : au lieu de blanchir les commentaires, les remplacer par d'autres commentaires qui n'apportent absolument rien ; par exemple :

      LR    15,=X'0F'       ; On charge X'0F' dans le registre 15

Turbo Pascal 3

Du temps de Turbo Pascal 3 existait un programme supprimant tous les blancs non significatifs d'un code source, tassant celui-ci à raison de 255 caractères par ligne, et remplaçant toutes les variables par des combinaisons de l (l minuscule) de 1 (chiffre 1), de O (O majuscule) et de 0 (chiffre 0). Par exemple A := B + C devenait l0O1l10O:=O1ll10O0+O0O1l00ll, considéré à tort ou à raison comme moins lisible. La nécessité de ces obfuscators venait du fait que Turbo Pascal 3 ne permettait pas de distribuer des sous-programmes autrement que sous forme source.

Utilisation d'un langage générant de l'assembleur

Dans les années 1960 et 70, la plupart des constructeurs utilisaient pour leurs développements des langages de type PL (PL360, PL/M, PL/C, PL/S, PL/1600...) qui traduisaient un code source semi-évolué en assembleur. Les applications n'étant vendables à l'époque que si leur code source était disponible[réf. nécessaire], c'est ce code assembleur généré qui était mis à disposition des clients. Ainsi, une instruction comme A=B+31; devenait :

      LR     4,B
      ADD    4,=31
      ST     4,A

Version que le client était moins enclin à modifier, d'autant que la version suivante l'aurait obligé à recommencer toutes ses modifications. Le but premier était moins de masquer le code source que de limiter les modifications des programmes par les clients ; la maintenance à distance par les éditeurs étant plus difficile pour les programmes modifiés.

FORTRAN

      DO 10 I=1,N
      DO 10 J=1,N
   10 A(I,J)=(I/J)*(J/I)

Il faut un petit moment pour se rendre compte que ce bout de code met tout simplement des 1 sur la diagonale principale de A et des 0 partout ailleurs.

Assombrissement algorithmique

La division en sous-chaînes égales d'une chaîne de longueur n prouve que n est non premier. L'usage d'une expression rationnelle pour un tel test est donc possible, bien que peu naturel et plutôt lent. Une preuve de concept a été écrite en Perl[1].

Une forme particulière d'assombrissement est un programme multilingue qui fait la même chose quand exécuté par différents interpréteurs ou compilateurs. Il existe ainsi un programme qui s'exécute indifféremment interprété par Perl et compilé en C, et dont cela constitue d'ailleurs le seul intérêt.

Autres

L'assombrissement utilise souvent des recoins peu testés de l'implémentation d'un langage et peut quelquefois contribuer à la détection de bogues.

L'IOCCC (International Obfuscated C Code Contest) est le concours annuel d'assombrissement en C. The Perl Journal a organisé des concours d'assombrissement en Perl. Certains JAPH sont des assombrissements.

Certains langages comme le C, le Perl et l'APL se prêtent très bien à l'assombrissement. Dans The Humble Programmer, Edsger Dijkstra a des mots très durs pour les langages riches qui se prêtent à de telles techniques et se fait l'avocat de langages plus modestes. Larry Wall affirme en revanche qu'un langage qui essaierait d'interdire de mauvaises pratiques telles que l'assombrissement empêcherait aussi d'écrire des programmes légitimes tels que les unilignes.

Références

Annexes

Voir aussi

Liens externes

  • Portail de l’informatique Portail de l’informatique
  • Portail de la sécurité de l’information Portail de la sécurité de l’information
Ce document provient de « Code imp%C3%A9n%C3%A9trable ».

Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Assombrissement de Wikipédia en français (auteurs)

Regardez d'autres dictionnaires:

  • assombrissement — [ asɔ̃brismɑ̃ ] n. m. • 1801; de assombrir ♦ Le fait d assombrir ou de s assombrir; état de ce qui est assombri. L assombrissement du ciel. ⇒ obscurcissement. Fig. L assombrissement de l humeur. ⇒ tristesse; mélancolie. ⊗ CONTR. Éclaircissement,… …   Encyclopédie Universelle

  • ASSOMBRISSEMENT — n. m. état de ce qui s’assombrit. L’assombrissement du ciel. Fig., L’assombrissement de son caractère …   Dictionnaire de l'Academie Francaise, 8eme edition (1935)

  • assombrissement — (entrée créée par le supplément) (a son bri se man) s. m. Action d assombrir, état de ce qui est assombri. •   L assombrissement du soir, MAX MÜLLER Essais sur la mythologie comparée, traduit par G. Perrot, p. 129, Paris 1873 …   Dictionnaire de la Langue Française d'Émile Littré

  • assombrissement — užtemdymas statusas T sritis fizika atitikmenys: angl. blackout vok. Abdunkelung, f; Verdunkelung, f rus. затемнение, n pranc. assombrissement, m; obscurcissement, m …   Fizikos terminų žodynas

  • assombrissement — drumstumas statusas T sritis fizika atitikmenys: angl. cloudiness; turbidity vok. Trübung, f rus. мутность, f pranc. assombrissement, m; turbidité, f …   Fizikos terminų žodynas

  • Assombrissement Global —   Pollution  v ·  · m  Pollution de l air …   Wikipédia en Français

  • Assombrissement Centre-bord — Image du soleil. L assombrissement centre bord est l effet de diminution apparente de l intensité lumineuse sur les bords du disque du soleil. En astronomie, l assombrissement centre bord est l effet de diminution apparente de l intensité… …   Wikipédia en Français

  • Assombrissement global — L avancée des déserts, le recul des herbages, l extension des labours et de la dégradation des sols sont sources d une quantité croissante d aérosols emportés par le vent (érosion éolienne) L’assombrissement global ou obscurcissement planétaire… …   Wikipédia en Français

  • Assombrissement centre-bord — Image du soleil. L assombrissement centre bord est l effet de diminution apparente de l intensité lumineuse sur les bords du disque du soleil. En astronomie, l assombrissement centre bord est l effet de diminution apparente de l intensité… …   Wikipédia en Français

  • Obscurcissement global — Assombrissement global   Pollution  v ·  · m  Pollution de l air …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”