Tutoriels pour l'Obfuscation du Code en C
Je suis fasciné par la façon dont les gens dissimuler leur code (pour la plupart, C) (exemples ici : http://ioccc.org/) et souhaitez apprendre les différentes techniques pour la même chose. On m'a dit d'un livre, "Obfuscated C et autres Mystères", mais je ne suis pas en mesure d'obtenir ce livre.
Existe-il des tutoriels ou des livres qui donnent des conseils sur ce sujet?
Je vous remercie.
Je ne pense pas qu'une technique générique peut exister pour ce... On doit être créatif.
Beaucoup de dissimulation sur codegolf.
Beaucoup de dissimulation sur codegolf.
OriginalL'auteur Chandra | 2013-06-13
Vous devez vous connecter pour publier un commentaire.
Le meilleur que vous pouvez faire est de lire les commentaires de l'auteur de l'programmes sur IOCCC. Ils décrivent comment ils parviennent à dissimuler leur code. Voici quelques conseils:
Court et dépourvu de sens identificateurs
Parce que
a=aaa*aa;
sera toujours plus brouillée queresult = value * factor;
Pour avoir, à court identifiants, obfuscators tendent à même
#define
beaucoup de choses.Inversé tableau d'indexation
Vous avez juste à rappeler que
var[3]
et3[var]
sont équivalentes.Bigrammes et trigraphs
if(a< <:b+aa??))??<f();%>
devrait être moins lisible que:
if (a < (b+aa)) { f(); }
Des caractères semblables
Parfois, il est difficile de dire appart
l
,1
etI
ouo
,0
etO
. Par exemple, si vous écrivez10l
, je parie que tout le monde va lire101
à la place.Style de codage des lignes directrices
Généralement parlant, essayez de trouver les bonnes règles de codage et d'essayer de de les violer tous les. Ces documents que vous pourriez trouver n'importe où sur le web pourrait vous aider plus que la plupart des choses et vous permettrait de ne pas acheter quoi que ce soit.
Voici quelques liens:
Vous avez laissé de côté les macros.
Oh oui, récursive des fichiers d'inclusion avec X-macros pour générer du code dans un tout obfusated.
il n'a pas besoin d'être quelque chose d'aussi lourd que X-macros - vous verrez souvent le bon vieux définitions de macro dans le code masqué entrées. Par exemple, la redéfinition d'un mot-clé peut rendre la lecture un programme assez douloureux:
#define char k['a']
Mais je vous ai déjà parlé
#defin
ing trucs dans ma deuxième point 🙂OriginalL'auteur Morwenn
Morwenn la réponse de couvre bien les obscurcissement de syntaxe. Mais il y a un autre niveau, et c'est sémantique de l'obscurcissement. Considérer que le mentionne souvent Machine de Turing a la même puissance de calcul que tout autre langage de programmation (sans tenir compte des considérations d'entrée et de sortie). En fait, tous les différents modèles de calcul ont frère les modèles avec une puissance équivalente.
Par exemple, une chaîne
char s[N]
peut être considéré comme une correspondance entre les indices de caractères, de sorte que toute chaîne de caractères peut être plutôt représentés par une fonction qui apporte toujours le caractère approprié, lorsqu'il est appelé avec un index spécifiéchar f(int i)
. Maintenant lire cette. Fou, non?OriginalL'auteur luser droog