C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Comment cacher les arguments passés en ligne de commande d'u

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
SC
Guest





PostPosted: Tue May 04, 2004 3:30 pm    Post subject: Comment cacher les arguments passés en ligne de commande d'u Reply with quote



Je cherche à cacher les paramètres passés en ligne de commande d'une
application programmée en C++/Qt. Cette application étant multi-plateforme,
j'ai pu tester que c'est facilement faisable sous Linux (en remplacant les
paramètres argv du main par des espaces vides) mais sous Windows ils
apparaissent toujours (je les observe avec prcView).

Quelqu'un a-t-il une solution pour faire cela?

D'avance merci,

Stéphane


Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Wed May 05, 2004 7:26 am    Post subject: Re: Comment cacher les arguments passés en ligne de commande Reply with quote



"SC" <scolson (AT) arkoon (DOT) net> wrote


Quote:
Je cherche à cacher les paramètres passés en ligne de commande d'une
application programmée en C++/Qt. Cette application étant
multi-plateforme, j'ai pu tester que c'est facilement faisable sous
Linux (en remplacant les paramètres argv du main par des espaces
vides) mais sous Windows ils apparaissent toujours (je les observe
avec prcView).

Cacher de qui, et qu'est-ce que tu entends par « cacher » ?

Que ce soit Linux, Unix, ou Windows, les chaînes désignées par argv[i]
peuvent être écrites ; la norme l'exige, d'ailleurs, au moins que je me
trompe. Du coup, si tu fais quelque chose du genre :

for ( int i = 0 ; i < argc ; ++ i ) {
memset( argv[ i ], 0, strlen( argv[ i ] ) ) ;
}

tu les as effacés là. À l'autre extrême, le programme a été invoqué
quelque part ; les paramètres d'invocation y sont forcement, et tu n'y
peux rien à partir du programme. À titre d'exemple, si tu a invoqué le
programme depuis une ligne de commande, les paramètres apparaîtront
toujours sur l'écran ; si tu l'as invoqué depuis un script ou un .BAT,
les paramètres s'y trouvent. Typiquement, ces endroits sont plus
facilement accessible aux autres que l'image binaire de ton programme.

Entre ces deux extrèmes, le système ou la bibliothèque C++ a pu aussi en
faire ces copies. Rien ne dit que argv[] soit le seul endroit dans
l'image de ton programme où ils existent, par exemple. C'est le seul
endroit sous les Unix classique. En revanche, la ligne de commande,
telle quelle (non découpée en paramètres), se trouvait en bas de la
mémoire sous MS-DOS. Sans parler du système : certains Unix, au moins
dans certaines configurations, enregistres tous les appels à exec dans
un fichier (très utile un cas d'intrusion) ; tu serais peut-être aussi
intéressé par le contenu du répertoire /proc (au moins sous Solaris,
mais je crois que c'est pareil sur d'autres Unix).

Enfin, il y a la question de ce que les utilitaires du système peuvent
afficher. Au moins sous Solaris, aujourd'hui, ps -f semblerait lire la
copie dans /proc, et il montre les paramètres tels qu'ils ont été passé
au processus, indépendamment des modifications que j'ai pu y faire par
la suite. D'après mes souvenirs, des Unix plus anciens les lisaient dans
l'image du processus, et l'effacement comme ci-dessus était efficace
pour les cacher de ps. Je ne sais pas ce qu'il en est de Linux, mais le
fait que tu ne vois pas les paramètre par un méthode ne veut pas dire
qu'ils ne soient pas accessible.

Tout ça pour dire que ce n'est pas parce qu'un programme donné ne les a
pas montré sous Linux que tu les as effectivement cachés.

Même dans les anciens Unix, où on pouvait masquer les paramètres,
c'était une règle de sécurité de ne jamais y passer des informations qui
doivent être cachées -- même si le système ne sauve rien, il y a une
fenêtre de visibilité entre le moment que le système a construit l'image
et que le programme s'execute réelement, et il y a toujours le programme
qui a invoqué ton programme, les caractères sur l'écran...

--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.