2011-03-23 2 views
2

J'ai le fichier EXE d'un utilitaire, quand je lance ce fichier, il y a un winform seulement et il y a un bouton quand on clique dessus, il exécute le bloc-notes de Windows. Maintenant, je veux pirater la commande de ce programme pour exécuter le bloc-notes et au lieu d'exécuter le bloc-notes, je veux exécuter MS Word. Je connais C# et VB.NET. Qu'est-ce que j'ai besoin de faire ça?Commande du programme de piratage pour exécuter le bloc-notes

+0

La première chose que vous devez faire est de fournir du code. –

+4

Naughty, vilain ... – BoltClock

+0

jeter un oeil à ma réponse. tous downvote mais personne ne semble savoir comment le faire mieux et je sais que cela devrait fonctionner à moins que l'application est protégée à quel point il serait difficile d'expliquer comment le faire et ce serait une demande de fissure – n00b

Répondre

5

Vous pouvez essayer d'ajouter dans le dossier avec ce programme votre propre programme appelé notepad.exe qui ne devrait faire qu'une chose: exécuter le mot.

Si vous voulez le faire en C programatically alors vous devriez lire cette page - peut-être aide: Intercepted: Windows Hacking via DLL Redirection

+0

@Korin: mes aînés m'ont dit que cela peut être fait en utilisant l'interception d'appel système, mais je ne sais pas comment? – jams

+0

1+. utilisez cette méthode. Je supprime ma réponse (pas que je pense que je me trompe, mais cela fonctionnera) – n00b

+0

@user je doute que vous fassiez une interception dans. NET et si vous voulez, ce sera une overkill: P vous pourriez injecter un .dll pour installer un crochet sur le processus de création, mais qui est aussi une surpuissance – n00b

3

Vous pouvez utiliser une astuce pour remplacer les programmes avec un autre en apportant des modifications au Registre. Cela fonctionnera même si le programme que vous utilisez utilise des chemins absolus pour exécuter le bloc-notes. Il remplace toute instance du programme en cours avec celui choisi, peu importe où il réside. Et vous n'aurez pas à patcher le fichier. La clé que vous seriez intéressé est:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options 

Ajouter une clé avec le nom du programme et ajouter une chaîne Debugger avec le chemin d'accès au programme que vous souhaitez remplacer. Bien sûr, vous devez avoir les autorisations pour faire les modifications nécessaires. Ce page explique comment vous pouvez remplacer le Bloc-notes Windows par un autre programme. Vous pouvez appliquer le même processus ici.


Bien que vous voudrez probablement pas avoir ce changement permanent, de sorte que vous pouvez écrire un programme pour ajouter/modifier temporairement la clé, exécutez votre programme puis changer de nouveau. En voici une complète que je viens de fouiller pour remplacer temporairement le Bloc-notes par Word pour une démonstration. Semble fonctionner parfaitement bien (mais comme toujours, utilisez à vos risques et périls). Faites juste tous les changements nécessaires pour s'adapter à votre situation.

using System.Diagnostics; 
using Microsoft.Win32; 

namespace ProgramLauncher 
{ 
    class Program 
    { 
     // change the following constants as needed 
     const string PROGRAM_NAME = @"notepad.exe"; 
     const string REPLACEMENT_PATH = @"C:\Program Files (x86)\Microsoft Office\Office12\WINWORD.EXE"; 
     const string RUNNING_PATH = @"C:\Windows\notepad.exe"; 

     // root key 
     const string KEY = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options"; 

     static void Main(string[] args) 
     { 
      using (var rootKey = Registry.LocalMachine.OpenSubKey(KEY, RegistryKeyPermissionCheck.ReadWriteSubTree)) 
      { 
       var oldPath = default(string); 
       var needsRestoration = false; 
       try 
       { 
        oldPath = BackupKey(rootKey, PROGRAM_NAME, REPLACEMENT_PATH); 
        needsRestoration = true; 
        Process.Start(RUNNING_PATH).WaitForExit(); 
       } 
       finally 
       { 
        if (needsRestoration) 
         RestoreKey(rootKey, PROGRAM_NAME, oldPath); 
       } 
      } 
     } 

     static string BackupKey(RegistryKey rootKey, string programName, string newPath) 
     { 
      Debug.Assert(rootKey != null); 
      Debug.Assert(!string.IsNullOrEmpty(programName)); 
      Debug.Assert(!string.IsNullOrEmpty(newPath) && System.IO.File.Exists(newPath)); 
      if (newPath.Contains(" ")) 
       newPath = string.Format("\"{0}\"", newPath); 

      using (var programKey = rootKey.CreateSubKey(programName, RegistryKeyPermissionCheck.ReadWriteSubTree)) 
      { 
       var oldDebugger = programKey.GetValue("Debugger") as string; 
       programKey.SetValue("Debugger", newPath, RegistryValueKind.String); 
       return oldDebugger; 
      } 
     } 

     static void RestoreKey(RegistryKey rootKey, string programName, string oldPath) 
     { 
      Debug.Assert(rootKey != null); 
      Debug.Assert(!string.IsNullOrEmpty(programName)); 

      if (oldPath != null) 
      { 
       using (var programKey = rootKey.OpenSubKey(programName, RegistryKeyPermissionCheck.ReadWriteSubTree)) 
        programKey.SetValue("Debugger", oldPath); 
      } 
      else 
      { 
       rootKey.DeleteSubKey(programName); 
      } 
     } 
    } 
} 
Questions connexes