2010-11-08 4 views
1

J'ai un petit programme à l'esprit:Comment puis-je ajouter un programme à un autre puis l'exécuter?

void main(void) 
{ 
printf("Password"); 
gets(pass); 
if(!strcmp(pass,"Something")) 
    //execute program in the same binary 
else 
    printf("Wrong password"); 
} 

je besoin d'un mot de passe pour exécuter un programme, le programme doit être dans le même exécutable, et considérant que je n'ai pas le code source l'idée est de ajouter le second programme au premier.

Je prends des mesures dans mon propre programme et ensuite je lance le second programme.

Comment faire?

Répondre

4

Je ne suis pas sûr que ce sera si facile de relier des binaires ensemble. Ont-ils ont être un seul exécutable? Si ce n'est pas le cas, une approche très proche consiste à utiliser l'une des fonctions exec, en supposant que vous travaillez sous * nix.

+0

Oui, ils doivent être en 1 binaire, merci pour l'astuce "exec" mais je sais comment les utiliser. –

+0

@Vaul: Alors ça va être très, très difficile! –

0

Utilisez le code system comme celui-ci

system("binary_code.exe") 

Il pourrait être préférable de spécifier le chemin du binary_code.exe mais .... Qu'advient-il si le programme externe est supprimé ... vous devez gérer cela et Prenez le en compte.

De plus, vous demandez des problèmes en utilisant le code obsolète gets qui est un tampon exploitable ... utilisez plutôt fgets!

2

Vous ne pouvez pas faire cela (quelque chose de proche) à la façon dont vous semblez vouloir. Vous pouvez réussir à le faire, mais c'est une bonne quantité de travail. Fondamentalement, vous devez concaténer les deux programmes ensemble, avec le vôtre en premier, donc c'est celui qui va s'exécuter. Votre programme devra alors extraire l'autre dans un fichier temporaire, l'exécuter, puis supprimer ce fichier temporaire après l'avoir fait (ou, si disponible, utiliser les fonctions du système d'exploitation pour s'assurer qu'il est automatiquement supprimé). Notez également que ceci est extrêmement fragile à plusieurs niveaux - un pirate qui sait ce qu'il fait va probablement briser votre tentative de sécurité en moins de temps qu'il n'en a fallu pour commencer.

+0

Je connais la faille de sécurité, c'est seulement un concept. Faire un fichier temporaire ne devrait pas être si difficile, il suffit de calculer la taille du programme A, puis copiez le second de A size à FEOF et exécutez le temporaire. Mais n'importe qui peut copier le temporaire et je voudrais le chiffrer dans le premier pour éviter la copie (Par exemple) –

+1

Une méthode alternative serait d'ajouter votre code comme une section de texte supplémentaire à l'exécutable existant, puis modifier l'entrée point à point dans votre code. Votre code peut ensuite passer au point d'entrée d'origine. – caf

+0

Ce serait génial, puis-je utiliser l'assembleur? Je pense que je peux quelque chose comme "goto X byte" et suivre à ce point, je cherche un moyen de le faire. –