Hello la compagnie,
Alors voilà, je crée des scripts (en bash) pour mes clients.
Je souhaitais "masquer" certaines parties, comme par exemple des mots de passe, des @IP, etc ..
J'ai donc testé d'écrire un truc en C++ et le compiler avec GCC.
Jusque là ça fonctionne bien, je lance le fichier et ça s'exécute normal sur le PC depuis lequel j'ai compilé.
Maintenant j'ai pris ce fichier compilé et j'ai tenté de l'exécuter sur ma machine cible: là catastrophe, message d'erreur rien ne fonctionne.
J'ai testé de compiler sous 32 et 64 bit: pareil !!
Ma machine cible est un Alcatel OXE qui tourne sous Linux Mandrake release 7.2 (Odyssey) for i486
Donc bon, je me dit que je vais installer GCC sur cette machine: ça ne veut pas …
( bon y'a pas internet, c'est une machine bien isolée, j'ai tenté à la mano )
Ma question: comment puis-je faire ? Si j'installe cette distro sur une VM et que je compile avec ça devrait marcher ? enfin si je peux installer gcc …
Où existe-t-il une autre méthode pour "masquer" un bout de code source ??
A savoir que base64 n'existe pas sur cette distro et que j'aurais par la suite à gérer pas mal de machines, donc ne pas baser tout mon code sur une commande qu'il faudrait installer sur chaque bécane !
Si quelqu'un a une idée je suis preneur !
Bonne journée à tous !!
# GCC cache les strings ?
Posté par Adrien Dorsaz (site web personnel, Mastodon) . Évalué à 3.
Hello,
Il me semble que GCC ne "cache" pas les constantes string dans le binaire.
Tu dois pouvoir vérifier avec ton éditeur de texte favoris ou avec la commande
strings ton_binaire
.[^] # Re: GCC cache les strings ?
Posté par stryk . Évalué à 2.
Ah oui je n'y ai pas pensé, je vais regarder ça bonne idée, merci !!!
# Il est où le message ?
Posté par Tonton Th (Mastodon) . Évalué à 5.
http://www.catb.org/~esr/faqs/smart-questions.html#beprecise
[^] # Re: Il est où le message ?
Posté par stryk . Évalué à 3.
Oui j'avoue je n'ai pas retenu le message, mais c'était à propos de l'architecture.
[^] # Re: Il est où le message ?
Posté par gorbal . Évalué à 5.
Il faudrait retrouver ce message, ce ne sert à rien de chercher à l'aveugle.
Par example si gcc compile par défaut par i586, le fait de vouloir d'utiliser l'utiliser sur un 486 va poser problème.
# Compilation en statique ?
Posté par gUI (Mastodon) . Évalué à 6.
Un truc à tenter c'est une compilation en statique. Je verrais bien un soucis de bibliothèques dynamiques (les .so) qui ne sont pas du tout en phase. Compilé en statique, tu auras un binaire (beaucoup) plus gros, mais auto-suffisant.
Attention aussi à la cible de compilation (tu parles d'une image i486, peut-être que ton compilateur sort des instructions optimisées i686 et plus que le processeur de la machine cible de connait pas ?)
Mais 32 bits, i386 et statique, ça devrait être pas mal je pense.
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
[^] # Re: Compilation en statique ?
Posté par stryk . Évalué à 1.
Alors ça me plait bien cette idée, bien que je ne sais pas trop comment compiler en statique ^
Je regarde ça, en tout cas merci pour la piste, et pour la taille ce n'est pas un souci, j'ai environ 300 à 400 lignes de codes avec un seul include.
[^] # Re: Compilation en statique ?
Posté par gUI (Mastodon) . Évalué à 3.
Tu vas voir comme ça va exploser en statique : pour schématiser, tu embarques la libc dans ton exécutable (bon, pas entière). D'ailleurs regarde la taille avant et après et dis-nous, c'est toujours intéressant à savoir.
Cherches un option du compilateur style
--static
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
[^] # Re: Compilation en statique ?
Posté par flavien75 . Évalué à 1. Dernière modification le 26 février 2020 à 11:16.
J'ai fait un essai pour du x86_64 (le "march=i386" ne passe pas chez moi) avec gcc 5.4.0.
Donc pour le classique "hello world":
Par défaut (gcc helloworld.c -o helloworld), j’obtiens 8.5K.
En ajoutant -static, on passe à 892K.
En ajoutant en plus -ffunction-sections -Wl,--gc-sections pour supprimer les fonctions inutilisées dans le binaire, on redescend à 856K.
J'espère qu'il y a d'autres moyens d'optimiser la taille, parce que Turbo C ne dépassait pas la dizaine de kilooctets pour ça.
Les vrais naviguent en -42
# Ouah!
Posté par ʭ ☯ . Évalué à 7.
Mandrake 7.2, j'ai utilisé ça quand j'avais 20 ans de moins! C'est sorti fin 2000, ça m'étonne pas que tes binaires récents ne trouvent pas les libs.
Tu peux faire ldd ./binaire et recopier à la main les libs qui manquent, cela ne devrait pas faire de conflit!
⚓ À g'Auch TOUTE! http://afdgauch.online.fr
# utiliser pgp/gpg ?
Posté par _kaos_ . Évalué à 3. Dernière modification le 25 février 2020 à 09:30.
Salut !
J'ai du mal à voir exactement de quoi tu essaye de te protéger, mais si c'est disons le vol de données sensibles, peut-être qu'en chiffrant le fichier contenant les données avec par exemple pgp ou gpg et en fournissant le mot de passe de déchiffrement à l'utilisateur final…
Bien sûr, ça crée un spof, mais peut-être moins gros qu'un binaire dont on peut extraire les strings ?
Matricule 23415
[^] # Re: utiliser pgp/gpg ?
Posté par stryk . Évalué à 1.
Oui c'est ça, en fait je veux juste que les mots de passe et @IP ne soit pas en clair dans le code.
J'attends de voir ce que ça donne quand je vais réussir à exécuter quelque chose de compilé ^
[^] # Re: utiliser pgp/gpg ?
Posté par NeoX . Évalué à 3.
Il ne devrait meme pas être DANS le code, en clair ou chiffré, c'est une aberration.
au mieux c'est un mot de passe par défaut, connu et documenté, comme celui qu'on trouve sur bon nombre d'appliance au premier démarrage.
mais ensuite le mot de passe doit pouvoir être changé, et c'est le stockage de ce mot de passe (lié à la configuration finalement) qui doit être chiffré.
[^] # Re: utiliser pgp/gpg ?
Posté par _kaos_ . Évalué à 2. Dernière modification le 25 février 2020 à 20:32.
Salut,
La sécurité par l'obfuscation, d'expérience je dirais que c'est une mauvaise pratique.
Donc bon, fais ton petit bout de code si ça te plais, mais je crois qu'il y a des gens qui ont y réfléchi pendant des années. ;)
Matricule 23415
[^] # Re: utiliser pgp/gpg ?
Posté par liberforce (site web personnel) . Évalué à 4. Dernière modification le 26 février 2020 à 10:28.
La configuration n'est pas censée être dans le code.
https://12factor.net/config
Tu es censé la stocker dans des fichiers de configuration, lisibles par ton application, mais avec des droits limités pour n'être lisibles que pour certains utilisateurs. Pour les données sensibles (mots de passe), il faut les injecter via des variables d'environnement. Ensuite tu ne stockes pas un mot de passe en clair pour le comparer avec celui par l'utilisateur: tu stockes le hash en général, et tu compares les hash. En revanche je suis preneur d'infos sur comment bien stocker le hash :)
Ensuite, ta question ressemble à un Problème_XY.
Donc à priori en bash, tu devrais stocker les infos sensibles dans des fichiers avec les bons droits, et demander à tes scripts de lire des variables d'environnement pour les données sensibles. Je dirais qu'il n'y a pas besoin de s'embêter à faire du C/C++.
Mais ça ma parait bizarre de se préoccuper de cela sur une plateforme déjà obsolète il y a 10 ans, et donc déjà une passoire en termes de sécurité.
[^] # Re: utiliser pgp/gpg ?
Posté par _kaos_ . Évalué à 2.
Salut,
Assez d'accord avec tes remarques.
Avec du sel ;)
Mais peut-être que tu connais déjà cette info :(
Matricule 23415
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.