2010-11-27 33 views
1

Je cherche un bon moyen de remplacer plusieurs chaînes à l'intérieur d'un exe compilé win32 natif. Par exemple, je suit dans mon code:C++ Win32 Remplacer les chaînes dans un exécutable

const char *updateSite = "http://www.place.com" 
const char *updateURL = "/software/release/updater.php" 

Je dois modifier ces chaînes avec d'autres chaînes de longueur arbitraire dans l'exe. Je me rends compte que je pourrais stocker ce type de configuration ailleurs, mais le garder dans l'exe répond aux exigences de portabilité pour mon application. J'apprécierais n'importe quelle aide et/ou conseil sur la meilleure manière de faire ceci.

Merci!

Mise à jour: Je trouve un code dans le projet Metasploit qui semble faire: MSF:Util:Exe

+4

Ceci est très mal conseillé, si c'est même possible de le faire de manière fiable. Pouvez-vous afficher ces exigences de transférabilité, pour clarifier pourquoi c'est la meilleure façon? –

+3

Est-il possible de modifier votre code pour utiliser des chaînes à partir d'une table de chaînes de ressources intégrées plutôt que de chaînes codées en dur? – MerickOWA

+0

Steve - J'essaie d'avoir une solution de fichier unique. Merci pour votre commentaire. J'avais le sentiment que ce serait une chose un peu hacky à essayer. – Josh

Répondre

4

Je ne voudrais pas déranger le EXE lui-même, si vous avez vraiment besoin d'un fichier, puis faites l'ancienne annexe zip et mettez vos configs là-dedans.

pourrait ressembler à ceci:

> BINARY DATA 
> ZIP FILE DATA 
> 32bit unsigned int which's value is the size of the appended zip file 

Plus:

  • facile à étendre/maintenir
  • vous ne jouez pas avec l'exe se
  • vous pouvez mettre beaucoup de choses là

Contras:

  • Vous devez lier une certaine compression lib

Si vous ne voulez pas fermer la fermeture éclair, puis il suffit d'écrire quelque chose simple archive non compressée, votre propre.

0

Dans un fichier PE est le déménagement mondial table- il est une liste d'adresses (par exemple, les variables globales ou des constantes qui doivent être stockées à l'exécution, comme, disons, des chaînes) qui doivent être modifiées par le chargeur PE. Si vous connaissiez l'entrée de cette variable particulière, vous pourriez obtenir son adresse et la modifier manuellement. Cependant, ce serait une chienne totale et vous auriez besoin d'une connaissance approfondie de votre compilateur préféré et le format PE. Plus facile juste pour utiliser XML ou Lua ou quelque chose d'autre qui est totalement portable - ils ont été inventés pour exactement ce genre de but.

Edit:

Pourquoi ne pas simplement utiliser un const char **? Y at-il un problème avec cette variable d'exécution normale?

0

IMO le meilleur endroit pour stocker ces chaînes dans une ressource de table de chaînes. Il est incorporé dans votre fichier .EXE, donc la portabilité ne sera pas compromise.

Use the visual studio editor pour modifier ces valeurs.

Utilisez la méthode LoadString WinAPI, ou mieux, CString::LoadString, dans votre code, pour charger les valeurs.

Il existe également un logiciel tiers qui vous permet de modifier les chaînes dans le fichier .EXE compilé, sans recompilation.