Comment crypter le code d’un logiciel


Crypter et décrypter dynamiquement le code est la partie facile - même en code machine, tout n'est qu'un tas d'octets ; vous pouvez en faire ce que vous voulez (tant que vous informez le système d'exploitation de vos intentions). Par exemple, regardez ceci - la réponse de Vladislav Zorov'au C (langage de programmation) : Pouvez-vous écrire un programme C pour démontrer un code auto-modifiant ?

Cacher la clé de chiffrement est beaucoup plus difficile. Il existe des schémas cryptographiques spéciaux pour cela, appelés White-box cryptography - l'idée étant que la clé n'est pas stockée sous forme de données, mais qu'elle est implicite dans la structure d'un morceau de code complexe.


Bien sûr, tout cela ne sert à rien si vous pouvez simplement exécuter le programme jusqu'à ce qu'il se soit déchiffré lui-même, puis tout vider. Il faut donc continuellement décrypter, exécuter, et ré-encrypter.

Comme obstacle supplémentaire, vous pouvez fabriquer votre propre CPU, avec un jeu d'instructions conçu pour être particulièrement obtus. Et ensuite, il suffit de compiler le programme pour cela, et de le faire exécuter dans une machine virtuelle.

Il y aura également des mécanismes pour détecter l'exécution dans un débogueur ou une machine virtuelle, afin de rendre l'analyse de code dynamique difficile.

Bien sûr, rien de ce qui précède ne fonctionne vraiment - cela ne fait que rendre la rétro-ingénierie plus lente et plus pénible. S'il y avait une solution, nous aurions des DRM qui fonctionnent, et nous n'en avons clairement pas.

P.S. Je suppose que vous ne voulez pas vraiment dire "code source", mais juste "code". Le code source n'est généralement pas inclus avec l'application, sauf dans les logiciels libres/ouverts, où empêcher les gens de le voir est l'exact opposé de ce que vous essayez de faire.

.