VT2017 Cdoe Obofsucaitn

From air
Revision as of 22:20, 3 October 2017 by Lucas.Lesage (talk | contribs) (Created page with "==Présentation Veille Technologique== * Sujet : Cdoe Obofsucaitn * Auteur : Lucas Lesage * Date : 6 Octobre 2017 * Enseignants : Didier Donsez, Georges-...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Présentation Veille Technologique

  • Sujet : Cdoe Obofsucaitn
  • Auteur : Lucas Lesage
  • Date : 6 Octobre 2017
  • Enseignants : Didier Donsez, Georges-Pierre Bonneau


Résumé

Un anagramme de "Code Obfuscation", littéralement "Obscurcissement de code" avec pour définition d'obfuscation : "The action of making something obscure, unclear, or unintelligible." Il s'agit dans le cas du code d'utiliser diverses méthodes pour rendre difficile la lecture de tout ou une partie du code source d'un programme ou un logiciel. La finalité étant de compliquer le reverse engineering de code ainsi que le vol de celui-ci. Pour cela, il ne suffit pas de changer les noms de variables ou de supprimer les espaces entres caractères autant que possible, de plus, le code doit rester entièrement fonctionnel que ce soit le code de base ou celui "obscurcit".

Mots clés

Code, Cryptologie, Programmation bas-niveau, Concurrence,

Abstract

Keywords

Synthèse

Introduction du terme et Problématique

La protection des données logicielles est un problème qui existe depuis plusieurs dizaines d'années, des conventions sont même apparues pour rassembler les programmeurs les plus créatifs, comme l'IOCCC depuis 1984 ! Déjà à l'époque il s'agissait d'un soucis de récupération de code par les concurrents, voire de modification directe du code source, car celui-ci doit être fourni au client avec le logiciel. Il est donc naturel de souhaiter rendre son code irrécupérable mais entièrement fonctionnel, mais très souvent, il n'est pas possible d'utiliser une formule magique et d'obtenir un code obscurcit, c'est d'ailleurs une partie de la problématique, comment cacher son code de façon récurrente et non décryptable. De plus, et c'est la deuxième problématique, les langages comme le C, le Perl ou l'assembleur offrent un accès aisé à la programmation bas niveau et ainsi permet de réaliser du code extrêmement illisible pour un être humain, même aidé par des programmes (Exemple 1). Mais les autres langages ne permettent pas un tel contrôle du code, et ainsi, comment créer un processus de cryptage du code qui soit applicable pour tout langage? Il est également à noter que certaines parties du code ne peuvent pas être cryptées, comme certaines librairies ou du code affichant dans la console son propre code.

Exemples

Exemple 1

[[]+1/!1][1^1]
[1>>1]+({}+[])
[1<<1^11>>1]+([]+!!-
[])[1<<1]+[/~/+{}]
[+!1][-~1<<1]+/\
[[^1]+\]/[([]+![])
[1<<1<<1]+(/|/[(1+{})
[1+11>>>1]+[[]+{}]
[+!1][1]+([]+1/[])
[1<<1>>1]+([1<1]+[])
[1+11>>>1+1]+[[!!1]+1]
[+[]][1-1]+([]+!!/!/)
[1|1]+(/1/[1]+[])
[!1%1]+(-{}+{})
[-1+1e1-1]+(1+[!!1])
[1]+([]+1+{})
[1<<1]+[!!/!!/+[]]
[+[]][1&1]]+/=/)
[1e1+(1<<1|1)+(([]+/-/
[(!!1+[])[1>>1]+(!!1+[])
[1<<1^1]+(!1+[])
[1|1<<1]+(!!1+[])[1^1]])
[1^1]==+!1)]+(!![]+{})
[1|1<<1]+[1+{}+1][!1+!1]
[(11>>1)+1]](([]+/-/
[(!!1+[])[1>>1]+(!!1+[])
[1<<1^1]+(!1+[])
[1|1<<1]+(!!1+[])
[1^1]]))[1&.1]
[11>>>1]+([,][~1]+[])
[1-~1]+[[]+{}][!1.1%
1[11111.1%11.1*111e
11|!1]+(/1/+1/[1<1]
[1%1])[1^11]+[[],[]+{}]
[1<<1>>>1][1||1]+(/
[<+>]/[1&1|1]+[1.1])
[1/11.1&1.11]

Ce code, écrit en JavaScript, est un parfait exemple de manipulation de chaines de caractères et de bit. En effet, le résultat obtenu est la chaine : "I love you". Le programme jouant avec la particularité du langage, avec comme par exemple :

[[]+1/!1][1^1][1>>1]

Qui récupère la chaine "Infinity", se positionne au début de celle-ci et en extrait la première lettre.

Situation actuelle

Cas souhaité

Conclusion

Avantages et inconvénients

Avantages

Inconvénients

  • Virus et autres malwares plus difficilement contrés.
  • Pas de retour en arrière après obscurcissement.
  • Code "étrange", donc méfiance.

Webographie

https://www.computer.org/cms/Computer.org/computing-edge/ce-jul16-final.pdf#page=18&zoom=auto,-91,437 http://www.ioccc.org/