Peut-on masquer / masquer les noms de symboles dans la table des symboles du fichier object exécutable ELF?

Selon cette spécification ELF: le fichier object ELF contient différentes sections et l’une d’entre elles est la section de table de symboles .symtab qui contient des informations sur tous les symboles (fichiers, fonctions, objects, etc.).

ELF contient des informations telles que le nom, les atsortingbuts de l’atsortingbut, le type, la valeur et la liaison, etc. pour chaque symbole de la table des symboles.

Le nom d’un object pour un fichier, une fonction ou un object (tableau, variable, chaîne), etc. expose effectivement les informations internes du code. De cette façon, toute personne peut parsingr un ELF (en utilisant des ssortingngs , des objdump ou des outils de readelf ) et voir ces informations et se faire une idée des choses internes au code qui doivent restr secrètes.

Pour plus de lisibilité et de maintenabilité, nous écrivons du code compréhensible par les développeurs. Nous devons donc continuer à utiliser des noms de fichiers et des noms de variables appropriés, etc. Nous ne pouvons pas les masquer en utilisant l’ obscurcissement du code, car cela rendra la maintenance difficile.

Question (édité): Existe t-il un moyen de masquer ou de supprimer les “noms” de symboles de la table des symboles de l’ELF exécutable afin que personne ne puisse avoir un aperçu du code et que l’exécutable soit toujours opérationnel?

Existe-t-il un moyen de masquer ou de masquer les noms de symboles dans la table des symboles de ELF afin que personne ne puisse avoir un aperçu de la façon dont le code est développé (sans obfuscation de code)?

Dépend du type de fichier ELF que vous envoyez à l’utilisateur final.

Si vous envoyez un exécutable ELF entièrement lié, exécutez ssortingp a.out supprimera complètement la table des symboles (mais pas le symbole dynamic, qui doit restr pour des raisons évidentes).

Si vous expédiez une bibliothèque partagée ELF, vous devez contrôler soigneusement son API exposée en utilisant -fvisibility=hidden ou un script de version de l’éditeur de liens. Si vous le faites, ssortingp supprimera à nouveau tout sauf votre API publique.

Si vous expédiez un object ELF déplaçable (ou une bibliothèque d’archives), vous ne pouvez rien faire concernant sa table de symboles (encore une fois, pour des raisons évidentes: la table des symboles est utilisée pour effectuer le lien final).

Enfin, votre question semble être fondée sur une idée fausse :

Nous ne pouvons pas les dissimuler en utilisant l’obscurcissement du code car cela rendra la maintenance difficile.

La manière habituelle d’appliquer l’obscurcissement du code est juste avant de faire le dernier produit d’expédition (c’est-à-dire exactement au même endroit où vous utiliseriez ssortingp ou toute autre méthode susceptible de masquer les détails de l’implémentation). L’application de l’obscurcissement du code à ce stade rendra le résultat difficile à maintenir exactement de la même manière que toute autre méthode de masquage des détails d’implémentation.

Notamment, vous n’utilisez pas (habituellement) de brouillage dans le code en cours de développement et de maintenance (c.-à-d. Que vos versions de développement ne sont pas masquées).