Question

Je suis une application (ancienne) qui appelle à la fonction WinSocket:

struct hostent* FAR gethostbyname(
  __in  const char *name
);

Il importe actuellement ws32_dll. # 52 à la place l'appel du nom normal.

Mon intention est juste de pouvoir faire quelque chose comme ouvrir une boîte de message lors d'une recherche d'hôte arrive (qui devrait être au début de l'application).

J'ai essayé de créer un c ++ dll avec les commentaires pragma pointant vers # 52 et de le mettre sur l'application dir (y compris un « exe.local » et les fichiers « exe.manifest » pour essayer de le rediriger), mais l'a chargé de c:. \ windows \ system32 à la place

Après cela, i créé un projet c # lancement du processus lui-même (d'où l'obtention PID à partir de l'objet de processus), en ajoutant le dll easyhook à elle.

J'ai vérifié l'exemple à: http://www.codeproject.com/KB/ DLL / EasyHook64.aspx

Modification des appels à:

    FileMon.FileMonInterface Interface;
    LocalHook CreateFileHook;
    Stack<String> Queue = new Stack<String>();

    public Main(
        RemoteHooking.IContext InContext,
        String InChannelName)
    {
        // connect to host...

        Interface = 
          RemoteHooking.IpcConnectClient<FileMon.FileMonInterface>(InChannelName);
    }

    public void Run(
        RemoteHooking.IContext InContext,
        String InChannelName)
    {
        // install hook...
        try
        {
            CreateFileHook = LocalHook.Create(
                LocalHook.GetProcAddress("ws2_32.dll", "gethostbyname"),
                new DCreateFile(GetHostByName_Hooked),
                this);

            CreateFileHook.ThreadACL.SetExclusiveACL(new Int32[] { 0 });
        }
        catch (Exception ExtInfo)
        {
            Interface.ReportException(ExtInfo);

            return;
        }

        Interface.IsInstalled(RemoteHooking.GetCurrentProcessId());

        // wait for host process termination...
        try
        {
            while (true)
            {
                Thread.Sleep(500);

                // transmit newly monitored file accesses...
                if (Queue.Count > 0)
                {
                    String[] Package = null;

                    lock (Queue)
                    {
                        Package = Queue.ToArray();

                        Queue.Clear();
                    }

                    Interface.OnCreateFile(RemoteHooking.GetCurrentProcessId(), Package);
                }
                else
                    Interface.Ping();
            }
        }
        catch
        {
            // NET Remoting will raise an exception if host is unreachable
        }
    }


    [UnmanagedFunctionPointer(CallingConvention.StdCall,
        CharSet = CharSet.Auto,
        SetLastError = true)]
    delegate IntPtr DGetHostByName(
        String name);

    // just use a P-Invoke implementation to get native API access
    // from C# (this step is not necessary for C++.NET)
    [DllImport("ws2_32.dll",
        CharSet = CharSet.Auto,
        SetLastError = true,
        CallingConvention = CallingConvention.StdCall)]
    static extern IntPtr gethostbyname(
        String name);

    // this is where we are intercepting all file accesses!
    static IntPtr GetHostByName_Hooked(
        String name)
    {
        try
        {
            Main This = (Main)HookRuntimeInfo.Callback;
            MessageBox.Show("hi!");


        }
        catch
        {
        }

        // call original API...
        return GetHostByName(
            name);
    }
}

}

(peut avoir fait des fautes de frappe écrire ici, mais le projet est compilé avec succès @ home).

La chose est que je ne sais pas ce que je dois faire le crochetage ces méthodes <->. L'application elle-même

Je veux dire .. ce lefts faire juste le crochetage avec c # easyhook (en supposant que l'application est « foo.exe »)? Ai-je besoin de créer une dll personnalisee pour easyhook? (Dans ce cas, quel contenu dois-je définir l'intérieur?)

Je l'ai trouvé pour un crochet helloworld un peu ... "complexe", hehe.

Merci d'avance;)

Était-ce utile?

La solution

En fin de compte, en utilisant le livre « hack python gris » m'a appris comment faire tout cela avec moins de lignes, et la même chose que je voulais.

Pas encore exe mais ... c'est tout.

Utilisation pydbg + crochets.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top