Avec les progrès de la technologie numérique, la menace d’un niveau inimaginable de duplication et de reproduction illégale de logiciels augmente également. Par conséquent, le taux de piratage augmente proportionnellement. Ce scénario a clairement placé la menace pour les fabricants de logiciels et conduit au développement de nombreuses techniques de protection logicielle. Les nombreuses techniques de protection logicielle ont été développées et l’une de ces techniques de protection logicielle est l’obscurcissement du code. L’obscurcissement du code est un mécanisme permettant de masquer l’algorithme d’origine, les structures de données ou la logique du code, ou de durcir ou de protéger le code (qui est considéré comme la propriété intellectuelle du rédacteur du logiciel) du processus de rétro-ingénierie non autorisé. En général, l’obscurcissement du code consiste à cacher les détails d’implémentation d’un programme à un adversaire, c’est-à-dire transformer le programme en un programme sémantiquement équivalent (même effet de calcul), ce qui est beaucoup plus difficile à comprendre pour un attaquant. Aucune des techniques d’obscurcissement de code actuelles ne satisfait à tous les critères d’efficacité de l’obscurcissement pour résister aux attaques de rétro-ingénierie. Par conséquent, les chercheurs ainsi que les industries du logiciel font de leur mieux pour appliquer des techniques d’obscurcissement plus récentes et meilleures sur leur propriété intellectuelle dans un processus régulier. Mais malheureusement, le code logiciel n’est pas sûr, c’est-à-dire qu’il peut toujours être fissuré. Cet article présente certaines des méthodes d’obscurcissement, qui peuvent aider à protéger les fragments de code sensibles de tout logiciel, sans altération des fonctionnalités inhérentes au logiciel. Les techniques d’obfuscation proposées sont implémentées dans le code au niveau de l’assemblage, en prenant soin de la théorie de l’optimisation des transformations. Le code assembleur représente les dépendances de données et le confort d’analyse des données après le désassemblage de l’exécutable par rapport au code décompilé.